diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+2015-05-07 Mike Pye <mike@pusher.com>
+
+    * Remove coercion of msgpack String type to haskell Text
+
 2014-12-03 Sebastian Witte <woozletoff@gmail.com>
 
     * Add support for extension types
diff --git a/Data/MessagePack.hs b/Data/MessagePack.hs
--- a/Data/MessagePack.hs
+++ b/Data/MessagePack.hs
@@ -21,8 +21,6 @@
 import Data.Int
 import Data.MessagePack.Spec
 import Data.Serialize
-import Data.Text (Text)
-import Data.Text.Encoding
 import qualified Data.ByteString  as BS
 import qualified Data.Map as M
 
@@ -31,7 +29,7 @@
             | ObjectBool   Bool
             | ObjectFloat  Float
             | ObjectDouble Double
-            | ObjectString Text
+            | ObjectString BS.ByteString
             | ObjectBinary BS.ByteString
             | ObjectArray  [Object]
             | ObjectMap    (M.Map Object Object )
@@ -61,10 +59,9 @@
     put (ObjectDouble d)   = putWord8 float64 >> putFloat64be d
 
     put (ObjectString t) =
-        header >> putByteString bytes
+        header >> putByteString t
      where
-        bytes = encodeUtf8 t
-        size  = BS.length bytes
+        size  = BS.length t
         header
           | size <= 31     = putWord8 $ fixstr .|. fromIntegral size
           | size < 0x100   = putWord8 str8  >> putWord8 (fromIntegral size)
@@ -141,13 +138,13 @@
           | k == int64                        = ObjectInt <$> fromIntegral <$> (get :: Get Int64)
 
           | k .&. fixstrMask    == fixstr     = let n = fromIntegral $ k .&. complement fixstrMask
-                                                in  ObjectString <$> decodeUtf8 <$> getByteString n
+                                                in  ObjectString <$> getByteString n
           | k == str8                         = do n <- fromIntegral <$> getWord8
-                                                   ObjectString <$> decodeUtf8 <$> getByteString n
+                                                   ObjectString <$> getByteString n
           | k == str16                        = do n <- fromIntegral <$> getWord16be
-                                                   ObjectString <$> decodeUtf8 <$> getByteString n
+                                                   ObjectString <$> getByteString n
           | k == str32                        = do n <- fromIntegral <$> getWord32be
-                                                   ObjectString <$> decodeUtf8 <$> getByteString n
+                                                   ObjectString <$> getByteString n
 
           | k .&. fixarrayMask  == fixarray   = let n = fromIntegral $ k .&. complement fixarrayMask
                                                 in  ObjectArray <$> replicateM n get
diff --git a/messagepack.cabal b/messagepack.cabal
--- a/messagepack.cabal
+++ b/messagepack.cabal
@@ -1,5 +1,5 @@
 name               : messagepack
-version            : 0.3.0
+version            : 0.4.0
 synopsis           : Serialize instance for Message Pack Object
 description        : Serialize instance for Message Pack Object
 homepage           : https://github.com/rodrigosetti/messagepack
@@ -26,11 +26,9 @@
                    , Data.MessagePack.Spec
   default-language : Haskell2010
   build-depends    : base       == 4.*
-                   , attoparsec == 0.12.*
                    , bytestring == 0.10.*
                    , cereal     == 0.4.*
                    , containers == 0.5.*
-                   , text       == 1.*
 
 test-suite messagepack-tests
   type             : exitcode-stdio-1.0
@@ -45,6 +43,5 @@
                    , test-framework             == 0.8.*
                    , test-framework-quickcheck2 == 0.3.*
                    , test-framework-th          == 0.2.*
-                   , text                       == 1.*
                    , messagepack
 
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -9,7 +9,6 @@
 import Test.QuickCheck
 import qualified Data.ByteString as BS
 import qualified Data.Map as M
-import qualified Data.Text as T
 
 main :: IO ()
 main = $(defaultMainGenerator)
@@ -23,12 +22,14 @@
                                     , ObjectString <$> arbitrary
                                     , ObjectBinary <$> arbitrary
                                     , ObjectArray  <$> resize (3 * n `quot` 4) arbitrary
-                                    , ObjectMap    <$> resize (3 * n `quot` 4) arbitrary ]
+                                    , ObjectMap    <$> resize (3 * n `quot` 4) arbitrary
+                                    , ObjectExt    <$> arbitrary <*> arbitrary ]
 
     shrink (ObjectString s) = map ObjectString $ shrink s
     shrink (ObjectBinary b) = map ObjectBinary $ shrink b
-    shrink (ObjectArray a)  = (map ObjectArray $ shrink a) ++ a
-    shrink (ObjectMap m)    = (map ObjectMap $ shrink m) ++ M.keys m ++ M.elems m
+    shrink (ObjectArray a)  = map ObjectArray (shrink a) ++ a
+    shrink (ObjectMap m)    = map ObjectMap (shrink m) ++ M.keys m ++ M.elems m
+    shrink (ObjectExt t s)  = map (ObjectExt t) $ shrink s
     shrink _                = []
 
 instance (Ord k, Arbitrary k, Arbitrary v) => Arbitrary (M.Map k v) where
@@ -42,12 +43,6 @@
     arbitrary = BS.pack <$> arbitrary
 
     shrink = map BS.pack . shrink . BS.unpack
-
-instance Arbitrary T.Text where
-
-    arbitrary = T.pack <$> arbitrary
-
-    shrink = map T.pack . shrink . T.unpack
 
 prop_encodeDecodeIsIdentity :: Object -> Bool
 prop_encodeDecodeIsIdentity o = either error (== o) $ decode $ encode o
