diff --git a/src/include/Configuration.h b/src/include/Configuration.h
index 88a4198364ddeb751b82d55ebdccfa9078d94ea9..0e1113ac7be97b6287af6ed3a7455de7eadca711 100644
--- a/src/include/Configuration.h
+++ b/src/include/Configuration.h
@@ -109,54 +109,62 @@ protected:
   double *_sph_y;
   //! \brief Vector of spherical components Z coordinates.
   double *_sph_z;
+  //! \brief Flag for matrix inversion refinement.
+  short _refine_flag;
+  //! \brief Flag for dynamic order management.
+  short _dyn_order_flag;
 
 public:
-  //! \brief Read only view on number of spherical components.
+  //! \brief Read-only view on number of spherical components.
   const int& number_of_spheres = _number_of_spheres;
-  //! \brief Read only view on maximum field expansion order.
+  //! \brief Read-only view on maximum field expansion order.
   const int& l_max = _l_max;
-  //! \brief Read only view on maximum internal field expansion order.
+  //! \brief Read-only view on maximum internal field expansion order.
   const int& li = _li;
-  //! \brief Read only view on maximum external field expansion order.
+  //! \brief Read-only view on maximum external field expansion order.
   const int& le = _le;
-  //! \brief Read only view on maximum dimension of allocated matrix allowance (deprecated).
+  //! \brief Read-only view on maximum dimension of allocated matrix allowance (deprecated).
   const np_int& mxndm = _mxndm;
-  //! \brief Read only view on the intensity mode flag.
+  //! \brief Read-only view on the intensity mode flag.
   const int& iavm = _iavm;
-  //! \brief Read only view on incident field polarization status (0 - linear, 1 - circular).
+  //! \brief Read-only view on incident field polarization status (0 - linear, 1 - circular).
   const int& in_pol = _in_pol;
-  //! \brief Read only view on number of points for transition layer integration.
+  //! \brief Read-only view on number of points for transition layer integration.
   const int& npnt = _npnt;
-  //! \brief Read only view on number of points for non-transition layer integration.
+  //! \brief Read-only view on number of points for non-transition layer integration.
   const int& npntts = _npntts;
-  //! \brief Read only view on type of meridional plane definition.
+  //! \brief Read-only view on type of meridional plane definition.
   const int& isam = _isam;
-  //! \brief Read only view on scale index for T-matrix output.
+  //! \brief Read-only view on scale index for T-matrix output.
   const int& jwtm = _jwtm;
-  //! \brief Read only view on incident field initial azimuth.
+  //! \brief Read-only view on incident field initial azimuth.
   const double& in_theta_start = _in_theta_start;
-  //! \brief Read only view on incident field azimuth step.
+  //! \brief Read-only view on incident field azimuth step.
   const double& in_theta_step = _in_theta_step;
-  //! \brief Read only view on incident field final azimuth.
+  //! \brief Read-only view on incident field final azimuth.
   const double& in_theta_end = _in_theta_end;
-  //! \brief Read only view on scattered field initial azimuth.
+  //! \brief Read-only view on scattered field initial azimuth.
   const double& sc_theta_start = _sc_theta_start;
-  //! \brief Read only view on scattered field azimuth step.
+  //! \brief Read-only view on scattered field azimuth step.
   const double& sc_theta_step = _sc_theta_step;
-  //! \brief Read only view on scattered field final azimuth.
+  //! \brief Read-only view on scattered field final azimuth.
   const double& sc_theta_end = _sc_theta_end;
-  //! \brief Read only view on incident field initial elevation.
+  //! \brief Read-only view on incident field initial elevation.
   const double& in_phi_start = _in_phi_start;
-  //! \brief Read only view on incident field elevation step.
+  //! \brief Read-only view on incident field elevation step.
   const double& in_phi_step = _in_phi_step;
-  //! \brief Read only view on incident field final elevation.
+  //! \brief Read-only view on incident field final elevation.
   const double& in_phi_end = _in_phi_end;
-  //! \brief Read only view on scattered field initial elevation.
+  //! \brief Read-only view on scattered field initial elevation.
   const double& sc_phi_start = _sc_phi_start;
