diff --git a/pcbnew/footprint.cpp b/pcbnew/footprint.cpp
index 7f8af9bf39..e869ab3744 100644
--- a/pcbnew/footprint.cpp
+++ b/pcbnew/footprint.cpp
@@ -1614,14 +1614,18 @@ void FOOTPRINT::Flip( const VECTOR2I& aCentre, bool aFlipLeftRight )
     // Flip layer
     BOARD_ITEM::SetLayer( FlipLayer( GetLayer() ) );
 
-    // Reverse mirror orientation.
-    m_orient = -m_orient;
-    m_orient.Normalize180();
+    // Calculate the new orientation, and then clear it for pad flipping.
+    EDA_ANGLE newOrientation = -m_orient;
+    newOrientation.Normalize180();
+    m_orient = ANGLE_0;
 
     // Mirror pads to other side of board.
     for( PAD* pad : m_pads )
         pad->Flip( m_pos, false );
 
+    // Now set the new orientation.
+    m_orient = newOrientation;
+
     // Mirror zones to other side of board.
     for( ZONE* zone : m_zones )
         zone->Flip( m_pos, false );