diff --git a/sammy/src/clm/CrystalLatticeBroadening_M.f90 b/sammy/src/clm/CrystalLatticeBroadening_M.f90
index d19fad46a443bf9f2ca18899a381859a121128f1..fe48d47b708f15af5d472706b2aed9bb349e66d1 100644
--- a/sammy/src/clm/CrystalLatticeBroadening_M.f90
+++ b/sammy/src/clm/CrystalLatticeBroadening_M.f90
@@ -101,16 +101,14 @@ subroutine CrystalLatticeBroadening_broaden(this)
    class(CrystalLatticeBroadening) :: this
 
    integer::ndatb
-   type(DerivativeHandler)::data
+
+   call FreeGasDopplerBroadening_broaden(this)
 
    ! reserve the data
    ndatb =  this%getNumEnergyBroadened()
-   call this%getData(data)
-   call data%nullify()
-   call data%reserve(ndatb*data%getNnnsig(), this%numPar+1)
    if( this%hasSelf) then
       call this%dataSelf%nullify()
-      call this%dataSelf%reserve(ndatb*this%dataSelf%getNnnsig(), this%numPar+1)
+      call this%dataSelf%reserve(ndatb*this%dataSelf%getNnnsig(), this%getNumParams()+1)
    end if
 end subroutine
 
diff --git a/sammy/src/clm/mclm8a.f90 b/sammy/src/clm/mclm8a.f90
index 6e878dc33ccd4838be2655b71f1faef33e4bedce..129246c46728076b6b394764cd50ff2d5d22dd16 100644
--- a/sammy/src/clm/mclm8a.f90
+++ b/sammy/src/clm/mclm8a.f90
@@ -42,7 +42,7 @@ module Qtrap_Clm_m
       irow = calc%getCurrentPos()
       Na = derivs%getNnnsig()
       call tmpCalc%setNnsig(Na)
-      call tmpCalc%reserve(Na, calc%numPar+1)
+      call tmpCalc%reserve(Na, calc%getNumParams()+1)
 !
       Lstart = 1
       Jmax = 10
@@ -90,7 +90,7 @@ module Qtrap_Clm_m
             E_Prime = Xxa + Half*Del
 !
 ! ***       Take half of what's already there
-            do ipar = 0, calc%numPar
+            do ipar = 0, calc%getNumParams()
                do N = 1, Na
                  val = tmpCalc%getDataNs(1, N, ipar, 1)*Half
                 if (val.eq.0.0d0) cycle
@@ -140,7 +140,7 @@ module Qtrap_Clm_m
 
          accu = .true.
          call derivs%setAccumulate(accu)
-         do ipar = 0, calc%numPar
+         do ipar = 0, calc%getNumParams()
             do N = 1, Na
               val = tmpCalc%getDataNs(1, N, ipar, 1)
              if (val.eq.0.0d0) cycle
@@ -163,7 +163,7 @@ module Qtrap_Clm_m
       IF (calc%Mode_S_Norm.EQ.0) THEN
       ELSE IF (calc%Mode_S_Norm.EQ.1) THEN
          Yy = (One-Sel)/(C_Norm-Sel)
-         do ipar = 0, calc%numPar
+         do ipar = 0, calc%getNumParams()
             do N = 1, Na
                val = Yy * derivs%getDataNs( irow, N, Ipar, Isox)
                if (val.eq.0.0d0) cycle
@@ -230,7 +230,7 @@ module Qtrap_Clm_m
       END IF
 
          ! update cross section (ipar=0) as well as derivatives
-         do Ipar = 0, calc%numPar
+         do Ipar = 0, calc%getNumParams()
             DO N=1,Na
                L = 0
                val = 0.0d0
@@ -308,7 +308,7 @@ module Qtrap_Clm_m
 ! ***
 
          ! update cross section (ipar=0) as well as derivatives
-         Do Ipar = 0, calc%numPar
+         Do Ipar = 0, calc%getNumParams()
            DO N=1,Na
               L = 0
               val = 0.0d0
