diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,25 @@
+Copyright (c) 2017-2018, The TokTok Team
+Copyright (c) 2009-2010, Hideyuki Tanaka
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of the Hideyuki Tanaka nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY Hideyuki Tanaka ''AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,3 @@
+#!/usr/bin/env runhaskell
+> import Distribution.Simple
+> main = defaultMain
diff --git a/msgpack-arbitrary.cabal b/msgpack-arbitrary.cabal
new file mode 100644
--- /dev/null
+++ b/msgpack-arbitrary.cabal
@@ -0,0 +1,59 @@
+name:                 msgpack-arbitrary
+version:              0.1.0
+synopsis:             A Haskell implementation of MessagePack.
+homepage:             http://msgpack.org/
+license:              BSD3
+license-file:         LICENSE
+author:               Hideyuki Tanaka
+maintainer:           Iphigenia Df <iphydf@gmail.com>
+copyright:            Copyright (c) 2009-2016, Hideyuki Tanaka
+category:             Data
+stability:            Experimental
+cabal-version:        >= 1.10
+build-type:           Simple
+description:
+  A Haskell implementation of MessagePack <http://msgpack.org/>
+  .
+  This is a fork of msgpack-haskell <https://github.com/msgpack/msgpack-haskell>,
+  since the original author is unreachable. This fork incorporates a number of
+  bugfixes and is actively being developed.
+
+source-repository head
+  type:             git
+  location:         https://github.com/TokTok/hs-msgpack-arbitrary
+
+library
+  default-language: Haskell2010
+  hs-source-dirs:
+      src
+  ghc-options:
+      -Wall
+      -fno-warn-unused-imports
+  exposed-modules:
+      Data.MessagePack.Arbitrary
+  build-depends:
+      base                      < 5
+    , QuickCheck
+    , bytestring
+    , msgpack-types             >= 0.3 && < 0.4
+    , text
+    , vector
+
+test-suite testsuite
+  type: exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs: test
+  main-is: testsuite.hs
+  other-modules:
+      Data.MessagePack.ArbitrarySpec
+  ghc-options:
+      -Wall
+      -fno-warn-unused-imports
+  build-tool-depends:
+      hspec-discover:hspec-discover
+  build-depends:
+      base < 5
+    , QuickCheck
+    , hspec
+    , msgpack-arbitrary
+    , msgpack-types
diff --git a/src/Data/MessagePack/Arbitrary.hs b/src/Data/MessagePack/Arbitrary.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/MessagePack/Arbitrary.hs
@@ -0,0 +1,28 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE StrictData  #-}
+{-# LANGUAGE Trustworthy #-}
+module Data.MessagePack.Arbitrary () where
+
+import qualified Data.ByteString           as S
+import           Data.MessagePack.Types    (Object (..))
+import qualified Data.Text                 as T
+import qualified Data.Vector               as V
+import           Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
+import qualified Test.QuickCheck.Gen       as Gen
+
+
+instance Arbitrary Object where
+    arbitrary = Gen.sized $ \n -> Gen.oneof
+        [ pure ObjectNil
+        , ObjectBool   <$> arbitrary
+        , ObjectInt    <$> negatives
+        , ObjectWord   <$> arbitrary
+        , ObjectFloat  <$> arbitrary
+        , ObjectDouble <$> arbitrary
+        , ObjectStr    <$> (T.pack <$> arbitrary)
+        , ObjectBin    <$> (S.pack <$> arbitrary)
+        , ObjectArray  <$> (V.fromList <$> Gen.resize (n `div` 2) arbitrary)
+        , ObjectMap    <$> (V.fromList <$> Gen.resize (n `div` 4) arbitrary)
+        , ObjectExt    <$> arbitrary <*> (S.pack <$> arbitrary)
+        ]
+        where negatives = Gen.choose (minBound, -1)
diff --git a/test/Data/MessagePack/ArbitrarySpec.hs b/test/Data/MessagePack/ArbitrarySpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Data/MessagePack/ArbitrarySpec.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE Trustworthy         #-}
+module Data.MessagePack.ArbitrarySpec where
+
+import           Data.MessagePack.Arbitrary ()
+import           Data.MessagePack.Types     (Object (..))
+import           Test.Hspec                 (Spec, describe, it, shouldBe)
+import           Test.QuickCheck            (Arbitrary (..), property)
+
+spec :: Spec
+spec =
+    describe "arbitrary" $
+        it "produces reasonably-sized objects" $
+            property $ \(x :: Object) -> read (show x) `shouldBe` x
diff --git a/test/testsuite.hs b/test/testsuite.hs
new file mode 100644
--- /dev/null
+++ b/test/testsuite.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
