diff --git a/lib/Slic3r/Print/Object.pm b/lib/Slic3r/Print/Object.pm
index 42e27a05a..c4a02b196 100644
--- a/lib/Slic3r/Print/Object.pm
+++ b/lib/Slic3r/Print/Object.pm
@@ -198,21 +198,24 @@ sub make_perimeters {
     # compare each layer to the one below, and mark those slices needing
     # one additional inner perimeter, like the top of domed objects-
     
-    # this algorithm makes sure that almost one perimeter is overlapping
-    if ($Slic3r::Config->extra_perimeters && $Slic3r::Config->perimeters > 0) {
+    # this algorithm makes sure that at least one perimeter is overlapping
+    # but we don't generate any extra perimeter if fill density is zero, as they would be floating
+    # inside the object - infill_only_where_needed should be the method of choice for printing
+    # hollow objects
+    if ($Slic3r::Config->extra_perimeters && $Slic3r::Config->perimeters > 0 && $Slic3r::Config->fill_density > 0) {
         for my $region_id (0 .. ($self->print->regions_count-1)) {
             for my $layer_id (0 .. $self->layer_count-2) {
                 my $layerm          = $self->layers->[$layer_id]->regions->[$region_id];
                 my $upper_layerm    = $self->layers->[$layer_id+1]->regions->[$region_id];
                 my $perimeter_flow  = $layerm->perimeter_flow;
                 
-                my $overlap = $perimeter_flow->spacing;  # one perimeter
+                my $overlap = $perimeter_flow->scaled_spacing;  # one perimeter
                 
                 # compute polygons representing the thickness of the first external perimeter of
                 # the upper layer slices
                 my $upper = diff_ex(
                     [ map @$_, map $_->expolygon->offset_ex(+ 0.5 * $perimeter_flow->scaled_spacing), @{$upper_layerm->slices} ],
-                    [ map @$_, map $_->expolygon->offset_ex(- scale($overlap) + (0.5 * $perimeter_flow->scaled_spacing)), @{$upper_layerm->slices} ],
+                    [ map @$_, map $_->expolygon->offset_ex(- $overlap + (0.5 * $perimeter_flow->scaled_spacing)), @{$upper_layerm->slices} ],
                 );
                 next if !@$upper;