diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Leon Mergen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,11 @@
+haskell-bitcoin-tx
+==================
+
+[![Build Status](https://travis-ci.org/solatis/haskell-bitcoin-tx.png?branch=master)](https://travis-ci.org/solatis/haskell-bitcoin-tx)
+[![Coverage Status](https://coveralls.io/repos/solatis/haskell-bitcoin-tx/badge.svg?branch=master)](https://coveralls.io/r/solatis/haskell-bitcoin-tx?branch=master)
+[![MIT](http://b.repl.ca/v1/license-MIT-blue.png)](http://en.wikipedia.org/wiki/MIT_License)
+[![Haskell](http://b.repl.ca/v1/language-haskell-lightgrey.png)](http://haskell.org)
+
+This library provides the same functionality as the bitcoin-tx command line
+utility, which was introduced in Bitcoin Core v0.10. These functions are
+pure and require no communication with a bitcoin daemon.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,3 @@
+import Distribution.Simple
+
+main = defaultMain
diff --git a/bitcoin-types.cabal b/bitcoin-types.cabal
new file mode 100644
--- /dev/null
+++ b/bitcoin-types.cabal
@@ -0,0 +1,59 @@
+name: bitcoin-types
+category: Network, Finance
+version: 0.9.0
+license: MIT
+license-file: LICENSE
+copyright: (c) 2015 Leon Mergen
+author: Leon Mergen
+maintainer: leon@solatis.com
+homepage: http://www.leonmergen.com/opensource.html
+bug-reports: http://github.com/solatis/haskell-bitcoin-types/issues
+stability: experimental
+synopsis: Provides consistent low-level types used commonly among Bitcoin implementations
+description:
+            Instead of having each Bitcoin library re-define the low level types it is using,
+            this library provides a ready-to-use collection of low-level types and aliases.
+            
+build-type: Simple
+data-files: LICENSE, README.md
+cabal-version: >= 1.10
+tested-with: GHC == 7.6, GHC == 7.8, GHC == 7.10
+
+library
+  hs-source-dirs:      src
+  ghc-options:         -Wall -ferror-spans
+  default-language:    Haskell2010
+
+  exposed-modules:     Data.Bitcoin.Types
+
+  build-depends:       base                     >= 4.3          && < 5
+                     , bytestring
+                     , text
+                     , binary
+                     , hexstring
+                     , base58string
+
+test-suite test-suite
+  type:                exitcode-stdio-1.0
+  ghc-options:         -Wall -ferror-spans -threaded -auto-all -caf-all -fno-warn-type-defaults
+  default-language:    Haskell2010
+  hs-source-dirs:      test
+  main-is:             Main.hs
+
+  other-modules:       Data.Bitcoin.TypesSpec
+                       Spec
+                       Main
+
+  build-depends:       base                     >= 4.3          && < 5
+                     , hspec
+
+                     , bytestring
+                     , base58string
+                     , hexstring
+
+                     , bitcoin-types
+
+source-repository head
+  type: git
+  location: git://github.com/solatis/haskell-bitcoin-types.git
+  branch: master
diff --git a/src/Data/Bitcoin/Types.hs b/src/Data/Bitcoin/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Bitcoin/Types.hs
@@ -0,0 +1,78 @@
+module Data.Bitcoin.Types ( TransactionId
+                          , PrivateKey
+                          , Address
+                          , Account
+                          , Btc
+                          , VarInt (..) ) where
+
+import Control.Applicative ((<$>))
+import Data.Word ( Word64 )
+
+import Data.Binary ( Binary, get, put )
+import Data.Binary.Get ( getWord8
+                       , getWord16le
+                       , getWord32le
+                       , getWord64le )
+
+import Data.Binary.Put ( putWord8
+                       , putWord16le
+                       , putWord32le
+                       , putWord64le )
+
+import           Data.Fixed
+import qualified Data.HexString    as HS
+import qualified Data.Base58String as B58S
+import qualified Data.Text         as T
+
+-- | Per Bitcoin documentation, An identifier used to uniquely identify a
+--   particular transaction; specifically, the sha256d hash of the transaction.
+type TransactionId = HS.HexString
+
+-- | A base58 private key to sign transactions
+type PrivateKey = B58S.Base58String
+
+-- | Per Bitcoin documentation, an identifier used to uniquely identify a
+--   particular address.
+type Address = B58S.Base58String
+
+-- | A wallet account can be any easy to remember string.
+type Account = T.Text
+
+-- | The smallest unit of payment possible in Bitcoin is a Satoshi
+data Satoshi = Satoshi
+
+-- | We describe BTC in terms of Satoshi, where one BTC equals 10^8 Satoshis.
+instance HasResolution Satoshi where
+  resolution _ = 10 ^ ( 8 :: Integer )
+
+-- | A single Bitcoin, which represents 10^8 Satoshis.
+type Btc = Fixed Satoshi
+
+
+
+-- | Data type representing a variable length integer. The 'VarInt' type
+--   usually precedes an array or a string that can vary in length.
+newtype VarInt = VarInt { getVarInt :: Word64 }
+    deriving (Eq, Show, Read)
+
+instance Binary VarInt where
+
+    get = VarInt <$> ( getWord8 >>= go )
+      where
+        go 0xff = getWord64le
+        go 0xfe = fromIntegral <$> getWord32le
+        go 0xfd = fromIntegral <$> getWord16le
+        go x    = fromIntegral <$> return x
+
+    put (VarInt x)
+        | x < 0xfd =
+            putWord8 $ fromIntegral x
+        | x <= 0xffff = do
+            putWord8 0xfd
+            putWord16le $ fromIntegral x
+        | x <= 0xffffffff = do
+            putWord8 0xfe
+            putWord32le $ fromIntegral x
+        | otherwise = do
+            putWord8 0xff
+            putWord64le x
diff --git a/test/Data/Bitcoin/TypesSpec.hs b/test/Data/Bitcoin/TypesSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Data/Bitcoin/TypesSpec.hs
@@ -0,0 +1,6 @@
+module Data.Bitcoin.TypesSpec where
+
+import           Test.Hspec
+
+spec :: Spec
+spec = return ()
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,8 @@
+module Main where
+
+import Test.Hspec.Runner
+import qualified Spec
+
+main :: IO ()
+main =
+  hspecWith defaultConfig Spec.spec
diff --git a/test/Spec.hs b/test/Spec.hs
new file mode 100644
--- /dev/null
+++ b/test/Spec.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF hspec-discover -optF --module-name=Spec #-}
