diff --git a/Rasterific.cabal b/Rasterific.cabal
--- a/Rasterific.cabal
+++ b/Rasterific.cabal
@@ -1,7 +1,7 @@
 -- Initial Rasterific.cabal generated by cabal init.  For further 
 -- documentation, see http://haskell.org/cabal/users-guide/
 name:                Rasterific
-version:             0.5.2
+version:             0.5.2.1
 synopsis:            A pure haskell drawing engine.
 -- A longer description of the package.
 description:
@@ -37,7 +37,7 @@
 Source-Repository this
     Type:      git
     Location:  git://github.com/Twinside/Rasterific.git
-    Tag:       v0.5.2
+    Tag:       v0.5.2.1
 
 flag embed_linear
   description: Embed a reduced version of Linear avoiding a (huge) dep
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,5 +1,9 @@
 -*-change-log-*-
 
+v0.5.2.1 April 2015
+ * Fixed: non-composability of cached elements
+ * Fixed: Border size when drawing images was twice too large.
+
 v0.5.2 April 2015
  * Enhancement: Added a withGroupOpacity to render elements with
    a global opacity.
diff --git a/src/Graphics/Rasterific.hs b/src/Graphics/Rasterific.hs
--- a/src/Graphics/Rasterific.hs
+++ b/src/Graphics/Rasterific.hs
@@ -431,8 +431,8 @@
 cacheOrders :: forall px. (RenderablePixel px)
             => Maybe (Image px -> ImageTransformer px) -> [DrawOrder px] -> Drawing px ()
 cacheOrders imageFilter orders = case imageFilter of
-    Nothing -> drawImage resultImage 0 mini
-    Just f -> drawImage (pixelMapXY (f resultImage) resultImage) 0 mini
+    Nothing -> drawImage resultImage 0 cornerUpperLeft
+    Just f -> drawImage (pixelMapXY (f resultImage) resultImage) 0 cornerUpperLeft
   where
    PlaneBound mini maxi = foldMap planeBounds orders
    cornerUpperLeftInt = floor <$> mini :: V2 Int
@@ -441,12 +441,14 @@
    V2 width height = maxi ^-^ cornerUpperLeft ^+^ V2 1 1
    
    shiftOrder order@DrawOrder { _orderPrimitives = prims } =
-       order { _orderPrimitives = fmap (transform (^-^ cornerUpperLeft)) <$> prims }
+       order { _orderPrimitives = fmap (transform (^-^ cornerUpperLeft)) <$> prims 
+             , _orderTexture =
+                 transformTexture (translate cornerUpperLeft) $ _orderTexture order
+             }
    
    resultImage =
      runST $ runDrawContext (ceiling width) (ceiling height) emptyPx
-           $ mapM_ fillOrder
-           $ shiftOrder <$> orders
+           $ mapM_ (fillOrder . shiftOrder) orders
 
 -- | This function perform an optimisation, it will render a drawing
 -- to an image interanlly and create a new order to render this image
@@ -740,7 +742,7 @@
     | otherwise = do
         withTransformation (translate p <> scale scaleX scaleY) $
             withTexture (sampledImageTexture img) $ fill rect
-        stroke borderSize (JoinMiter 0)
+        stroke (borderSize / 2) (JoinMiter 0)
                (CapStraight 0, CapStraight 0) rect'
         where
           p = ip ^-^ V2 0.5 0.5
