diff --git a/xs/src/libslic3r/SupportMaterial.cpp b/xs/src/libslic3r/SupportMaterial.cpp
index 48d19715a..f6ad3f4eb 100644
--- a/xs/src/libslic3r/SupportMaterial.cpp
+++ b/xs/src/libslic3r/SupportMaterial.cpp
@@ -164,8 +164,7 @@ PrintObjectSupportMaterial::PrintObjectSupportMaterial(const PrintObject *object
         false)),
  
     // 50 mirons layer
-    m_support_layer_height_min  (0.05),
-    m_support_layer_height_max  (0.)
+    m_support_layer_height_min  (0.05)
 {
     if (m_object_config->support_material_interface_layers.value == 0) {
         // No interface layers allowed, print everything with the base support pattern.
@@ -215,10 +214,6 @@ void PrintObjectSupportMaterial::generate(PrintObject &object)
     for (size_t i = 0; i < object.layer_count(); ++ i)
         max_object_layer_height = std::max(max_object_layer_height, object.layers[i]->height);
 
-    if (m_support_layer_height_max == 0)
-        m_support_layer_height_max = std::max(max_object_layer_height, 0.75 * m_support_material_flow.nozzle_diameter);
-//  m_support_interface_layer_height_max = std::max(max_object_layer_height, 0.75 * m_support_material_interface_flow.nozzle_diameter);
-
     // Layer instances will be allocated by std::deque and they will be kept until the end of this function call.
     // The layers will be referenced by various LayersPtr (of type std::vector<Layer*>)
     MyLayerStorage layer_storage;
@@ -362,21 +357,26 @@ void PrintObjectSupportMaterial::generate(PrintObject &object)
 		// Assign an average print_z to the set of layers with nearly equal print_z.
 		coordf_t zavg = 0.5 * (layers_sorted[i]->print_z + layers_sorted[j - 1]->print_z);
 		coordf_t height_min = layers_sorted[i]->height;
+		bool     empty = true;
 		for (int u = i; u < j; ++u) {
 			MyLayer &layer = *layers_sorted[u];
+			if (!layer.polygons.empty())
+				empty = false;
 			layer.print_z = zavg;
 			height_min = std::min(height_min, layer.height);
 		}
-		object.add_support_layer(layer_id, height_min, zavg);
-        if (layer_id > 0) {
-            // Inter-link the support layers into a linked list.
-            SupportLayer *sl1 = object.support_layers[object.support_layer_count()-2];
-            SupportLayer *sl2 = object.support_layers.back();
-            sl1->upper_layer = sl2;
-            sl2->lower_layer = sl1;
-        }
-        i = j;
-        ++ layer_id;
+		if (! empty) {
+			object.add_support_layer(layer_id, height_min, zavg);
+			if (layer_id > 0) {
+				// Inter-link the support layers into a linked list.
+				SupportLayer *sl1 = object.support_layers[object.support_layer_count() - 2];
+				SupportLayer *sl2 = object.support_layers.back();
+				sl1->upper_layer = sl2;
+				sl2->lower_layer = sl1;
+			}
+			++layer_id;
+		}
+		i = j;
     }
 
     BOOST_LOG_TRIVIAL(info) << "Support generator - Generating tool paths";
@@ -392,16 +392,21 @@ void PrintObjectSupportMaterial::generate(PrintObject &object)
             // Due to the floating point inaccuracies, the print_z may not be the same even if in theory they should.
             int j = i + 1;
             coordf_t zmax = layers_sorted[i]->print_z + EPSILON;
-            for (; j < layers_sorted.size() && layers_sorted[j]->print_z <= zmax; ++j) ;
-            export_print_z_polygons_to_svg(
-                debug_out_path("support-%d-%lf.svg", iRun, layers_sorted[i]->print_z).c_str(), 
-                layers_sorted.data() + i, j - i);
-            export_print_z_polygons_and_extrusions_to_svg(
-                debug_out_path("support-w-fills-%d-%lf.svg", iRun, layers_sorted[i]->print_z).c_str(), 
-                layers_sorted.data() + i, j - i, 
-                *object.support_layers[layer_id]);
-            i = j;
-            ++ layer_id;
+			bool empty = true;
+			for (; j < layers_sorted.size() && layers_sorted[j]->print_z <= zmax; ++j)
+				if (!layers_sorted[j]->polygons.empty())
+					empty = false;
+			if (!empty) {
+				export_print_z_polygons_to_svg(
+					debug_out_path("support-%d-%lf.svg", iRun, layers_sorted[i]->print_z).c_str(),
+					layers_sorted.data() + i, j - i);
+				export_print_z_polygons_and_extrusions_to_svg(
+					debug_out_path("support-w-fills-%d-%lf.svg", iRun, layers_sorted[i]->print_z).c_str(),
+					layers_sorted.data() + i, j - i,
+					*object.support_layers[layer_id]);
+				++layer_id;
+			}
+			i = j;
         }
     }
 #endif /* SLIC3R_DEBUG */
@@ -721,7 +726,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_
                             // This is a feasible support layer height.
                             new_layer.bottom_z = layer_below->print_z;
                             new_layer.height = new_layer.print_z - new_layer.bottom_z;
-                            assert(new_layer.height <= m_support_layer_height_max);
+                            assert(new_layer.height <= m_slicing_params.max_suport_layer_height);
                             break;
                         }                        
                     }
@@ -1053,7 +1058,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int
 		if (dist == 0.)
 			continue;
         // Insert intermediate layers.
-        size_t        n_layers_extra = size_t(ceil(dist / m_support_layer_height_max));
+        size_t        n_layers_extra = size_t(ceil(dist / m_slicing_params.max_suport_layer_height)); 
         assert(n_layers_extra > 0);
         coordf_t      step   = dist / coordf_t(n_layers_extra);
 		if (! synchronize && ! m_slicing_params.soluble_interface && extr2.layer->layer_type == sltTopContact) {
@@ -1082,12 +1087,12 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int
         coordf_t extr2z_large_steps = extr2z;
         if (synchronize) {
             // Synchronize support layers with the object layers.
-            if (object.layers.front()->print_z - extr1z > m_support_layer_height_max) {
+            if (object.layers.front()->print_z - extr1z > m_slicing_params.max_suport_layer_height) {
                 // Generate the initial couple of layers before reaching the 1st object layer print_z level.
                 extr2z_large_steps = object.layers.front()->print_z;
                 dist = extr2z_large_steps - extr1z;
                 assert(dist >= 0.);
-                n_layers_extra = size_t(ceil(dist / m_support_layer_height_max));
+                n_layers_extra = size_t(ceil(dist / m_slicing_params.max_suport_layer_height));
                 step = dist / coordf_t(n_layers_extra);
             }
         }