diff --git a/lzma-conduit.cabal b/lzma-conduit.cabal
--- a/lzma-conduit.cabal
+++ b/lzma-conduit.cabal
@@ -1,5 +1,5 @@
 name:                lzma-conduit
-version:             0.5.2
+version:             0.5.2.1
 synopsis:            Conduit interface for lzma/xz compression.
 description:
   High level bindings to xz-utils.
diff --git a/src/Data/Conduit/Lzma.hs b/src/Data/Conduit/Lzma.hs
--- a/src/Data/Conduit/Lzma.hs
+++ b/src/Data/Conduit/Lzma.hs
@@ -11,7 +11,7 @@
 import Data.ByteString.Internal (ByteString(PS))
 import Data.Conduit
 import Foreign
-import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize, CUChar)
 
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Unsafe as B
@@ -52,7 +52,7 @@
 initStream
   :: String
   -> (Ptr C'lzma_stream -> IO C'lzma_ret)
-  -> IO (Ptr C'lzma_stream)
+  -> IO (Ptr C'lzma_stream, Ptr CUChar)
 initStream name fun = do
   buffer <- mallocBytes bufferSize
   streamPtr <- malloc
@@ -66,7 +66,7 @@
     , c'lzma_stream'total_out = 0 }
   ret <- fun streamPtr
   if ret == c'LZMA_OK
-    then return streamPtr
+    then return (streamPtr, buffer)
     else fail $ name ++ " failed: " ++ prettyRet ret
 
 easyEncoder
@@ -93,9 +93,9 @@
   mval <- await
   case mval of
     Just input -> do
-      (streamKey, streamPtr) <- lift $ allocate
+      (streamKey, (streamPtr, _)) <- lift $ allocate
         (initStream "lzma_auto_decoder" (autoDecoder memlimit))
-        (\ ptr -> c'lzma_end ptr >> free ptr)
+        (\ (streamPtr, buffer) -> c'lzma_end streamPtr >> free streamPtr >> free buffer)
       codeEnum streamKey streamPtr input
 
     Nothing -> return ()
@@ -109,9 +109,9 @@
   mval <- await
   case mval of
     Just input -> do
-      (streamKey, streamPtr) <- lift $ allocate
+      (streamKey, (streamPtr, _)) <- lift $ allocate
         (initStream "lzma_easy_encoder" (easyEncoder level))
-        (\ ptr -> c'lzma_end ptr >> free ptr)
+        (\ (streamPtr, buffer) -> c'lzma_end streamPtr >> free streamPtr >> free buffer)
       codeEnum streamKey streamPtr input
 
     Nothing -> return ()