-  //! \brief Read only view on scattered field elevation step.
+  //! \brief Read-only view on scattered field elevation step.
   const double& sc_phi_step = _sc_phi_step;
-  //! \brief Read only view on scattered field final elevation.
+  //! \brief Read-only view on scattered field final elevation.
   const double& sc_phi_end = _sc_phi_end;
+  //! \brief Read-only view on flag for matrix inversion refinement.
+  const short& refine_flag = _refine_flag;
+  //! \brief Read-only view on flag for dynamic order management.
+  const short& dyn_order_flag = _dyn_order_flag;
   
   /*! \brief Build a scattering geometry configuration structure.
    *
@@ -361,25 +369,25 @@ protected:
    */
   void write_legacy(const std::string& file_name);
 public:
-  //! \brief Read only view on name of the reference variable type.
+  //! \brief Read-only view on name of the reference variable type.
   const std::string& reference_variable_name = _reference_variable_name;
-  //! \brief Read only view on number of spherical components.
+  //! \brief Read-only view on number of spherical components.
   const int& number_of_spheres = _number_of_spheres;
-  //! \brief Read only view on number of configurations.
+  //! \brief Read-only view on number of configurations.
   const int& configurations = _configurations;
-  //! \brief Read only view on number of scales to use in calculation.
+  //! \brief Read-only view on number of scales to use in calculation.
   const int& number_of_scales = _number_of_scales;
-  //! \brief Read only view on type of dielectric functions.
+  //! \brief Read-only view on type of dielectric functions.
   const int& idfc = _idfc;
-  //! \brief Read only view on external medium dielectric constant.
+  //! \brief Read-only view on external medium dielectric constant.
   const double& exdc = _exdc;
-  //! \brief Read only view on WP.
+  //! \brief Read-only view on WP.
   const double& wp = _wp;
-  //! \brief Read only view on peak XI.
+  //! \brief Read-only view on peak XI.
   const double& xip = _xip;
-  //! \brief Read only view on the maximum number of layers for the particle components.
+  //! \brief Read-only view on the maximum number of layers for the particle components.
   const int& max_layers = _max_layers;
-  //! \brief Read only view on flag to control whether to add an external layer.
+  //! \brief Read-only view on flag to control whether to add an external layer.
   const bool& use_external_sphere = _use_external_sphere;
   //! \brief Matrix of fractional transition radii with size [CONFIGURATIONS x LAYERS].
   double **_rcf;
diff --git a/src/libnptm/Configuration.cpp b/src/libnptm/Configuration.cpp
index 625e38476a5aa7ffe660e6e3d6b5cd47ccb9c55c..d348ef167e2c74404fa1feef883fa7ff74aa4c9d 100644
--- a/src/libnptm/Configuration.cpp
+++ b/src/libnptm/Configuration.cpp
@@ -64,15 +64,13 @@
 using namespace std;
 
 GeometryConfiguration::GeometryConfiguration(
-					     int nsph, int lm, int in_pol, int npnt, int npntts, int isam,
-					     int li, int le, np_int mxndm, int iavm,
-					     double *x, double *y, double *z,
-					     double in_th_start, double in_th_step, double in_th_end,
-					     double sc_th_start, double sc_th_step, double sc_th_end,
-					     double in_ph_start, double in_ph_step, double in_ph_end,
-					     double sc_ph_start, double sc_ph_step, double sc_ph_end,
-					     int jwtm
-					     ) {
+  int nsph, int lm, int in_pol, int npnt, int npntts, int isam,
+  int li, int le, np_int mxndm, int iavm, double *x, double *y,
+  double *z, double in_th_start, double in_th_step, double in_th_end,
+  double sc_th_start, double sc_th_step, double sc_th_end,
+  double in_ph_start, double in_ph_step, double in_ph_end,
+  double sc_ph_start, double sc_ph_step, double sc_ph_end, int jwtm
+) {
   _number_of_spheres = nsph;
   _l_max = lm;
   _in_pol = in_pol;
@@ -99,6 +97,8 @@ GeometryConfiguration::GeometryConfiguration(
   _sph_x = x;
   _sph_y = y;
   _sph_z = z;
+  _refine_flag = 0;
+  _dyn_order_flag = 1;
 }
 
 GeometryConfiguration::GeometryConfiguration(const GeometryConfiguration& rhs)
@@ -134,6 +134,8 @@ GeometryConfiguration::GeometryConfiguration(const GeometryConfiguration& rhs)
     _sph_y[ni] = rhs._sph_y[ni];
     _sph_z[ni] = rhs._sph_z[ni];
   }
