diff --git a/lib/DBus/Transport.hs b/lib/DBus/Transport.hs
index 8c50ab9..9517212 100644
--- a/lib/DBus/Transport.hs
+++ b/lib/DBus/Transport.hs
@@ -42,3 +42,5 @@ import qualified Data.ByteString
 import           Data.ByteString (ByteString)
+import qualified Data.ByteString.Lazy as BL
 import qualified Data.Map as Map
+import qualified Data.Monoid as M
 import           Data.Typeable (Typeable)
@@ -49,3 +51,3 @@ import qualified System.Info
 
-import qualified Data.Serialize.Builder as Builder
+import qualified Data.ByteString.Builder as Builder
 
@@ -151,3 +153,3 @@ instance Transport SocketTransport where
 recvLoop :: Socket -> Int -> IO ByteString
-recvLoop s = loop Builder.empty where
+recvLoop s = loop M.mempty where
 	chunkSize = 4096
@@ -156,3 +158,3 @@ recvLoop s = loop Builder.empty where
 			chunk <- recv s chunkSize
-			let builder = Builder.append acc (Builder.fromByteString chunk)
+			let builder = M.mappend acc (Builder.byteString chunk)
 			loop builder (n - Data.ByteString.length chunk)
@@ -163,8 +165,8 @@ recvLoop s = loop Builder.empty where
 				-- Return what we've got so far.
-				0 -> return (Builder.toByteString acc)
+				0 -> return (BL.toStrict $ Builder.toLazyByteString acc)
 				
 				len -> do
-					let builder = Builder.append acc (Builder.fromByteString chunk)
+					let builder = M.mappend acc (Builder.byteString chunk)
 					if len == n
-						then return (Builder.toByteString builder)
+						then return (BL.toStrict $ Builder.toLazyByteString builder)
 						else loop builder (n - Data.ByteString.length chunk)
diff --git a/lib/DBus/Wire.hs b/lib/DBus/Wire.hs
index 43ae315..09bf8bd 100644
--- a/lib/DBus/Wire.hs
+++ b/lib/DBus/Wire.hs
@@ -34,2 +34,3 @@ import qualified Data.ByteString.Char8
 import           Data.Int (Int16, Int32, Int64)
+import qualified Data.ByteString.Lazy as BL
 import qualified Data.Map
@@ -37,2 +38,3 @@ import           Data.Map (Map)
 import           Data.Maybe (fromJust, listToMaybe, fromMaybe)
+import qualified Data.Monoid as M
 import           Data.Text (Text)
@@ -45,3 +47,3 @@ import           System.Posix.Types (Fd(..))
 
-import qualified Data.Serialize.Builder as Builder
+import qualified Data.ByteString.Builder as Builder
 import qualified Data.Serialize.Get as Get
@@ -180,3 +182,3 @@ appendB :: Word64 -> Builder.Builder -> Marshal ()
 appendB size bytes = Wire (\_ (MarshalState builder count) -> let
-	builder' = Builder.append builder bytes
+	builder' = M.mappend builder bytes
 	count' = count + size
@@ -187,3 +189,3 @@ appendS bytes = appendB
 	(fromIntegral (Data.ByteString.length bytes))
-	(Builder.fromByteString bytes)
+	(Builder.byteString bytes)
 
@@ -275,3 +277,3 @@ unmarshalGet count be le = do
 marshalWord8 :: Word8 -> Marshal ()
-marshalWord8 x = appendB 1 (Builder.singleton x)
+marshalWord8 x = appendB 1 (Builder.word8 x)
 
@@ -282,4 +284,4 @@ marshalWord16 :: Word16 -> Marshal ()
 marshalWord16 = marshalBuilder 2
-	Builder.putWord16be
-	Builder.putWord16le
+	Builder.word16BE
+	Builder.word16LE
 
@@ -287,4 +289,4 @@ marshalWord32 :: Word32 -> Marshal ()
 marshalWord32 = marshalBuilder 4
-	Builder.putWord32be
-	Builder.putWord32le
+	Builder.word32BE
+	Builder.word32LE
 
@@ -292,4 +294,4 @@ marshalWord64 :: Word64 -> Marshal ()
 marshalWord64 = marshalBuilder 8
-	Builder.putWord64be
-	Builder.putWord64le
+	Builder.word64BE
+	Builder.word64LE
 
@@ -441,6 +443,6 @@ getArrayBytes itemType vs = do
 	
-	putState (MarshalState Builder.empty afterPadding)
+	putState (MarshalState M.mempty afterPadding)
 	(MarshalState itemBuilder _) <- Data.Vector.mapM_ marshal vs >> getState
 	
-	let itemBytes = Builder.toByteString itemBuilder
+	let itemBytes = BL.toStrict $ Builder.toLazyByteString itemBuilder
 	    paddingSize = fromIntegral (afterPadding - afterLength)
@@ -568,3 +570,3 @@ marshalMessage e serial msg = runMarshal where
 		marshal (toValue (encodeEndianness e))
-		let bodyBytes = Builder.toByteString bodyBytesB
+		let bodyBytes = BL.toStrict $ Builder.toLazyByteString bodyBytesB
 		marshalHeader msg serial sig (fromIntegral (Data.ByteString.length bodyBytes))
@@ -573,6 +575,6 @@ marshalMessage e serial msg = runMarshal where
 		checkMaximumSize
-	emptyState = MarshalState Builder.empty 0
+	emptyState = MarshalState M.mempty 0
 	runMarshal = case unWire marshaler e emptyState of
 		WireRL err -> Left (MarshalError err)
-		WireRR _ (MarshalState builder _) -> Right (Builder.toByteString builder)
+		WireRR _ (MarshalState builder _) -> Right (BL.toStrict $ Builder.toLazyByteString builder)
 
