diff --git a/scribus/scpageoutput.cpp b/scribus/scpageoutput.cpp
index 5143006f9..9f688af64 100644
--- a/scribus/scpageoutput.cpp
+++ b/scribus/scpageoutput.cpp
@@ -1588,7 +1588,7 @@ void ScPageOutput::drawMarks(ScPage* page, ScPainterExBase* painter, const Marks
 		double bottom = offsetY + height, top = offsetY;
 		drawBoxMarks(painter, QRectF(QPointF(left, top), QPointF(right, bottom)), bleedBox, markOffs, markLength);
 	}
-	if (options.bleedMarks)
+	if (options.bleedMarks && (bleedTop > 0.0 || bleedBottom > 0.0 || bleedLeft > 0.0 || bleedRight > 0.0))
 	{
 		double left = offsetX - bleedLeft, right = offsetX + width + bleedRight;
 		double bottom = offsetY + height + bleedBottom, top = offsetY - bleedTop;
@@ -1596,33 +1596,47 @@ void ScPageOutput::drawMarks(ScPage* page, ScPainterExBase* painter, const Marks
 	}
 	if (options.registrationMarks)
 	{
-		double posX = (2* offsetX + width) / 2.0 - 7.0;
-		double posY = (offsetY + height + bleedBottom + markOffs + 3.0);
-		painter->save();
-		painter->translate(posX, posY);
-		drawRegistrationCross(painter);
-		painter->restore();
-		posX = (2 * offsetX + width) / 2.0 - 7.0;
-		posY = (offsetY - bleedTop - markOffs - 17);
-		painter->save();
-		painter->translate(posX, posY);
-		drawRegistrationCross(painter);
-		painter->restore();
-
-		posX = (offsetX - bleedLeft - markOffs - 17);
-		posY = (2 * offsetY + height) / 2.0 - 7.0;
-		painter->save();
-		painter->translate(posX, posY);
-		drawRegistrationCross(painter);
-		painter->restore();
-		posX = (offsetX + width + bleedRight + markOffs + 3.0);
-		posY = (2 * offsetY + height) / 2.0 - 7.0;
-		painter->save();
-		painter->translate(posX, posY);
-		drawRegistrationCross(painter);
-		painter->restore();
-	}
-	if (options.colorMarks)
+	        if (bleedBottom > 0.0)
+		  {
+		    double posX = (2 * offsetX + width) / 2.0 - 7.0;
+		    double posY = offsetY + height + bleedBottom + markOffs + 3.0;
+		    painter->save();
+		    painter->translate(posX, posY);
+		    drawRegistrationCross(painter);
+		    painter->restore();
+		  }
+
+		if (bleedTop > 0.0)
+		  {
+		    double posX = (2 * offsetX + width) / 2.0 - 7.0;
+		    double posY = offsetY - bleedTop - markOffs - 17;
+		    painter->save();
+		    painter->translate(posX, posY);
+		    drawRegistrationCross(painter);
+		    painter->restore();
+		  }
+
+		if (bleedLeft > 0.0)
+		  {
+		    double posX = offsetX - bleedLeft - markOffs - 17;
+		    double posY = (2 * offsetY + height) / 2.0 - 7.0;
+		    painter->save();
+		    painter->translate(posX, posY);
+		    drawRegistrationCross(painter);
+		    painter->restore();
+		  }
+
+		if (bleedRight > 0.0)
+		  {
+		    double posX = offsetX + width + bleedRight + markOffs + 3.0;
+		    double posY = (2 * offsetY + height) / 2.0 - 7.0;
+		    painter->save();
+		    painter->translate(posX, posY);
+		    drawRegistrationCross(painter);
+		    painter->restore();
+		  }
+	}
+	if (options.colorMarks && bleedTop > 0.0)
 	{
 		int shade = 100;
 		double startX = offsetX + 6.0;
@@ -1686,33 +1700,49 @@ void ScPageOutput::drawBoxMarks(ScPainterExBase* painter, const QRectF& box, con
 	double bleedBottom = bleedBox.bottom();
 	double bleedTop = bleedBox.top();
 	// Top Left
-	start.setXY(bleedLeft - offset, top);
-	end.setXY  (bleedLeft - offset - markSize, top);
-	painter->drawLine(start, end);
-	start.setXY(left, bleedTop - offset);
-	end.setXY  (left, bleedTop - offset - markSize);
-	painter->drawLine(start, end);
+	if (bleedTop > 0.0 && bleedLeft > 0.0)
+	{
+		start.setXY(bleedLeft - offset, top);
+		end.setXY(bleedLeft - offset - markSize, top);
+		painter->drawLine(start, end);
+
+		start.setXY(left, bleedTop - offset);
+		end.setXY(left, bleedTop - offset - markSize);
+		painter->drawLine(start, end);
+	}
 	// Top Right
-	start.setXY(bleedRight + offset, top);
-	end.setXY  (bleedRight + offset + markSize, top);
-	painter->drawLine(start, end);
-	start.setXY(right, bleedTop - offset);
-	end.setXY  (right, bleedTop - offset - markSize);
-	painter->drawLine(start, end);
+	if (bleedTop > 0.0 && bleedRight > 0.0)
+	{
+		start.setXY(bleedRight + offset, top);
+		end.setXY(bleedRight + offset + markSize, top);
+		painter->drawLine(start, end);
+
+		start.setXY(right, bleedTop - offset);
+		end.setXY(right, bleedTop - offset - markSize);
+		painter->drawLine(start, end);
+	}
 	// Bottom Left
-	start.setXY(bleedLeft - offset, bottom);
-	end.setXY  (bleedLeft - offset - markSize, bottom);
-	painter->drawLine(start, end);
-	start.setXY(left, bleedBottom + offset);
-	end.setXY  (left, bleedBottom + offset + markSize);
-	painter->drawLine(start, end);
+	if (bleedBottom > 0.0 && bleedLeft > 0.0)
+	{
+		start.setXY(bleedLeft - offset, bottom);
+		end.setXY(bleedLeft - offset - markSize, bottom);
+		painter->drawLine(start, end);
+
+		start.setXY(left, bleedBottom + offset);
+		end.setXY(left, bleedBottom + offset + markSize);
+		painter->drawLine(start, end);
+	}
 	// Bottom Right
-	start.setXY(bleedRight + offset, bottom);
-	end.setXY  (bleedRight + offset + markSize, bottom);
-	painter->drawLine(start, end);
-	start.setXY(right, bleedBottom + offset);
-	end.setXY  (right, bleedBottom + offset + markSize);
-	painter->drawLine(start, end);
+	if (bleedBottom > 0.0 && bleedRight > 0.0)
+	{
+		start.setXY(bleedRight + offset, bottom);
+		end.setXY(bleedRight + offset + markSize, bottom);
+		painter->drawLine(start, end);
+
+		start.setXY(right, bleedBottom + offset);
+		end.setXY(right, bleedBottom + offset + markSize);
+		painter->drawLine(start, end);
+	}
 }
 
 void ScPageOutput::drawRegistrationCross(ScPainterExBase* painter)
