diff --git a/Elm.cabal b/Elm.cabal
--- a/Elm.cabal
+++ b/Elm.cabal
@@ -1,5 +1,5 @@
 Name:                Elm
-Version:             0.9
+Version:             0.9.0.1
 Synopsis:            The Elm language module.
 Description:         Elm aims to make client-side web-development more pleasant.
                      It is a statically/strongly typed, functional reactive
@@ -18,7 +18,7 @@
 
 Category:            Compiler, Language
 
-Build-type:          Custom
+Build-type:          Simple
 
 Extra-source-files:  changelog.txt
 Data-dir:            data
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,165 +1,2 @@
 import Distribution.Simple
-import Distribution.Simple.LocalBuildInfo
-import Distribution.Simple.Setup
-import Distribution.PackageDescription
-
-import System.Cmd
-import System.Directory
-import System.FilePath
-import System.IO
-import System.Process
-
-import Control.Monad
-import qualified Data.Binary as Binary
-import qualified Data.ByteString.Lazy as BS
-
--- Part 1
--- ------
--- Add a build callout
--- We need to build elm-doc and run it because that generates the file "docs.json"
--- needs by Libraries.hs which is part of the elm library and executable
--- Unfort. there seems to be no way to tell cabal that:
---   (a) elm-doc generates docs.json, and
---   (b) elm (library) depends on docs.json
--- Therefore, we either use make instead (or a script), or hack around in cabal
-
--- Part 2
--- ------
--- Add a post-build callout.
--- We need to build the runtime.js after we've built elm (because we use elm to generate some of the JavaScript),
--- but before cabal does the install file copy step
-
--- Assumptions
--- Elm.cabal expects the generated files to end up in dist/data
--- git won't look in dist + cabal will clean it
-rtsDir :: LocalBuildInfo -> FilePath
-rtsDir lbi = "data"
-
-tempDir :: LocalBuildInfo -> FilePath
-tempDir lbi = "temp"
-
--- The runtime is called:
-rts :: LocalBuildInfo -> FilePath
-rts lbi = rtsDir lbi </> "elm-runtime.js"
-
--- The interfaces for the Standard Libraries live in:
-interfaces :: LocalBuildInfo -> FilePath
-interfaces lbi = rtsDir lbi </> "interfaces.data"
-
--- buildDir with LocalBuildInfo points to "dist/build" (usually)
-elm lbi = buildDir lbi </> "elm" </> "elm"
-
--- Care!  This appears to be based on an unstable API
--- See: http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple.html#2
-
-
-main :: IO ()
-main = defaultMainWithHooks simpleUserHooks { postBuild = myPostBuild }
-
-
--- Build
-
--- note(1): We use to include docs.json directly into LoadLibraries at compile time
--- If docs.json is used in other (template) haskell files, they should be copied
--- and compiled in a separate directory (eg, dist/copiedSrc).
--- This is to make sure they are re-compiled on docs.json changes.
--- Copying is a better solution than 'touch'ing the source files
--- (touch is non-portable and confusing wrt RCS).
-
--- In the PackageDescription, the list of stuff to build is held in library
--- (in a Maybe) and the executables list.  We want a PackageDescription that
--- only mentions the executable 'name'
-filterExe :: String -> PackageDescription -> PackageDescription
-filterExe name pd = pd {
-    library = Nothing,
-    executables = filter (\x -> (exeName x == name)) (executables pd)
-    }
-
--- It's not enough to fix the PackageDescription, we also have to fix the
--- LocalBuildInfo. This includes the component build order (data ComponentName)
--- which is horribly internal.
-filterLBI :: String -> LocalBuildInfo -> LocalBuildInfo
-filterLBI name lbi = lbi {
-    libraryConfig = Nothing,
-    compBuildOrder = [CExeName name],
-    executableConfigs = filter (\a -> (fst a == name)) (executableConfigs lbi)
-    }
-
-
--- Post Build
-
-myPostBuild :: Args -> BuildFlags -> PackageDescription -> LocalBuildInfo -> IO ()
-myPostBuild as bfs pd lbi = do
-    putStrLn "Custom build step: compiling standard libraries"
-    (elmos, elmis) <- compileLibraries lbi
-    putStrLn "Custom build step: build interfaces.data"
-    buildInterfaces lbi elmis
-    putStrLn "Custom build step: build elm-runtime.js"
-    buildRuntime lbi elmos
-    removeDirectoryRecursive (tempDir lbi)
-    postBuild simpleUserHooks as bfs pd lbi
-
-
-compileLibraries lbi = do
-  let temp = tempDir lbi                    -- temp
-      rts  = rtsDir  lbi                    -- data
-  createDirectoryIfMissing True temp
-  createDirectoryIfMissing True rts
-  out_c <- canonicalizePath temp            -- temp (root folder)
-  elm_c <- canonicalizePath (elm lbi)       -- dist/build/elm/elm
-  rtd_c <- canonicalizePath rts             -- data
-
-  let make file = do
-        -- replace 'system' call with 'runProcess' which handles args better
-        -- and allows env variable "Elm_datadir" which is used by LoadLibraries
-        -- to find docs.json
-        let args = [ "--only-js", "--make", "--no-prelude"
-                   , "--cache-dir="++out_c, "--build-dir="++out_c, file ]
-            arg = Just [("Elm_datadir", rtd_c)]
-        handle <- runProcess elm_c args Nothing arg Nothing Nothing Nothing
-        exitCode <- waitForProcess handle
-        return ( out_c </> replaceExtension file "elmo"
-               , out_c </> replaceExtension file "elmi")
-
-  setCurrentDirectory "libraries"
-  print =<< getCurrentDirectory
-  files <- getFiles ".elm" "."
-  files <- unzip `fmap` mapM make files
-  setCurrentDirectory ".."
-  return files
-
-buildInterfaces :: LocalBuildInfo -> [FilePath] -> IO ()
-buildInterfaces lbi elmis = do
-  createDirectoryIfMissing True (rtsDir lbi)
-  let ifaces = interfaces lbi
-  ifaceHandle <- openBinaryFile ifaces WriteMode
-  BS.hPut ifaceHandle (Binary.encode (length elmis))
-  let append file = do
-        handle <- openBinaryFile file ReadMode
-        bits <- hGetContents handle
-        length bits `seq` hPutStr ifaceHandle bits
-        hClose handle
-  mapM_ append elmis
-  hClose ifaceHandle
-
-buildRuntime :: LocalBuildInfo -> [FilePath] -> IO ()
-buildRuntime lbi elmos = do
-  createDirectoryIfMissing True (rtsDir lbi)
-  writeFile (rts lbi) "Elm = {}; Elm.Native = {}; Elm.Native.Graphics = {};\n\
-                      \Elm.Graphics = {}; ElmRuntime = {}; ElmRuntime.Render = {};\n"
-  mapM_ (appendJS lbi) =<< getFiles ".js" "libraries"
-  mapM_ (appendJS lbi) elmos
-  mapM_ (appendJS lbi) =<< getFiles ".js" "runtime"
-
-getFiles ext dir = do
-  contents <- map (dir </>) `fmap` getDirectoryContents dir
-  let files = filter (\f -> takeExtension f == ext) contents
-      dirs  = filter (not . hasExtension) contents
-  filess <- mapM (getFiles ext) dirs
-  return (files ++ concat filess)
-
-appendJS lbi file = do
-  putStrLn (dropExtension file)
-  str <- readFile file
-  length str `seq` return ()
-  appendFile (rts lbi) str
+main = defaultMain
