diff --git a/swing/src/net/sf/openrocket/gui/print/DesignReport.java b/swing/src/net/sf/openrocket/gui/print/DesignReport.java
index 9aeed6c2f..53f84def4 100644
--- a/swing/src/net/sf/openrocket/gui/print/DesignReport.java
+++ b/swing/src/net/sf/openrocket/gui/print/DesignReport.java
@@ -177,8 +177,8 @@ public class DesignReport {
 		
 		canvas.beginText();
 		canvas.setFontAndSize(ITextHelper.getBaseFont(), PrintUtilities.NORMAL_FONT_SIZE);
-		int figHeightPts = (int) (PrintUnit.METERS.toPoints(figure.getHeight()) * 0.4 * (scale / PrintUnit.METERS
-				.toPoints(1)));
+		double figureHeightInPoints = PrintUnit.METERS.toPoints(figure.getFigureHeight());
+		int figHeightPts = (int) (figureHeightInPoints * SCALE_FUDGE_FACTOR * (scale / PrintUnit.METERS.toPoints(1)));
 		final int diagramHeight = pageImageableHeight * 2 - 70 - (figHeightPts);
 		canvas.moveText(document.leftMargin() + pageSize.getBorderWidthLeft(), diagramHeight);
 		canvas.moveTextWithLeading(0, -16);
@@ -213,7 +213,11 @@ public class DesignReport {
 		canvas.endText();
 		
 		try {
-			//Move the internal pointer of the document below that of what was just written using the direct byte buffer.
+			/*
+			 * Move the internal pointer of the document below the rocket diagram and
+			 * the key attributes. The height of the rocket figure is already calculated
+			 * as diagramHeigt and the height of the attributes text is finalY - initialY.
+			 */
 			Paragraph paragraph = new Paragraph();
 			float finalY = canvas.getYTLM();
 			int heightOfDiagramAndText = (int) (pageSize.getHeight() - (finalY - initialY + diagramHeight));
@@ -223,28 +227,26 @@ public class DesignReport {
 			
 			List<Simulation> simulations = rocketDocument.getSimulations();
 			
-			int motorNumber = 0;
-			for( FlightConfigurationId fcid : rocket.getIds()){
-				
+			boolean firstMotor = true;
+			for (FlightConfigurationId fcid : rocket.getIds()) {
 				PdfPTable parent = new PdfPTable(2);
 				parent.setWidthPercentage(100);
 				parent.setHorizontalAlignment(Element.ALIGN_LEFT);
 				parent.setSpacingBefore(0);
 				parent.setWidths(new int[] { 1, 3 });
 				
-				
-				int leading = 0;
-				//The first motor config is always null.  Skip it and the top-most motor, then set the leading.
-				if ( motorNumber > 1) {
-					leading = 25;
-				}
+				/* The first motor information will get no spacing
+				 * before it, while each subsequent table will need
+				 * a spacing of 25.
+				 */
+				int leading = (firstMotor) ? 0 : 25;
 				
 				FlightData flight = findSimulation( fcid, simulations);
 				addFlightData(flight, rocket, fcid, parent, leading);
 				addMotorData(rocket, fcid, parent);
 				document.add(parent);
 					
-				motorNumber++;
+				firstMotor = false;
 			}
 		} catch (DocumentException e) {
 			log.error("Could not modify document.", e);
@@ -274,21 +276,22 @@ public class DesignReport {
 		theFigure.updateFigure();
 		
 		double scale =
-				(thePageImageableWidth * 2.2) / theFigure.getWidth();
+				(thePageImageableWidth * 2.2) / theFigure.getFigureWidth();
 		theFigure.setScale(scale);
-		/*
-		 * page dimensions are in points-per-inch, which, in Java2D, are the same as pixels-per-inch; thus we don't need any conversion
+		/* Conveniently, page dimensions are in points-per-inch, which, in
+		 * Java2D, are the same as pixels-per-inch; thus we don't need any
+		 * conversion for the figure size.
 		 */
 		theFigure.setSize(thePageImageableWidth, thePageImageableHeight);
 		theFigure.updateFigure();
 		
 		final DefaultFontMapper mapper = new DefaultFontMapper();
 		Graphics2D g2d = theCanvas.createGraphics(thePageImageableWidth, thePageImageableHeight * 2, mapper);
-		final double halfFigureHeight = SCALE_FUDGE_FACTOR * theFigure.getFigureHeightPx() / 2;
+		final double halfFigureHeight = SCALE_FUDGE_FACTOR * theFigure.getFigureHeight() / 2;
 		int y = PrintUnit.POINTS_PER_INCH;
 		//If the y dimension is negative, then it will potentially be drawn off the top of the page.  Move the origin
 		//to allow for this.
-		if (theFigure.getHeight() < 0.0d) {
+		if (theFigure.getDimensions().getY() < 0.0d) {
 			y += (int) halfFigureHeight;
 		}
 		g2d.translate(20, y);
diff --git a/swing/src/net/sf/openrocket/gui/print/PrintFigure.java b/swing/src/net/sf/openrocket/gui/print/PrintFigure.java
index 344713505..0027e7a89 100644
--- a/swing/src/net/sf/openrocket/gui/print/PrintFigure.java
+++ b/swing/src/net/sf/openrocket/gui/print/PrintFigure.java
@@ -3,6 +3,8 @@
  */
 package net.sf.openrocket.gui.print;
 
+import java.awt.geom.Rectangle2D;
+
 import net.sf.openrocket.gui.scalefigure.RocketFigure;
 import net.sf.openrocket.rocketcomponent.Rocket;
 
@@ -27,7 +29,15 @@ public class PrintFigure extends RocketFigure {
 		updateFigure();
 	}
 
-    public double getFigureHeightPx() {
-        return this.getSize().height;
+    public double getFigureHeight() {
+        return this.subjectBounds_m.getHeight();
+    }
+    
+    public double getFigureWidth() {
+    	return this.subjectBounds_m.getWidth();
+    }
+    
+    public Rectangle2D getDimensions() {
+    	return this.subjectBounds_m.getBounds2D();
     }
 }
diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java
index 5775390a1..ffb277118 100644
--- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java
+++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java
@@ -315,6 +315,12 @@ public class RocketFigure extends AbstractScaleFigure {
 		
 	}
 	
+	@Override
+	public void updateFigure() {
+		updateShapes(this.figureShapes);
+		super.updateFigure();
+	}
+	
 	public RocketComponent[] getComponentsByPoint(double x, double y) {
 		// Calculate point in shapes' coordinates
 		Point2D.Double p = new Point2D.Double(x, y);