diff --git a/src/cluster/cluster.cpp b/src/cluster/cluster.cpp
index 7fa92b0eb9241cd92550cf310e3c357176f6981a..89ea580de4897f0c3659bb9011293fcd7888b93b 100644
--- a/src/cluster/cluster.cpp
+++ b/src/cluster/cluster.cpp
@@ -229,6 +229,10 @@ void cluster(const string& config_file, const string& data_file, const string& o
     int nsph = gconf->number_of_spheres;
     // Sanity check on number of sphere consistency, should always be verified
     if (s_nsph == nsph) {
+      char virtual_line[256];
+      sprintf(virtual_line, "%.5g.\n", sconf->get_particle_radius(gconf));
+      message = "INFO: particle radius is " + (string)virtual_line;
+      logger->log(message);
       ScatteringAngles *p_scattering_angles = new ScatteringAngles(gconf);
       double wp = sconf->wp;
       // ClusterOutputInfo : Thread 0 of MPI process 0 allocates the memory to
@@ -733,9 +737,11 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf
   }
   // Dynamic order check
   const double alamb = 2.0 * pi / cid->vk;
-  double size_par = 2.0 * pi * sqrt(exdc) * sconf->get_radius(0) / alamb;
-  int recommended_li = 4 + (int)ceil(size_par + 4.05 * pow(size_par, 1.0 / 3.0));
-  if (recommended_li != cid->c1->li) {
+  double size_par_li = 2.0 * pi * sqrt(exdc) * sconf->get_max_radius() / alamb;
+  int recommended_li = 4 + (int)ceil(size_par_li + 4.05 * pow(size_par_li, 1.0 / 3.0));
+  double size_par_le = 2.0 * pi * sqrt(exdc) * sconf->get_particle_radius(gconf) / alamb;
+  int recommended_le = 1 + (int)ceil(size_par_le + 11.0 * pow(size_par_le, 1.0 / 3.0));
+  if (recommended_li != cid->c1->li || recommended_le != cid->c1->le) {
     if (recommended_li > cid->c1->li) {
       message = "WARNING: internal order " + to_string(cid->c1->li) + " for scale iteration "
 	+ to_string(jxi488) + " too low (recommended order is " + to_string(recommended_li)
@@ -745,7 +751,19 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf
       message = "INFO: lowering internal order from " + to_string(cid->c1->li) + " to "
 	+ to_string(recommended_li) + " for scale iteration " + to_string(jxi488) + ".\n";
       logger->log(message, LOG_INFO);
-      cid->update_orders(sconf->_rcf, recommended_li, recommended_li);
+    }
+    if (recommended_le > cid->c1->le) {
+      message = "WARNING: external order " + to_string(cid->c1->le) + " for scale iteration "
+	+ to_string(jxi488) + " too low (recommended order is " + to_string(recommended_le)
+	+ ").\n";
+      logger->log(message, LOG_WARN);
+    } else {
+      message = "INFO: lowering external order from " + to_string(cid->c1->le) + " to "
+	+ to_string(recommended_le) + " for scale iteration " + to_string(jxi488) + ".\n";
+      logger->log(message, LOG_INFO);
+    }
+    if (recommended_li < cid->c1->li || recommended_le < cid->c1->le) {
+      cid->update_orders(sconf->_rcf, recommended_li, recommended_le);
     }
     cid->refinemode = 2;
   }