diff --git a/sammy/src/convolution/DopplerAndResolutionBroadener.cpp b/sammy/src/convolution/DopplerAndResolutionBroadener.cpp
index 97f6119705e4ec7a01cefc25540a7b70f314398a..b972d63708767abc1e13c7ae40acd1687e0de60c 100644
--- a/sammy/src/convolution/DopplerAndResolutionBroadener.cpp
+++ b/sammy/src/convolution/DopplerAndResolutionBroadener.cpp
@@ -12,6 +12,7 @@ DopplerAndResolutionBroadener::DopplerAndResolutionBroadener(DerivativeHandler &
      numPerEner = 1;
      posUn = posBroad = 0;
      offUn = offBroad = 0;
+     numParams = 0;
      if( !(list.getLength() > 0)) throw std::runtime_error( "We need at least one energy grid in order to broaden");
      unGrid = 0;
      broadGrid = 0;
@@ -136,8 +137,24 @@ void DopplerAndResolutionBroadener::insertEnergyBroadened(int pos){
 }
 
 
-void DopplerAndResolutionBroadener::broaden(bool makebroadGrid){}
+void DopplerAndResolutionBroadener::broaden(bool makebroadGrid){
+    // reserve the data
+    int ndatb = getNumEnergyBroadened();
+    handler.nullify();
+    handler.reserve(ndatb*handler.getNnnsig(), numParams+1);
+}
 
+void DopplerAndResolutionBroadener::transferUnbroadened(int ipos, int iso){
+   int nsig = handler.getNnnsig();
+   for (int ipar = 0; ipar < numParams+1; ipar++){
+      for (int n = 0; n < nsig; n++){
+         double val = handler.getDataNs(ipos, n, ipar, iso, false);
+         if (val != 0.0){
+             handler.addDataNs(currentPos, n, ipar, iso, val);
+         }
+      }
+   }
+}
 
 int DopplerAndResolutionBroadener::getEmInUnbroadened(double em, int istart) const{
     int nener = getNumEnergyUnbroadened();
@@ -248,7 +265,7 @@ void DopplerAndResolutionBroadener::ensureWorkGridLength(int length){
     }
 }
 
-void DopplerAndResolutionBroadener::setupBroadnener(bool moreBroadening){
+void DopplerAndResolutionBroadener::setupBroadnener(bool moreBroadening, int num){
     const std::unique_ptr<GridData> & grid = gridList.getGrid(0);
     int numcro = 1;
     int ipos =  0;
@@ -271,6 +288,8 @@ void DopplerAndResolutionBroadener::setupBroadnener(bool moreBroadening){
     else{
         setBroadenedGrid(0,ipos);  // if last broadening it is on the experimental grid
     }
+
+    numParams = num;
 }
 
 void DopplerAndResolutionBroadener::setXoefWeights(int index){
diff --git a/sammy/src/convolution/DopplerAndResolutionBroadener.h b/sammy/src/convolution/DopplerAndResolutionBroadener.h
index 170fbd6849064af83fb771e5f8cc62bb105c7f81..4e5224b874466be42fc8f10cdf671ff6aac34543 100644
--- a/sammy/src/convolution/DopplerAndResolutionBroadener.h
+++ b/sammy/src/convolution/DopplerAndResolutionBroadener.h
@@ -259,8 +259,9 @@ public:
      * Set up the grid
      *
      * @param moreBroadening true if more broadening is to happen after
+     * @param the number of parameters that have derivatives
      */
-    void setupBroadnener(bool moreBroadening);
+    void setupBroadnener(bool moreBroadening, int num);
 
     /**
      * Indicate where broadenend data actually start on the
@@ -282,6 +283,23 @@ public:
      */
     int getLength() const { return length;}
 
+    /**
+     * Get the number of parameters for which derivatives exist
+     * @return the number of parameters for which derivatives exist
+     */
+    int getNumParams() const { return numParams; }
+
+    /**
+     * Transfer the unbroadened data unchanged to the broadened
+     * data array.
+     * The broadened data will be storted at position
+     * getCurrentPos() and the unbroadened data are retrieved from
+     * ipos.
+     *
+     * @param ipos the position of the unbroadened data
+     * @param iso the isotope for which to transfer the data
+     */
+    void transferUnbroadened(int ipos, int iso);
 private:
 
     void ensureWorkGridLength(int length);
@@ -302,6 +320,8 @@ private:
 
     int integralStart, integralPts;
 
+    int numParams;
+
     int currentPos;
     int length;
 };
diff --git a/sammy/src/convolution/interface/cix/DopplerAndResolutionBroadener.cpp2f.xml b/sammy/src/convolution/interface/cix/DopplerAndResolutionBroadener.cpp2f.xml
index 3fb977f258779bbe894e24fe7b3027dcc140c3e6..21fe0cd08207b16b73822cad9b86ce724a46467e 100644
--- a/sammy/src/convolution/interface/cix/DopplerAndResolutionBroadener.cpp2f.xml
+++ b/sammy/src/convolution/interface/cix/DopplerAndResolutionBroadener.cpp2f.xml
@@ -91,7 +91,9 @@
           </method>
           <method name="setupBroadnener">             
              <param name="moreBroadening" type="bool"/>
+             <param name="num" type="int"/>
           </method>
+          <method name="getNumParams" return_type="int"/>
 
           <method name="updateBroadenedOffset">
              <param name="offSet" type="int"   offset="-1"/>
@@ -103,6 +105,11 @@
             <method name="getLength" return_type="int"/>
 
          <method name="broaden"/>
+
+         <method name="transferUnbroadened">
+            <param name="ipos" type="int"  offset="-1"/>
+            <param name="iso"  type="int"  offset="-1"/>
+         </method>
     </class>
 </generate>
 
diff --git a/sammy/src/convolution/interface/cix/DopplerBroadening.cpp2f.xml b/sammy/src/convolution/interface/cix/DopplerBroadening.cpp2f.xml
index 2a565e82d6dbf336883530ba67133ca3686f8d6d..423d51c66794a94a91d00711967250be3c4a26f1 100644
--- a/sammy/src/convolution/interface/cix/DopplerBroadening.cpp2f.xml
+++ b/sammy/src/convolution/interface/cix/DopplerBroadening.cpp2f.xml
@@ -21,5 +21,7 @@
          <method name="setBrdLim">
              <param name="b" type="double"/>
          </method>
+
+         <method name="broaden"/>
     </class>
 </generate>
diff --git a/sammy/src/convolution/interface/cpp/DopplerAndResolutionBroadenerInterface.cpp b/sammy/src/convolution/interface/cpp/DopplerAndResolutionBroadenerInterface.cpp
index 708cf7c72bce00b93eecbf4252297ed00b985d20..a28322e557405473b2030db4cdebbfef7d40cf7b 100644
--- a/sammy/src/convolution/interface/cpp/DopplerAndResolutionBroadenerInterface.cpp
+++ b/sammy/src/convolution/interface/cpp/DopplerAndResolutionBroadenerInterface.cpp
@@ -2,7 +2,7 @@
 * This file has been dynamically generated by Class Interface Xml (CIX) 
 * DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION
 * If changes need to occur, modify the appropriate CIX xml file
-* Date Generated: Fri Feb 11 16:55:04 EST 2022
+* Date Generated: Tue Apr 19 09:05:33 EDT 2022
 * If any issues are experiences with this generated file that cannot be fixed
 * with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov
 */
@@ -134,9 +134,14 @@ void DopplerAndResolutionBroadener_setXoefWeights(void * DopplerAndResolutionBro
     ((DopplerAndResolutionBroadener*)DopplerAndResolutionBroadener_ptr)->setXoefWeights(*index);
 }
 
-void DopplerAndResolutionBroadener_setupBroadnener(void * DopplerAndResolutionBroadener_ptr,bool * moreBroadening)
+void DopplerAndResolutionBroadener_setupBroadnener(void * DopplerAndResolutionBroadener_ptr,bool * moreBroadening,int * num)
 {
-    ((DopplerAndResolutionBroadener*)DopplerAndResolutionBroadener_ptr)->setupBroadnener(*moreBroadening);
+    ((DopplerAndResolutionBroadener*)DopplerAndResolutionBroadener_ptr)->setupBroadnener(*moreBroadening,*num);
+}
+
+int DopplerAndResolutionBroadener_getNumParams(void * DopplerAndResolutionBroadener_ptr)
+{
+    return ((DopplerAndResolutionBroadener*)DopplerAndResolutionBroadener_ptr)->getNumParams();
 }
 
 void DopplerAndResolutionBroadener_updateBroadenedOffset(void * DopplerAndResolutionBroadener_ptr,int * offSet)
@@ -159,6 +164,11 @@ void DopplerAndResolutionBroadener_broaden(void * DopplerAndResolutionBroadener_
     ((DopplerAndResolutionBroadener*)DopplerAndResolutionBroadener_ptr)->broaden();
 }
 
+void DopplerAndResolutionBroadener_transferUnbroadened(void * DopplerAndResolutionBroadener_ptr,int * ipos,int * iso)
+{
+    ((DopplerAndResolutionBroadener*)DopplerAndResolutionBroadener_ptr)->transferUnbroadened(*ipos,*iso);
+}
+
 void DopplerAndResolutionBroadener_destroy(void * DopplerAndResolutionBroadener_ptr)
 {
     delete (DopplerAndResolutionBroadener*)DopplerAndResolutionBroadener_ptr;
diff --git a/sammy/src/convolution/interface/cpp/DopplerAndResolutionBroadenerInterface.h b/sammy/src/convolution/interface/cpp/DopplerAndResolutionBroadenerInterface.h
index e517e2cb68b1c13d066c49fc10b17ac7f9a3a917..090ad8ab3feca83171217855840ef2823ff3f867 100644
--- a/sammy/src/convolution/interface/cpp/DopplerAndResolutionBroadenerInterface.h
+++ b/sammy/src/convolution/interface/cpp/DopplerAndResolutionBroadenerInterface.h
@@ -2,7 +2,7 @@
 * This file has been dynamically generated by Class Interface Xml (CIX) 
 * DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION
 * If changes need to occur, modify the appropriate CIX xml file
-* Date Generated: Fri Feb 11 16:55:04 EST 2022
+* Date Generated: Tue Apr 19 09:05:33 EDT 2022
 * If any issues are experiences with this generated file that cannot be fixed
 * with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov
 */
@@ -39,11 +39,13 @@ void DopplerAndResolutionBroadener_nullifyWorkGrid(void * DopplerAndResolutionBr
 double DopplerAndResolutionBroadener_getWorkData(void * DopplerAndResolutionBroadener_ptr,int * index,int * row,int * col);
 void DopplerAndResolutionBroadener_setWorkData(void * DopplerAndResolutionBroadener_ptr,int * index,int * row,int * col,double * val);
 void DopplerAndResolutionBroadener_setXoefWeights(void * DopplerAndResolutionBroadener_ptr,int * index);
-void DopplerAndResolutionBroadener_setupBroadnener(void * DopplerAndResolutionBroadener_ptr,bool * moreBroadening);
+void DopplerAndResolutionBroadener_setupBroadnener(void * DopplerAndResolutionBroadener_ptr,bool * moreBroadening,int * num);
+int DopplerAndResolutionBroadener_getNumParams(void * DopplerAndResolutionBroadener_ptr);
 void DopplerAndResolutionBroadener_updateBroadenedOffset(void * DopplerAndResolutionBroadener_ptr,int * offSet);
 void DopplerAndResolutionBroadener_setLength(void * DopplerAndResolutionBroadener_ptr,int * l);
 int DopplerAndResolutionBroadener_getLength(void * DopplerAndResolutionBroadener_ptr);
 void DopplerAndResolutionBroadener_broaden(void * DopplerAndResolutionBroadener_ptr);
+void DopplerAndResolutionBroadener_transferUnbroadened(void * DopplerAndResolutionBroadener_ptr,int * ipos,int * iso);
 void DopplerAndResolutionBroadener_destroy(void * DopplerAndResolutionBroadener_ptr);
 #ifdef __cplusplus
 }
diff --git a/sammy/src/convolution/interface/cpp/DopplerBroadeningInterface.cpp b/sammy/src/convolution/interface/cpp/DopplerBroadeningInterface.cpp
index 73ca614db19add9af0ccae5ce6f737dd8f0bf50d..e7a565a951261b1d18012bfb58848b12d904809b 100644
--- a/sammy/src/convolution/interface/cpp/DopplerBroadeningInterface.cpp
+++ b/sammy/src/convolution/interface/cpp/DopplerBroadeningInterface.cpp
@@ -2,7 +2,7 @@
 * This file has been dynamically generated by Class Interface Xml (CIX) 
 * DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION
 * If changes need to occur, modify the appropriate CIX xml file
-* Date Generated: Wed Mar 23 10:56:59 EDT 2022
+* Date Generated: Tue Apr 19 10:21:53 EDT 2022
 * If any issues are experiences with this generated file that cannot be fixed
 * with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov
 */
@@ -19,9 +19,24 @@ double DopplerBroadening_getTemperature(void * DopplerBroadening_ptr)
     return ((DopplerBroadening*)DopplerBroadening_ptr)->getTemperature();
 }
 
-void DopplerBroadening_setTemperature(void * DopplerBroadening_ptr,double * n)
+void DopplerBroadening_setTemperature(void * DopplerBroadening_ptr,double * t)
 {
-    ((DopplerBroadening*)DopplerBroadening_ptr)->setTemperature(*n);
+    ((DopplerBroadening*)DopplerBroadening_ptr)->setTemperature(*t);
+}
+
+double DopplerBroadening_getBrdLim(void * DopplerBroadening_ptr)
+{
+    return ((DopplerBroadening*)DopplerBroadening_ptr)->getBrdLim();
+}
+
+void DopplerBroadening_setBrdLim(void * DopplerBroadening_ptr,double * b)
+{
+    ((DopplerBroadening*)DopplerBroadening_ptr)->setBrdLim(*b);
+}
+
+void DopplerBroadening_broaden(void * DopplerBroadening_ptr)
+{
+    ((DopplerBroadening*)DopplerBroadening_ptr)->broaden();
 }
 
 void DopplerBroadening_destroy(void * DopplerBroadening_ptr)
diff --git a/sammy/src/convolution/interface/cpp/DopplerBroadeningInterface.h b/sammy/src/convolution/interface/cpp/DopplerBroadeningInterface.h
index 96a1e1ec86551d2df259e21c15c5ed097662ee44..0008d6585ff5ba4fe85f1d8e5ed371c9e0dd39ee 100644
--- a/sammy/src/convolution/interface/cpp/DopplerBroadeningInterface.h
+++ b/sammy/src/convolution/interface/cpp/DopplerBroadeningInterface.h
@@ -2,23 +2,28 @@
 * This file has been dynamically generated by Class Interface Xml (CIX) 
 * DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION
 * If changes need to occur, modify the appropriate CIX xml file
-* Date Generated: Wed Mar 23 10:56:58 EDT 2022
+* Date Generated: Tue Apr 19 10:21:53 EDT 2022
 * If any issues are experiences with this generated file that cannot be fixed
 * with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov
 */
 #ifndef DOPPLERBROADENINGINTERFACE_H
 #define DOPPLERBROADENINGINTERFACE_H
-#include "../../DopplerAndResolutionBroadener.h"
-#include "../../DopplerBroadening.h"
 #include "salmon/DerivativeHandler.h"
 #include "salmon/GridData.h"
+#include "../../DopplerAndResolutionBroadener.h"
+#include "../../DopplerBroadening.h"
+
+
 using namespace sammy;
 #ifdef __cplusplus
 extern "C" {
 #endif
 void* DopplerBroadening_initialize(DerivativeHandler * hand,GridDataList * list,GridDataList * work );
 double DopplerBroadening_getTemperature(void * DopplerBroadening_ptr);
-void DopplerBroadening_setTemperature(void * DopplerBroadening_ptr,double * n);
+void DopplerBroadening_setTemperature(void * DopplerBroadening_ptr,double * t);
+double DopplerBroadening_getBrdLim(void * DopplerBroadening_ptr);
+void DopplerBroadening_setBrdLim(void * DopplerBroadening_ptr,double * b);
+void DopplerBroadening_broaden(void * DopplerBroadening_ptr);
 void DopplerBroadening_destroy(void * DopplerBroadening_ptr);
 #ifdef __cplusplus
 }
diff --git a/sammy/src/convolution/interface/fortran/DopplerAndResolutionBroadener_I.f90 b/sammy/src/convolution/interface/fortran/DopplerAndResolutionBroadener_I.f90
index 73cd720e76efeb07f848493d4634467a7aa091c4..a9081732abb868e90b65aeb05475d8952338b42c 100644
--- a/sammy/src/convolution/interface/fortran/DopplerAndResolutionBroadener_I.f90
+++ b/sammy/src/convolution/interface/fortran/DopplerAndResolutionBroadener_I.f90
@@ -2,7 +2,7 @@
 !! This file has been dynamically generated by Class Interface Xml (CIX) 
 !! DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION
 !! If changes need to occur, modify the appropriate CIX xml file
-!! Date Generated: Fri Feb 11 16:55:04 EST 2022
+!! Date Generated: Tue Apr 19 09:05:33 EDT 2022
 !! If any issues are experiences with this generated file that cannot be fixed
 !! with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov
 !!/
@@ -164,12 +164,18 @@ subroutine f_DopplerAndResolutionBroadener_setXoefWeights(DopplerAndResolutionBr
     type(C_PTR), value :: DopplerAndResolutionBroadener_ptr;
     integer(C_INT) :: index;
 end subroutine
-subroutine f_DopplerAndResolutionBroadener_setupBroadnener(DopplerAndResolutionBroadener_ptr, moreBroadening ) BIND(C,name="DopplerAndResolutionBroadener_setupBroadnener")
+subroutine f_DopplerAndResolutionBroadener_setupBroadnener(DopplerAndResolutionBroadener_ptr, moreBroadening,num ) BIND(C,name="DopplerAndResolutionBroadener_setupBroadnener")
     use,intrinsic :: ISO_C_BINDING
     implicit none
-    type(C_PTR), value :: DopplerAndResolutionBroadener_ptr;   
+    type(C_PTR), value :: DopplerAndResolutionBroadener_ptr;
     logical(C_BOOL) :: moreBroadening;
+    integer(C_INT) :: num;
 end subroutine
+integer(C_INT) function f_DopplerAndResolutionBroadener_getNumParams(DopplerAndResolutionBroadener_ptr ) BIND(C,name="DopplerAndResolutionBroadener_getNumParams")
+    use,intrinsic :: ISO_C_BINDING
+    implicit none
+    type(C_PTR), value :: DopplerAndResolutionBroadener_ptr;
+end function
 subroutine f_DopplerAndResolutionBroadener_updateBroadenedOffset(DopplerAndResolutionBroadener_ptr, offSet ) BIND(C,name="DopplerAndResolutionBroadener_updateBroadenedOffset")
     use,intrinsic :: ISO_C_BINDING
     implicit none
@@ -192,6 +198,13 @@ subroutine f_DopplerAndResolutionBroadener_broaden(DopplerAndResolutionBroadener
     implicit none
     type(C_PTR), value :: DopplerAndResolutionBroadener_ptr;
 end subroutine
+subroutine f_DopplerAndResolutionBroadener_transferUnbroadened(DopplerAndResolutionBroadener_ptr, ipos,iso ) BIND(C,name="DopplerAndResolutionBroadener_transferUnbroadened")
+    use,intrinsic :: ISO_C_BINDING
+    implicit none
+    type(C_PTR), value :: DopplerAndResolutionBroadener_ptr;
+    integer(C_INT) :: ipos;
+    integer(C_INT) :: iso;
+end subroutine
 subroutine f_DopplerAndResolutionBroadener_destroy(this) BIND(C,name="DopplerAndResolutionBroadener_destroy")
     use,intrinsic :: ISO_C_BINDING
     implicit none
diff --git a/sammy/src/convolution/interface/fortran/DopplerAndResolutionBroadener_M.f90 b/sammy/src/convolution/interface/fortran/DopplerAndResolutionBroadener_M.f90
index 7d25af375ca16a8cd27e4eb5dd09025e9fab066b..9f64dc27ba717c23f87a2392de1754f4db64b2c6 100644
--- a/sammy/src/convolution/interface/fortran/DopplerAndResolutionBroadener_M.f90
+++ b/sammy/src/convolution/interface/fortran/DopplerAndResolutionBroadener_M.f90
@@ -2,7 +2,7 @@
 !! This file has been dynamically generated by Class Interface Xml (CIX) 
 !! DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION
 !! If changes need to occur, modify the appropriate CIX xml file
-!! Date Generated: Fri Feb 11 16:55:04 EST 2022
+!! Date Generated: Tue Apr 19 09:05:33 EDT 2022
 !! If any issues are experiences with this generated file that cannot be fixed
 !! with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov
 !!/
@@ -14,7 +14,7 @@ use GridData_M
 type DopplerAndResolutionBroadener
     type(C_PTR) :: instance_ptr=C_NULL_PTR
     contains
-    procedure, pass(this) :: initialize => DopplerAndResolutionBroadener_initialize    
+    procedure, pass(this) :: initialize => DopplerAndResolutionBroadener_initialize
     procedure, pass(this) :: getNumPerEnergy => DopplerAndResolutionBroadener_getNumPerEnergy
     procedure, pass(this) :: setNumPerEnergy => DopplerAndResolutionBroadener_setNumPerEnergy
     procedure, pass(this) :: getIntegralStart => DopplerAndResolutionBroadener_getIntegralStart
@@ -40,10 +40,12 @@ type DopplerAndResolutionBroadener
     procedure, pass(this) :: setWorkData => DopplerAndResolutionBroadener_setWorkData
     procedure, pass(this) :: setXoefWeights => DopplerAndResolutionBroadener_setXoefWeights
     procedure, pass(this) :: setupBroadnener => DopplerAndResolutionBroadener_setupBroadnener
+    procedure, pass(this) :: getNumParams => DopplerAndResolutionBroadener_getNumParams
     procedure, pass(this) :: updateBroadenedOffset => DopplerAndResolutionBroadener_updateBroadenedOffset
     procedure, pass(this) :: setLength => DopplerAndResolutionBroadener_setLength
     procedure, pass(this) :: getLength => DopplerAndResolutionBroadener_getLength
     procedure, pass(this) :: broaden => DopplerAndResolutionBroadener_broaden
+    procedure, pass(this) :: transferUnbroadened => DopplerAndResolutionBroadener_transferUnbroadened
     procedure, pass(this) :: destroy => DopplerAndResolutionBroadener_destroy
 end type DopplerAndResolutionBroadener
 contains
@@ -219,12 +221,19 @@ subroutine DopplerAndResolutionBroadener_setXoefWeights(this, index)
     integer(C_INT)::index
     call f_DopplerAndResolutionBroadener_setXoefWeights(this%instance_ptr, index-1)
 end subroutine
-subroutine DopplerAndResolutionBroadener_setupBroadnener(this, moreBroadening)
+subroutine DopplerAndResolutionBroadener_setupBroadnener(this, moreBroadening, num)
     implicit none
     class(DopplerAndResolutionBroadener)::this
     logical(C_BOOL)::moreBroadening
-    call f_DopplerAndResolutionBroadener_setupBroadnener(this%instance_ptr, moreBroadening)
+    integer(C_INT)::num
+    call f_DopplerAndResolutionBroadener_setupBroadnener(this%instance_ptr, moreBroadening,num)
 end subroutine
+function DopplerAndResolutionBroadener_getNumParams(this) result(result2Return)
+    implicit none
+    class(DopplerAndResolutionBroadener)::this
+    integer(C_INT):: result2Return
+    result2Return=f_DopplerAndResolutionBroadener_getNumParams(this%instance_ptr)
+end function
 subroutine DopplerAndResolutionBroadener_updateBroadenedOffset(this, offSet)
     implicit none
     class(DopplerAndResolutionBroadener)::this
@@ -248,6 +257,13 @@ subroutine DopplerAndResolutionBroadener_broaden(this)
     class(DopplerAndResolutionBroadener)::this
     call f_DopplerAndResolutionBroadener_broaden(this%instance_ptr)
 end subroutine
+subroutine DopplerAndResolutionBroadener_transferUnbroadened(this, ipos, iso)
+    implicit none
+    class(DopplerAndResolutionBroadener)::this
+    integer(C_INT)::ipos
+    integer(C_INT)::iso
+    call f_DopplerAndResolutionBroadener_transferUnbroadened(this%instance_ptr, ipos-1,iso-1)
+end subroutine
 subroutine DopplerAndResolutionBroadener_destroy(this)
     implicit none
     class(DopplerAndResolutionBroadener) :: this
diff --git a/sammy/src/convolution/interface/fortran/DopplerBroadening_I.f90 b/sammy/src/convolution/interface/fortran/DopplerBroadening_I.f90
index e0a34c2262c575933383c81d8a3b166a7c2d8bda..1860946f0e3a4473e38e32dffeca2df623bae2f9 100644
--- a/sammy/src/convolution/interface/fortran/DopplerBroadening_I.f90
+++ b/sammy/src/convolution/interface/fortran/DopplerBroadening_I.f90
@@ -2,7 +2,7 @@
 !! This file has been dynamically generated by Class Interface Xml (CIX) 
 !! DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION
 !! If changes need to occur, modify the appropriate CIX xml file
-!! Date Generated: Wed Mar 23 10:56:59 EDT 2022
+!! Date Generated: Tue Apr 19 10:21:53 EDT 2022
 !! If any issues are experiences with this generated file that cannot be fixed
 !! with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov
 !!/
@@ -22,11 +22,27 @@ real(C_DOUBLE) function f_DopplerBroadening_getTemperature(DopplerBroadening_ptr
     implicit none
     type(C_PTR), value :: DopplerBroadening_ptr;
 end function
-subroutine f_DopplerBroadening_setTemperature(DopplerBroadening_ptr, n ) BIND(C,name="DopplerBroadening_setTemperature")
+subroutine f_DopplerBroadening_setTemperature(DopplerBroadening_ptr, t ) BIND(C,name="DopplerBroadening_setTemperature")
+    use,intrinsic :: ISO_C_BINDING
+    implicit none
+    type(C_PTR), value :: DopplerBroadening_ptr;
+    real(C_DOUBLE) :: t;
+end subroutine
+real(C_DOUBLE) function f_DopplerBroadening_getBrdLim(DopplerBroadening_ptr ) BIND(C,name="DopplerBroadening_getBrdLim")
+    use,intrinsic :: ISO_C_BINDING
+    implicit none
+    type(C_PTR), value :: DopplerBroadening_ptr;
+end function
+subroutine f_DopplerBroadening_setBrdLim(DopplerBroadening_ptr, b ) BIND(C,name="DopplerBroadening_setBrdLim")
+    use,intrinsic :: ISO_C_BINDING
+    implicit none
+    type(C_PTR), value :: DopplerBroadening_ptr;
+    real(C_DOUBLE) :: b;
+end subroutine
+subroutine f_DopplerBroadening_broaden(DopplerBroadening_ptr ) BIND(C,name="DopplerBroadening_broaden")
     use,intrinsic :: ISO_C_BINDING
     implicit none
     type(C_PTR), value :: DopplerBroadening_ptr;
-    real(C_DOUBLE) :: n;
 end subroutine
 subroutine f_DopplerBroadening_destroy(this) BIND(C,name="DopplerBroadening_destroy")
     use,intrinsic :: ISO_C_BINDING
diff --git a/sammy/src/convolution/interface/fortran/DopplerBroadening_M.f90 b/sammy/src/convolution/interface/fortran/DopplerBroadening_M.f90
index 4d6a9e24b8153007e86861edc6c23455620291e9..669e667ae770b759c5927e4af9db4ddc72967473 100644
--- a/sammy/src/convolution/interface/fortran/DopplerBroadening_M.f90
+++ b/sammy/src/convolution/interface/fortran/DopplerBroadening_M.f90
@@ -2,7 +2,7 @@
 !! This file has been dynamically generated by Class Interface Xml (CIX) 
 !! DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION
 !! If changes need to occur, modify the appropriate CIX xml file
-!! Date Generated: Wed Mar 23 10:56:59 EDT 2022
+!! Date Generated: Tue Apr 19 10:21:53 EDT 2022
 !! If any issues are experiences with this generated file that cannot be fixed
 !! with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov
 !!/
@@ -17,6 +17,9 @@ type , extends(DopplerAndResolutionBroadener) :: DopplerBroadening
     procedure, pass(this) :: initialize => DopplerBroadening_initialize
     procedure, pass(this) :: getTemperature => DopplerBroadening_getTemperature
     procedure, pass(this) :: setTemperature => DopplerBroadening_setTemperature
+    procedure, pass(this) :: getBrdLim => DopplerBroadening_getBrdLim
+    procedure, pass(this) :: setBrdLim => DopplerBroadening_setBrdLim
+    procedure, pass(this) :: broaden => DopplerBroadening_broaden
     procedure, pass(this) :: destroy => DopplerBroadening_destroy
 end type DopplerBroadening
 contains
@@ -34,11 +37,28 @@ function DopplerBroadening_getTemperature(this) result(result2Return)
     real(C_DOUBLE):: result2Return
     result2Return=f_DopplerBroadening_getTemperature(this%instance_ptr)
 end function
-subroutine DopplerBroadening_setTemperature(this, n)
+subroutine DopplerBroadening_setTemperature(this, t)
     implicit none
     class(DopplerBroadening)::this
-    real(C_DOUBLE)::n
-    call f_DopplerBroadening_setTemperature(this%instance_ptr, n)
+    real(C_DOUBLE)::t
+    call f_DopplerBroadening_setTemperature(this%instance_ptr, t)
+end subroutine
+function DopplerBroadening_getBrdLim(this) result(result2Return)
+    implicit none
+    class(DopplerBroadening)::this
+    real(C_DOUBLE):: result2Return
+    result2Return=f_DopplerBroadening_getBrdLim(this%instance_ptr)
+end function
+subroutine DopplerBroadening_setBrdLim(this, b)
+    implicit none
+    class(DopplerBroadening)::this
+    real(C_DOUBLE)::b
+    call f_DopplerBroadening_setBrdLim(this%instance_ptr, b)
+end subroutine
+subroutine DopplerBroadening_broaden(this)
+    implicit none
+    class(DopplerBroadening)::this
+    call f_DopplerBroadening_broaden(this%instance_ptr)
 end subroutine
 subroutine DopplerBroadening_destroy(this)
     implicit none
diff --git a/sammy/src/cro/mcro5.f90 b/sammy/src/cro/mcro5.f90
index 5528f5f4715f0078bd02b2a135c8d2a2d8baee1e..be30a79d65b408bb8530e2dcbe41b5914655b2ed 100644
--- a/sammy/src/cro/mcro5.f90
+++ b/sammy/src/cro/mcro5.f90
@@ -243,11 +243,10 @@ end module sumAndConvertAfterBroadening_m
          ! switch handler data grid
          call Set_Kws
 
-         dopplerOption%broadener%numPar = numUsedPar
          dopplerOption%broadener%debugOutput = .false.
          if (Kdebug.ne.0) dopplerOption%broadener%debugOutput = .true.
 
-         call dopplerOption%broadener%setupBroadnener(moreBroadening)
+         call dopplerOption%broadener%setupBroadnener(moreBroadening, numUsedPar)
          if (Kcros.EQ.8) THEN
            call dopplerOption%broadener%addSelfData(Ksindi.le.0.and.Ksitmp.GT.0, Lllmax+1)
          END IF
@@ -399,7 +398,7 @@ end module sumAndConvertAfterBroadening_m
 
             ! switch handler data grid
             call Set_Kws
-            call resolutionOption%resBroad1%setupBroadnener(moreBroadening)
+            call resolutionOption%resBroad1%setupBroadnener(moreBroadening, numUsedPar)
 
             if (Nudwhi.ne.0) then
                call samudr_0
@@ -421,7 +420,7 @@ end module sumAndConvertAfterBroadening_m
 
             ! switch handler data grid
             call Set_Kws
-            call resolutionOption%resBroad1%setupBroadnener(moreBroadening)
+            call resolutionOption%resBroad1%setupBroadnener(moreBroadening, numUsedPar)
 
             if (Kkkdex.ne.0) then
                 call samdex_0
@@ -447,7 +446,7 @@ end module sumAndConvertAfterBroadening_m
 
              ! switch handler data grid
              call Set_Kws
-             call resolutionOption%resBroad2%setupBroadnener(moreBroadening)
+             call resolutionOption%resBroad2%setupBroadnener(moreBroadening, numUsedPar)
 
 
             if (Nudwhi.ne.0) then
diff --git a/sammy/src/dbd/HighEnergyFreeGas_m.f90 b/sammy/src/dbd/HighEnergyFreeGas_m.f90
index f4fc9a233272204c116578210dc5d5efbe1e85ab..e4c7674e0b72d14701fcfd4ecb404073408326b8 100644
--- a/sammy/src/dbd/HighEnergyFreeGas_m.f90
+++ b/sammy/src/dbd/HighEnergyFreeGas_m.f90
@@ -37,15 +37,7 @@ end subroutine
 subroutine HighEnergyFreeGas_broaden(this)
    class(HighEnergyFreeGas) :: this
 
-   integer::ndatb
-   type(DerivativeHandler)::data
-
-   ! reserve the data
-   ndatb =  this%getNumEnergyBroadened()
-   call this%getData(data)
-   call data%nullify()
-   call data%reserve(ndatb*data%getNnnsig(), this%numPar+1)
-
+   call FreeGasDopplerBroadening_broaden(this)
    call this%setXoefWeights(2)
    call this%nullifyWorkGrid(1)
 end subroutine
diff --git a/sammy/src/dbd/mdbd1.f90 b/sammy/src/dbd/mdbd1.f90
index f0ddb197d543b70038b6e9b02fc704b708b2cb3f..4673199dc2086513f3730c91be74dc3a0b004673 100644
--- a/sammy/src/dbd/mdbd1.f90
+++ b/sammy/src/dbd/mdbd1.f90
@@ -43,7 +43,7 @@ contains
 !
       call calc%getdata(calcData)
       call calcData%nullify()
-      call calcData%reserve(nauxMax*calcData%getNnnsig(),calc%numPar+1)
+      call calcData%reserve(nauxMax*calcData%getNnnsig(),calc%getNumParams()+1)
       Now = 0
 
 !
@@ -106,7 +106,7 @@ contains
             IF ((Nolowb.NE.0 .AND. calc%Elowbr.GT.Em) .OR. Ipnts.le.5) THEN
 ! *********    IF (don't want low-E brdng, or) too few points, do not broaden              
                Now = Now + 1               
-               do ipar = 0, calc%numPar
+               do ipar = 0, calc%getNumParams()
                   DO N=1, calcData%getNnnsig()
                      val = calcData%getDataNsOld(iposVel, N, Ipar, Isox)
                      if ( Kvtemp.gt.0.and.Kvtemp.eq.ipar) cycle
@@ -183,7 +183,7 @@ contains
 !
       Del = 0.02d0
       Derdop = 0d0
-      IF (calc%numPar.gt.0 .AND. Kvtemp.GT.0) THEN
+      IF (calc%getNumParams().gt.0 .AND. Kvtemp.GT.0) THEN
          W = Wdop*(One+Del)
          CALL Fundop (calc, W, EM, Sigpls, Isox)
          W = Wdop*(One-Del)
@@ -202,7 +202,7 @@ contains
 !
       DO N=1,calcData%getNnnsig()
          ! update cross section (ipar=0) as well as derivatives
-         Do Ipar = 0, calc%numPar
+         Do Ipar = 0, calc%getNumParams()
             val = 0.0
             DO I=1,Ipnts
                 Wts = calc%getWorkData(1, 1, I)
@@ -219,7 +219,7 @@ contains
       END DO
 !
       IF (.not.calc%debugOutput.OR. Kvtemp.LE.0) RETURN
-      IF (calc%numPar.EQ.0) RETURN
+      IF (calc%getNumParams().EQ.0) RETURN
 !
 ! *** here for debug info only
       Sigt = calcData%getDataNs(irow, 1, 0, Iso)
diff --git a/sammy/src/dop/LealHwangBroadening_M.f90 b/sammy/src/dop/LealHwangBroadening_M.f90
index 4e6caf0f452d90a8bcf83ca76690b900a86ceb7b..d198ce727f0e39bc7471c0f508b4e8ed5be88598 100644
--- a/sammy/src/dop/LealHwangBroadening_M.f90
+++ b/sammy/src/dop/LealHwangBroadening_M.f90
@@ -43,15 +43,7 @@ end subroutine
 subroutine LealHwangBroadening_broaden(this)
    class(LealHwangBroadening) :: this
 
-   integer::ndatb
-   type(DerivativeHandler)::data
-
-   ! reserve the data
-   ndatb =  this%getNumEnergyBroadened()
-   call this%getData(data)
-   call data%nullify()
-   call data%reserve(ndatb*data%getNnnsig(), this%numPar+1)
-
+   call FreeGasDopplerBroadening_broaden(this)
    call this%coefGrid%nullify()
 end subroutine
 
diff --git a/sammy/src/dop/mdop1.f90 b/sammy/src/dop/mdop1.f90
index 1f24a4717af6a474ca847786afa42ccb295d3664..dfa925814446b17955dfcfdb33ae4edf739a70a9 100644
--- a/sammy/src/dop/mdop1.f90
+++ b/sammy/src/dop/mdop1.f90
@@ -62,9 +62,9 @@ module dop1_m
          DO I=1,Imax
             Mmm = Mmm + 1
 !
-            call derivs%reserveColumnsNs(Kkkkkk+1, derivs%getNnnsig(),calc%numPar+1)
+            call derivs%reserveColumnsNs(Kkkkkk+1, derivs%getNnnsig(),calc%getNumParams()+1)
             IF (calc%hasSelf) THEN
-               call calc%dataSelf%reserveColumnsNs(Kkkkkk+1, calc%dataSelf%getNnnsig(),calc%numPar+1)
+               call calc%dataSelf%reserveColumnsNs(Kkkkkk+1, calc%dataSelf%getNnnsig(),calc%getNumParams()+1)
             END IF
 !
             Ii = I
@@ -95,7 +95,7 @@ module dop1_m
             Imax = I
   196    CONTINUE
 !
-         IF (calc%numPar.gt.0 .AND. Kvtemp.GT.0) THEN
+         IF (calc%getNumParams().gt.0 .AND. Kvtemp.GT.0) THEN
 ! ***       generate derivatives wrt temperature
             CALL Temp_Deriv ( calc, Imax)
          END IF
@@ -144,7 +144,7 @@ module dop1_m
          if (ee.ge.0.0d0) exit
          DO Iso=1,derivs%getUsedIsotopes()
             ! set negative cross section to positive
-            DO Ipar=0,calc%numPar
+            DO Ipar=0,calc%getNumParams()
                do  N=1, derivs%getNnnsig()
                  val = derivs%getDataNsOld(Jj, N, Ipar, iso)
                   if (val.ne.0.0d0) then
@@ -182,7 +182,7 @@ module dop1_m
       call calc%getData(derivs)
       DO N=1,derivs%getNnnsig()
          ! update cross section (ipar=0) as well as derivatives
-         DO Ipar=0,calc%numPar
+         DO Ipar=0,calc%getNumParams()
            val = derivs%getDataNsOld(Mm, n, Ipar, Isox)*Cc
            val = val + derivs%getDataNs(irow, N, Ipar, Isox)
            if (val.eq.0.0d0) cycle
@@ -194,7 +194,7 @@ module dop1_m
           ! update cross section (ipar=0) as well as derivatives
           DO N=1,calc%dataSelf%getNnnsig()
              ! update cross section (ipar=0) as well as derivatives
-             DO Ipar=0,calc%numPar
+             DO Ipar=0,calc%getNumParams()
                val = calc%dataSelf%getDataNsOld(Mm, n, Ipar, Isox)*Cc
                val = val +calc%dataSelf%getDataNs(irow, N, Ipar, Isox)
                if (val.eq.0.0d0) cycle
@@ -274,7 +274,7 @@ module dop1_m
 
       call calc%getData(derivs)
       DO N=1,derivs%getNnnsig()
-         do ipar = 0, calc%numPar
+         do ipar = 0, calc%getNumParams()
            val = derivs%getDataNs(irow, N, Ipar, isox)
            if( val.eq.0.0d0) cycle
            val = val/Ebm
@@ -284,7 +284,7 @@ module dop1_m
 !
       IF (calc%hasSelf) THEN
          DO N=1,calc%dataSelf%getNnnsig()
-            do ipar = 0, calc%numPar
+            do ipar = 0, calc%getNumParams()
               val = calc%dataSelf%getDataNs(irow, N, Ipar, isox)
               if( val.eq.0.0d0) cycle
               val = val/Ebm
diff --git a/sammy/src/fgm/FreeGasDopplerBroadening_M.f90 b/sammy/src/fgm/FreeGasDopplerBroadening_M.f90
index 7c17b2327766b2db0105932e5c9ef3c755d41568..fc193a8ebc83d0dc5e594edef61a09ae2c008cf4 100644
--- a/sammy/src/fgm/FreeGasDopplerBroadening_M.f90
+++ b/sammy/src/fgm/FreeGasDopplerBroadening_M.f90
@@ -9,7 +9,6 @@ implicit none
 type, extends(DopplerBroadening) :: FreeGasDopplerBroadening
 real(kind=8),allocatable,dimension(:)::velocity
 real(kind=8),allocatable,dimension(:,:)::rowData
-integer::numPar
 logical::debugOutput
 type(DerivativeHandler)::dataSelf
 real(kind=8)::Sitemp
@@ -24,7 +23,7 @@ procedure, pass(this) :: initialize => FreeGasDopplerBroadening_initialize
 procedure, pass(this) :: broaden => FreeGasDopplerBroadening_broaden
 procedure, pass(this) :: addSelfData => FreeGasDopplerBroadening_addSelfData
 procedure, pass(this) :: transferUnbroadenedAll => FreeGasDopplerBroadening_transferUnbroadenedAll
-procedure, pass(this) :: transferUnbroadened => FreeGasDopplerBroadening_transferUnbroadened
+procedure, pass(this) :: transferUnbroadenedBroad => FreeGasDopplerBroadening_transferUnbroadened
 procedure, pass(this) :: copyRowData => FreeGasDopplerBroadening_copyRowData
 procedure, pass(this) :: destroy => FreeGasDopplerBroadening_destroy
 end type FreeGasDopplerBroadening
@@ -39,7 +38,6 @@ subroutine FreeGasDopplerBroadening_initialize(this, hand, list, work)
     call DopplerBroadening_initialize(this, hand, list, work)
     this%debugOutput = .false.
     this%Elowbr = 0.0d0
-    this%numPar = 0
     this%Sitemp = 0.0d0
 end subroutine
 
@@ -68,7 +66,7 @@ subroutine  FreeGasDopplerBroadening_addSelfData(this, copyData, ipos)
     ! Note this is after the switch, ergo operate on old data
     DO Iso=1,this%dataSelf%getUsedIsotopes()
        do jdat = 1, this%getNumEnergyUnbroadened()
-          DO Ii=0,this%numPar
+          DO Ii=0,this%getNumParams()
              val = data%getDataNsOld(Jdat, ipos, Ii, Iso)
              if (val.ne.0.0d0) then
                  call this%dataSelf%addDataNsOld(Jdat, 1, Ii, Iso, val)
@@ -91,7 +89,7 @@ subroutine FreeGasDopplerBroadening_transferUnbroadened(this, data, ipos, iso, i
    real(kind=8)::val
 
    inew = this%getCurrentPos()
-   do ipar = 0, this%numPar
+   do ipar = 0, this%getNumParams()
      if (ipar.gt.0.and.iflag.eq.ipar) cycle
      do n = 1, data%getNnnsig()
          val = data%getDataNsOld(ipos, N, ipar, iso)
@@ -107,9 +105,9 @@ subroutine FreeGasDopplerBroadening_transferUnbroadenedAll(this, ipos, iso, ifla
    type(DerivativeHandler)::data
 
    call this%getData(data)
-   call this%transferUnbroadened(data, ipos, iso, iflag)
+   call FreeGasDopplerBroadening_transferUnbroadened(this, data, ipos, iso, iflag)
    if (this%hasSelf) then
-      call this%transferUnbroadened(this%dataSelf, ipos, iso, iflagSelf)
+      call FreeGasDopplerBroadening_transferUnbroadened(this, this%dataSelf, ipos, iso, iflagSelf)
    end if
 end subroutine
 
@@ -121,6 +119,9 @@ subroutine FreeGasDopplerBroadening_broaden(this)
    real(kind=8)::ener
    type(DerivativeHandler)::data
 
+   call DopplerBroadening_broaden(this)
+
+
    ndatb = this%getNumEnergyUnbroadened()
    call allocate_real_data(this%velocity, 2*ndatb)
 
@@ -137,26 +138,26 @@ subroutine FreeGasDopplerBroadening_broaden(this)
        end if
    end do
 
-   ! reserve the data
-   ndatb =  this%getNumEnergyBroadened()
-   call this%getData(data)
-   call data%nullify()
-   call data%reserve(ndatb*data%getNnnsig(), this%numPar+1)
+   ! reserve the data for self indication experiments
+   ndatb = this%getNumEnergyBroadened()
    if( this%hasSelf) then
       call this%dataSelf%nullify()
-      call this%dataSelf%reserve(ndatb*this%dataSelf%getNnnsig(), this%numPar+1)
+      call this%dataSelf%reserve(ndatb*this%dataSelf%getNnnsig(), this%getNumParams()+1)
    end if
 
+   call this%getData(data)
+
+
    if (allocated(this%rowData)) then
      current1 = size(this%rowData,dim=1)
      current2 = size(this%rowData,dim=2)
      if (current1.lt.data%getNnnsig().or.   &
-         current2.lt.this%numPar+ 1) then
+         current2.lt.this%getNumParams()+ 1) then
         deallocate(this%rowData)
      end if
    end if
-   if( .not.allocated(this%rowData)) then
-      allocate(this%rowData(data%getNnnsig(), 0:this%numPar))
+   if( .not.allocated(this%rowData)) then      
+      allocate(this%rowData(data%getNnnsig(), 0:this%getNumParams()))
    end if
 end subroutine
 
@@ -169,7 +170,7 @@ subroutine FreeGasDopplerBroadening_copyRowData(this, data, iso)
    real(kind=8)::val
 
    inew = this%getCurrentPos()
-   do ipar = 0, this%numPar
+   do ipar = 0, this%getNumParams()
      do n = 1, data%getNnnsig()
          val = this%rowData(N, ipar)
          if (val.eq.0.0d0) cycle
diff --git a/sammy/src/fgm/mfgm1.f90 b/sammy/src/fgm/mfgm1.f90
index b9d18037cf8815f07b1d74e3e140628e65d206f1..8b56b51ba88bccb828c47caea3bd64bd91810e5d 100644
--- a/sammy/src/fgm/mfgm1.f90
+++ b/sammy/src/fgm/mfgm1.f90
@@ -111,7 +111,6 @@ contains
 10001       FORMAT ('     *** on data point number', I10)
 !
             Em = broadener%getEnergyBroadened(Jdat)   ! desired energy
-            iposVel = broadener%getEmInUnbroadened(Em, iposVel)  ! find position (iposVel) in un-broadened grid and get the velocity
 
 
             ! convert Em to velocity
@@ -126,6 +125,7 @@ contains
             IF (Em.LT.Emins) THEN
 !                            These points are the very low-energy limit,
 !                                  of very little interest, ergo copy as is
+               iposVel = broadener%getEmInUnbroadened(Em, iposVel)  ! find position (iposVel) in un-broadened grid and get the velocity
                IF (broadener%getEnergyUnbroadened(iposVel+1).GE.Emin) THEN
                   Now = Now + 1
                   call broadener%transferUnbroadenedAll(iposVel, iiso, Kvtemp, IflmscKsitmp)                  
@@ -139,6 +139,7 @@ contains
 !                            These points are the very high-energy limit,
 !                                  of very little interest, ergo copy as is
                ee = 0.0
+               iposVel = broadener%getEmInUnbroadened(Em, iposVel)  ! find position (iposVel) in un-broadened grid and get the velocity
                if (iposVel.gt.1) ee = broadener%getEnergyUnbroadened(iposVel-1)
                IF (ee.LE.Emax) THEN
                   Now = Now + 1
@@ -179,7 +180,8 @@ contains
             ELSE
 !      ***     IF too few points, do not broaden               
                Now = Now + 1
-               call broadener%transferUnbroadened(calcData, iposVel, iiso, Kvtemp)
+               iposVel = broadener%getEmInUnbroadened(Em, iposVel)  ! find position (iposVel) in un-broadened grid and get the velocity
+               call broadener%transferUnbroadenedBroad(calcData, iposVel, iiso, Kvtemp)
             END IF
 !
             Ddox = Ddo
@@ -209,8 +211,9 @@ contains
                      Sitemp, Iffy, Iflmsc(Ksitmp), iiso, Ngtvx,                    &
                      Kkkkkk+1)
                   call broadener%copyRowData(broadener%dataSelf, iso)
-               ELSE                  
-                  call broadener%transferUnbroadened(broadener%dataSelf, iposVel, iiso, IflmscKsitmp)
+               ELSE
+                  iposVel = broadener%getEmInUnbroadened(Em, iposVel)  ! find position (iposVel) in un-broadened grid and get the velocity
+                  call broadener%transferUnbroadenedBroad(broadener%dataSelf, iposVel, iiso, IflmscKsitmp)
                END IF
             END IF
 
diff --git a/sammy/src/fgm/mfgm4.f90 b/sammy/src/fgm/mfgm4.f90
index c1a3f3ff89c11c3348ddd7269b111f1ce62b02e7..dcc552064f1e24be61b0dea5151aec627dea0af8 100644
--- a/sammy/src/fgm/mfgm4.f90
+++ b/sammy/src/fgm/mfgm4.f90
@@ -39,7 +39,7 @@ module mfgm4_m
       Iso = Isox
 !
       Del = 0.02D0
-      IF (calc%numPar.gt.0.AND. Ktempx.GT.0 .AND. Em.NE.Zero) THEN
+      IF (calc%getNumParams().gt.0.AND. Ktempx.GT.0 .AND. Em.NE.Zero) THEN
          W = Ddo*(One+Del)
          CALL Funfgm (calc, W, Vv, Velcty, Wts, Sigpls, Isox, derivs)
          W = Ddo*(One-Del)
@@ -64,7 +64,7 @@ module mfgm4_m
 !
 
 
-         DO Ipar=0,calc%numPar
+         DO Ipar=0,calc%getNumParams()
             DO N=1,derivs%getNnnsig()
                val = 0.0d0
                DO I=1,calc%Ipnts
@@ -121,7 +121,7 @@ module mfgm4_m
       END IF
 !
          Do N=1, derivs%getNnnsig()
-            do  Ipar = 0, calc%numPar
+            do  Ipar = 0, calc%getNumParams()
                val = calc%rowData(N, Ipar)
                if(val.eq.0.0d0) cycle
                if (EM.LT.ZERO) then
@@ -137,7 +137,7 @@ module mfgm4_m
 !
 !
 !
-      IF (Ktempx.LE.0 .OR. calc%numPar.le.0) THEN
+      IF (Ktempx.LE.0 .OR. calc%getNumParams().le.0) THEN
          GO TO 200
       ELSE
          K = Ktempx
diff --git a/sammy/src/orr/morr0.f90 b/sammy/src/orr/morr0.f90
index bdd2b742cd4d2ba1b07c767216f91d8a6bd94650..cc7fe6fc3f7fa03fa04a3c37d64c2683768573d1 100644
--- a/sammy/src/orr/morr0.f90
+++ b/sammy/src/orr/morr0.f90
@@ -7,7 +7,7 @@ module orr_m
 !
 ! *** Purpose -- ORR resolution function calculation
 !
-      use fixedi_m, only : Numorr
+      use fixedi_m, only : Numorr, numUsedPar
       use fixedr_m, only : Dist
       use EndfData_common_m, only : expData
       use DopplerAndResolutionBroadener_M
@@ -42,7 +42,7 @@ module orr_m
       call work%initialize()
       call broadener%initialize(calcData, expData, work)
       moreBroadening = .false.
-      call broadener%setupBroadnener(moreBroadening) ! always finish on  experinental grid
+      call broadener%setupBroadnener(moreBroadening, numUsedPar) ! always finish on  experinental grid
 !
       CALL Initix
       nauxMax = getNumAuxGridPoints()
diff --git a/sammy/src/orr/morr1.f90 b/sammy/src/orr/morr1.f90
index 1f03aa6102690df15b9109198eba7fca141953d3..516a3680b86383e82428c176126cddb4134530b0 100644
--- a/sammy/src/orr/morr1.f90
+++ b/sammy/src/orr/morr1.f90
@@ -43,8 +43,6 @@ module orr1_m
       call allocate_real_data(Sigmns, Numorr)
       call allocate_real_data(Sigpls, Numorr)
 !
-      call derivs%nullify()
-      call derivs%reserve(nexp*derivs%getNnnsig(), numUsedPar+1)
 !
 ! *** initialize limits
       Kc = 2
diff --git a/sammy/src/ort/mort.f b/sammy/src/ort/mort.f
index 0013745f561aadabac8add53397b8ef2c5763231..ae1f9b4cc25bb6d1b648e9242faaa9dad643799e 100644
--- a/sammy/src/ort/mort.f
+++ b/sammy/src/ort/mort.f
@@ -35,7 +35,7 @@ C
 C
       use over_common_m, only : Kount, Nsize
       use oops_common_m, only : Jmsize, Kmsize, Kount_Initial, Msize
-      use fixedi_m, only : Iu32, Kwatta, Nmdets, Numorr
+      use fixedi_m, only : Iu32, Kwatta, Nmdets, Numorr, numUsedPar
       use fixedr_m, only : Dist
       use oopsch_common_m, only : Segmen
       use namfil_common_m, only : Dblank, Dignor, Dignor, Fblank,
@@ -142,7 +142,7 @@ C
       call work%initialize()
       call broadener%initialize(calcData, expData, work)
       moreBroadening = .false.
-      call broadener%setupBroadnener(moreBroadening)
+      call broadener%setupBroadnener(moreBroadening, numUsedPar)
 
       CALL Orresb (broadener, A_Iweigh, A_Iwts, Dist)
       CALL Showwe (A_It , A_Iwts, Dt, Ipnts)