+  _refine_flag = rhs._refine_flag;
+  _dyn_order_flag = rhs._dyn_order_flag;
 }
 
 #ifdef MPI_VERSION
@@ -169,6 +171,8 @@ GeometryConfiguration::GeometryConfiguration(const mixMPI *mpidata) {
   MPI_Bcast(_sph_x, _number_of_spheres, MPI_DOUBLE, 0, MPI_COMM_WORLD);
   MPI_Bcast(_sph_y, _number_of_spheres, MPI_DOUBLE, 0, MPI_COMM_WORLD);
   MPI_Bcast(_sph_z, _number_of_spheres, MPI_DOUBLE, 0, MPI_COMM_WORLD);
+  MPI_Bcast(&_refine_flag, 1, MPI_SHORT, 0, MPI_COMM_WORLD);
+  MPI_Bcast(&_dyn_order_flag, 1, MPI_SHORT, 0, MPI_COMM_WORLD);
 }
 
 void GeometryConfiguration::mpibcast(const mixMPI *mpidata) {
@@ -200,6 +204,8 @@ void GeometryConfiguration::mpibcast(const mixMPI *mpidata) {
   MPI_Bcast(_sph_x, _number_of_spheres, MPI_DOUBLE, 0, MPI_COMM_WORLD);
   MPI_Bcast(_sph_y, _number_of_spheres, MPI_DOUBLE, 0, MPI_COMM_WORLD);
   MPI_Bcast(_sph_z, _number_of_spheres, MPI_DOUBLE, 0, MPI_COMM_WORLD);
+  MPI_Bcast(&_refine_flag, 1, MPI_SHORT, 0, MPI_COMM_WORLD);
+  MPI_Bcast(&_dyn_order_flag, 1, MPI_SHORT, 0, MPI_COMM_WORLD);
 }
 #endif
 
@@ -221,6 +227,7 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(const std::string& fil
     OpenConfigurationFileException ex(file_name);
     throw ex;
   }
+  // Read the legacy FORTRAN mandatory configuration data
   int _nsph = 0, _lm = 0, _in_pol = 0, _npnt = 0, _npntts = 0, _isam = 0;
   int _li = 0, _le = 0, _iavm = 0, num_params = 0;
   np_int _mxndm = 0;
@@ -319,6 +326,7 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(const std::string& fil
   str_target = file_lines[last_read_line++];
   regex_search(str_target, m, re);
   fjwtm = stoi(m.str());
+  // Mandatory configuration data were read. Create the configuration object.
   GeometryConfiguration *conf = new GeometryConfiguration(
     _nsph, _lm, _in_pol, _npnt, _npntts, _isam,
     _li, _le, _mxndm, _iavm, x, y, z,
@@ -328,6 +336,25 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(const std::string& fil
     sc_ph_start, sc_ph_step, sc_ph_end,
     fjwtm
   );
+
+  // Read optional configuration data used only by the C++ code.
+  while (num_lines > last_read_line) {
+    str_target = file_lines[last_read_line++];
+    if (str_target.size() > 0) {
+      if (str_target.substr(0, 15).compare("USE_REFINEMENT=") == 0) {
+	regex_search(str_target, m, re);
+	short refine_flag = (short)stoi(m.str());
+	conf->_refine_flag = refine_flag;
+      }
+      else if (str_target.substr(0, 14).compare("USE_DYN_ORDER=") == 0) {
+	regex_search(str_target, m, re);
+	short dyn_order_flag = (short)stoi(m.str());
+	conf->_dyn_order_flag = dyn_order_flag;
+      }
+    }
+  }
+  
+  // Clean up memory and return configuration object.
   delete[] file_lines;
   return conf;
 }