diff --git a/Nemesis b/Nemesis
--- a/Nemesis
+++ b/Nemesis
@@ -23,5 +23,3 @@
   console ["-isrc", "-Wall"] "src/System/Nemesis/Titan"
 
   titan "Main.hs"
-  
-  titan "Test.hs"
diff --git a/nemesis-titan.cabal b/nemesis-titan.cabal
--- a/nemesis-titan.cabal
+++ b/nemesis-titan.cabal
@@ -1,5 +1,5 @@
 Name:                 nemesis-titan
-Version:              2013.6.13.2
+Version:              2013.6.13.3
 Build-type:           Simple
 Synopsis:             A collection of Nemesis tasks to bootstrap a Haskell project with a focus on continuous integration
 Description:          
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -2,7 +2,6 @@
 
 import Prelude ()
 import Air.Env
-import Air.Extra
 
 import System.Nemesis.Titan
 import Test.Hspec
diff --git a/src/System/Nemesis/Titan.hs b/src/System/Nemesis/Titan.hs
--- a/src/System/Nemesis/Titan.hs
+++ b/src/System/Nemesis/Titan.hs
@@ -1,5 +1,7 @@
 {-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE TemplateHaskell #-}
 
+
 module System.Nemesis.Titan where
   
 import System.Nemesis.Env
@@ -7,7 +9,7 @@
 
 import Air.Env
 import Prelude ()
-import Air.TH (here)
+import Air.TH (here, mkDefault)
 
 import qualified Data.ByteString.Char8 as B
 import qualified Data.UUID as UUID
@@ -20,7 +22,7 @@
 
 import Test.Hspec
 import Text.StringTemplate
-
+import Text.Printf
 
 angel_template :: StringTemplate String
 angel_template = newSTMP - [here|
@@ -83,44 +85,57 @@
       text `shouldSatisfy` (null > not)
       
 
-titan :: String -> Unit
-titan file_name = do
-  let label = file_name.takeBaseName
-  titan_with_label_file_name label file_name
 
-titan_with_label_file_name :: String -> String -> Unit
-titan_with_label_file_name label file_name = titan_with_label_file_name_custom_task label file_name (return ())
+data Config = Config
+  {
+    pid_name :: String
+  , bin_directory :: String
+  , config_directory :: String
+  , haskell_source_directory :: String
+  , label :: String
+  , file_name :: String
+  , ghc_arg_string :: String
+  , ghc_default_arg_string :: String
+  }
+  deriving (Show, Eq)
 
+mkDefault ''Config
 
-titan_with_label_file_name_custom_task :: String -> String -> Unit -> Unit
-titan_with_label_file_name_custom_task label file_name custom_tasks = do
-  namespace label - do
+
+defaultConfig :: Config
+defaultConfig = def
+    {
+      pid_name = "uuid.txt"
+    , bin_directory = ".bin"
+    , config_directory = "config"
+    , haskell_source_directory = "src"
+    , ghc_default_arg_string = "-threaded"
+    }
+
+titan_with_config :: Config -> Unit
+titan_with_config config = do
+  namespace (config.label) - do
     
     let  
-      pid_name = "uuid.txt"
-      bin_directory = ".bin"
-      config_name = "config"
-      config_directory = config_name / label
-      angel_path = config_directory / "Angel.conf"
-      guard_path = config_directory / "Guardfile"
+      _label = config.label
+      config_label_directory = config.config_directory / _label
+      angel_path = config_label_directory / "Angel.conf"
+      guard_path = config_label_directory / "Guardfile"
       
-      pid_directory = bin_directory / label
-      pid_path = pid_directory / pid_name
+      pid_directory = config.bin_directory / _label
+      pid_path = pid_directory / config.pid_name
 
+      haskell_path = config.haskell_source_directory / config.file_name
+      
     desc "Initialize a Titan node"
     task "init" - io - do
-      let
-        haskell_source_directory = "src"
-        haskell_path = haskell_source_directory / file_name
-      
-
-      createDirectoryIfMissing True config_directory
-      createDirectoryIfMissing True haskell_source_directory
+      createDirectoryIfMissing True config_label_directory
+      createDirectoryIfMissing True (config.haskell_source_directory)
       
       let 
-        angel_file_content = render - setAttribute "label" label angel_template
-        guard_file_content = render - setAttribute "label" label guard_template
-        haskell_file_content = render - setAttribute "label" label haskell_template
+        angel_file_content = render - setAttribute "label" _label angel_template
+        guard_file_content = render - setAttribute "label" _label guard_template
+        haskell_file_content = render - setAttribute "label" _label haskell_template
       
       let {
         write_if_not_exist file_path str = do
@@ -132,6 +147,7 @@
               puts - file_path + " already exists!"
               return ()
       }
+      
       write_if_not_exist angel_path angel_file_content 
       write_if_not_exist guard_path guard_file_content 
       write_if_not_exist haskell_path haskell_file_content
@@ -172,7 +188,17 @@
     desc "Compile the binary"
     task "compile" - do
       bin <- get_bin
-      sh - "ghc --make -isrc -threaded src/" + file_name + " -o " + bin
+      let { cmd =
+        printf "ghc --make -i%s %s %s %s -o %s" 
+          (config.haskell_source_directory)
+          (config.ghc_default_arg_string)
+          (config.ghc_arg_string)
+          haskell_path
+          bin
+        }
+      
+      -- puts cmd
+      sh cmd
 
     desc "Start the process"
     task "run" - do
@@ -188,7 +214,14 @@
     task "guard" - do
       sh - "guard --no-bundler-warning -G " + guard_path
   
-    custom_tasks
+
+
+titan :: String -> Unit
+titan _file_name = do
+  let _label = _file_name.takeBaseName
+  titan_with_config defaultConfig {file_name = _file_name, label = _label}
+
+
 
 
 -- Helpers
