diff --git a/DMuCheck.cabal b/DMuCheck.cabal
new file mode 100644
--- /dev/null
+++ b/DMuCheck.cabal
@@ -0,0 +1,136 @@
+name:                DMuCheck
+version:             0.3.0.0
+synopsis:            Distributed Mutation Analysis framework for MuCheck
+description:         This package is a wrapper over the mutation analysis
+                     library MuCheck. It provides a basic process based
+                     parallelization of mutant execution, and also a
+                     client and server based distributed mode of mutant
+                     execution. Currently it supports QuickCheck, SmallCheck,
+                     HUnit and HSpec
+homepage:            https://bitbucket.com/osu-testing/d-mucheck
+license:             GPL-2
+license-file:        LICENSE
+author:              Rahul Gopinath <rahul@gopinath.org>
+maintainer:          rahul@gopinath.org
+category:            Testing
+build-type:          Simple
+cabal-version:       >= 1.10
+extra-source-files:  changes.md
+
+source-repository    head
+  type:              git
+  location:          https://bitbucket.org/osu-testing/d-mucheck.git
+
+source-repository    this
+  type:              git
+  location:          https://bitbucket.org/osu-testing/d-mucheck.git
+  tag:               0.3.0.0
+
+Flag QuickCheck
+  Description: Enable QuickCheck support
+  Default:     False
+Flag SmallCheck
+  Description: Enable SmallCheck support
+  Default:     False
+Flag HUnit
+  Description: Enable HUnit support
+  Default:     False
+Flag Hspec
+  Description: Enable Hspec support
+  Default:     False
+
+executable d-mucheck
+  build-depends:    base >=4 && <5,
+                      distributed-process-simplelocalnet >= 0.2.2.0,
+                      distributed-process>=0.5.3,
+                      network-transport-tcp>=0.4.1,
+                      directory >= 1.2,
+                      hint >= 0.4,
+                      unix >= 2.6,
+                      binary >= 0.7,
+                      MuCheck== 0.3.0.0
+  if flag(QuickCheck)
+    build-depends:    MuCheck-QuickCheck == 0.3.0.0
+  if flag(SmallCheck)
+    build-depends:    MuCheck-SmallCheck == 0.3.0.0
+  if flag(HUnit)
+    build-depends:    MuCheck-HUnit == 0.3.0.0
+  if flag(Hspec)
+    build-depends:    MuCheck-Hspec == 0.3.0.0
+
+  default-language: Haskell2010
+  if flag(QuickCheck)
+    hs-source-dirs:   src, quickcheck
+  if flag(SmallCheck)
+    hs-source-dirs:   src, smallcheck
+  if flag(HUnit)
+    hs-source-dirs:   src, hunit
+  if flag(Hspec)
+    hs-source-dirs:   src, hspec
+  main-is:          Main.hs
+  ghc-options:     -Wall -fno-warn-orphans -threaded
+
+executable d-master
+  build-depends:    base >=4 && <5,
+                      distributed-process-simplelocalnet >= 0.2.2.0,
+                      distributed-process>=0.5.3,
+                      network-transport-tcp>=0.4.1,
+                      directory >= 1.2,
+                      hint >= 0.4,
+                      unix >= 2.6,
+                      binary >= 0.7,
+                      MuCheck== 0.3.0.0
+  if flag(QuickCheck)
+    build-depends:    MuCheck-QuickCheck == 0.3.0.0
+  if flag(SmallCheck)
+    build-depends:    MuCheck-SmallCheck == 0.3.0.0
+  if flag(HUnit)
+    build-depends:    MuCheck-HUnit == 0.3.0.0
+  if flag(Hspec)
+    build-depends:    MuCheck-Hspec == 0.3.0.0
+
+  default-language: Haskell2010
+  if flag(QuickCheck)
+    hs-source-dirs:   src, quickcheck
+  if flag(SmallCheck)
+    hs-source-dirs:   src, smallcheck
+  if flag(HUnit)
+    hs-source-dirs:   src, hunit
+  if flag(Hspec)
+    hs-source-dirs:   src, hspec
+
+  main-is:          Master.hs
+  ghc-options:     -Wall -fno-warn-orphans -threaded
+
+executable d-slave
+  build-depends:    base >=4 && <5,
+                      distributed-process-simplelocalnet >= 0.2.2.0,
+                      distributed-process>=0.5.3,
+                      network-transport-tcp>=0.4.1,
+                      directory >= 1.2,
+                      hint >= 0.4,
+                      unix >= 2.6,
+                      binary >= 0.7,
+                      MuCheck== 0.3.0.0
+  if flag(QuickCheck)
+    build-depends:    MuCheck-QuickCheck == 0.3.0.0
+  if flag(SmallCheck)
+    build-depends:    MuCheck-SmallCheck == 0.3.0.0
+  if flag(HUnit)
+    build-depends:    MuCheck-HUnit == 0.3.0.0
+  if flag(Hspec)
+    build-depends:    MuCheck-Hspec == 0.3.0.0
+
+  default-language: Haskell2010
+  if flag(QuickCheck)
+    hs-source-dirs:   src, quickcheck
+  if flag(SmallCheck)
+    hs-source-dirs:   src, smallcheck
+  if flag(HUnit)
+    hs-source-dirs:   src, hunit
+  if flag(Hspec)
+    hs-source-dirs:   src, hspec
+
+  main-is:          Slave.hs
+  ghc-options:     -Wall -fno-warn-orphans -threaded
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
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/changes.md b/changes.md
new file mode 100644
--- /dev/null
+++ b/changes.md
diff --git a/src/Main.hs b/src/Main.hs
new file mode 100644
--- /dev/null
+++ b/src/Main.hs
@@ -0,0 +1,37 @@
+module Main where
+import System.Environment (getArgs)
+import System.Posix.Process
+
+import qualified Test.DMuCheck.Slave as Slave
+import qualified Test.DMuCheck.Master as Master
+
+import Control.Monad
+
+localHost, localPort :: String
+localHost = "127.0.0.1"
+localPort = "12345"
+
+help :: IO ()
+help = do putStrLn "d-mucheck <number of slaves> <fn> <file> <props..>"
+          putStrLn "E.g."
+          putStrLn "  d-mucheck 4 qsort Examples/QuickCheckTest.hs 'quickCheckResult revProp' 'quickCheckResult modelProp'"
+
+main :: IO ()
+main = do
+  args <- getArgs
+  case args of
+    ("-h":_) -> help
+    (sslaves : fn : file : props) -> process sslaves fn file props
+    _ -> putStrLn "use -h to get help."
+
+process :: String -> String -> String -> [String] -> IO ()
+process sslaves fn file props = do
+  let host = localHost
+      nport = read localPort :: Int
+      nslaves = read sslaves :: Int
+
+  forM_ [show (i + nport) | i <- [1..nslaves]] $ \port_ -> forkProcess $ do
+    Slave.process host port_
+
+  Master.process localHost localPort fn file props
+
diff --git a/src/Master.hs b/src/Master.hs
new file mode 100644
--- /dev/null
+++ b/src/Master.hs
@@ -0,0 +1,22 @@
+module Main where
+import System.Environment (getArgs)
+
+import qualified Test.DMuCheck.Master as Master
+
+localHost, localPort :: String
+localHost = "127.0.0.1"
+localPort = "10501"
+
+help :: IO ()
+help = do putStrLn "d-master <fn> <file> <props..>"
+          putStrLn "E.g."
+          putStrLn "  d-master qsort Examples/QuickCheckTest.hs 'quickCheckResult revProp' 'quickCheckResult modelProp'"
+
+main :: IO ()
+main = do
+  args <- getArgs
+  case args of
+    ("-h":_) -> help
+    (fn : file : props) -> Master.process localHost localPort fn file props
+    _ -> putStrLn "use -h to get help."
+
diff --git a/src/Slave.hs b/src/Slave.hs
new file mode 100644
--- /dev/null
+++ b/src/Slave.hs
@@ -0,0 +1,21 @@
+module Main where
+import System.Environment (getArgs)
+
+import qualified Test.DMuCheck.Slave as Slave
+
+localHost :: String
+localHost = "127.0.0.1"
+
+help :: IO ()
+help = do putStrLn "d-slave <port>"
+          putStrLn "E.g."
+          putStrLn "  d-slave 12345"
+
+main :: IO ()
+main = do
+  args <- getArgs
+  case args of
+    ("-h":_) -> help
+    (port : _args) -> Slave.process localHost port
+    _ -> putStrLn "use -h to get help."
+
