diff --git a/Network/IRC/Bot/BotMonad.hs b/Network/IRC/Bot/BotMonad.hs
--- a/Network/IRC/Bot/BotMonad.hs
+++ b/Network/IRC/Bot/BotMonad.hs
@@ -36,7 +36,7 @@
     , outChan   :: Chan Message
     , logFn     :: Logger
     , botName   :: String
-    , cmdPrefix :: String
+    , cmdPrefix    :: String
     }
   
 newtype BotPartT m a = BotPartT { unBotPartT :: ReaderT BotEnv m a }
diff --git a/Network/IRC/Bot/Commands.hs b/Network/IRC/Bot/Commands.hs
--- a/Network/IRC/Bot/Commands.hs
+++ b/Network/IRC/Bot/Commands.hs
@@ -31,9 +31,9 @@
        
            
 data PrivMsg           
-  = PrivMsg { prefix :: (Maybe Prefix) 
-            , receivers :: [String] 
-            , msg :: String
+  = PrivMsg { prefix     :: (Maybe Prefix) 
+            , receivers  :: [String] 
+            , msg        :: String
             }
       deriving (Eq, Read, Show)
        
@@ -49,7 +49,7 @@
       prefix = msg_prefix  msg
   in case cmd of
       "PRIVMSG" -> Just $ PrivMsg prefix (init params) (last params)
-      _ -> Nothing
+      _         -> Nothing
      
 class ToMessage a where
   toMessage :: a -> Message
diff --git a/Network/IRC/Bot/Core.hs b/Network/IRC/Bot/Core.hs
--- a/Network/IRC/Bot/Core.hs
+++ b/Network/IRC/Bot/Core.hs
@@ -32,25 +32,25 @@
 data BotConf = 
     BotConf
     { channelLogger :: (Maybe (Chan Message -> IO ()))  -- ^ optional channel logging function
-    , logger :: Logger           -- ^ app logging
-    , host   :: HostName         -- ^ irc server to connect 
-    , port   :: PortID           -- ^ irc port to connect to (usually, 'PortNumber 6667')
-    , nick   :: String           -- ^ irc nick
-    , prefix :: String           -- ^ command prefix
-    , user   :: User             -- ^ irc user info
-    , channels :: Set String     -- ^ channel to join
+    , logger        :: Logger           -- ^ app logging
+    , host          :: HostName         -- ^ irc server to connect 
+    , port          :: PortID           -- ^ irc port to connect to (usually, 'PortNumber 6667')
+    , nick          :: String           -- ^ irc nick
+    , commandPrefix :: String           -- ^ command prefix
+    , user          :: User             -- ^ irc user info
+    , channels      :: Set String       -- ^ channel to join
     }
 
 nullBotConf :: BotConf
 nullBotConf =
     BotConf { channelLogger  = Nothing
-            , logger   = stdoutLogger Normal
-            , host     = ""
-            , port     = PortNumber 6667
-            , nick     = ""
-            , prefix   = "#"
-            , user     = nullUser
-            , channels = empty
+            , logger         = stdoutLogger Normal
+            , host           = ""
+            , port           = PortNumber 6667
+            , nick           = ""
+            , commandPrefix  = "#"
+            , user           = nullUser
+            , channels       = empty
             }
 
 -- | connect to irc server and send NICK and USER commands
@@ -66,12 +66,12 @@
                runBotPartT botPart (BotEnv msg outgoingChan logger botName prefix)
 
 ircLoop :: Logger -> String -> String -> Chan Message -> Chan Message -> [BotPartT IO ()] -> IO [ThreadId]
-ircLoop logger botName cmdPrefix incomingChan outgoingChan parts = 
+ircLoop logger botName prefix incomingChan outgoingChan parts = 
     mapM forkPart parts
   where
     forkPart botPart =
       do inChan <- dupChan incomingChan
-         forkIO $ partLoop logger botName cmdPrefix inChan outgoingChan (botPart `mplus` return ())
+         forkIO $ partLoop logger botName prefix inChan outgoingChan (botPart `mplus` return ())
 
 -- reconnect loop is still a bit buggy     
 -- if you try to write multiple lines, and the all fail, reconnect will be called multiple times..
@@ -137,7 +137,7 @@
           -> [BotPartT IO ()] -- ^ bot parts (must include 'pingPart', or equivalent)
           -> IO [ThreadId]    -- ^ 'ThreadId' for all forked handler threads
 simpleBot BotConf{..} parts =
-    simpleBot' channelLogger logger host port nick prefix user parts
+    simpleBot' channelLogger logger host port nick commandPrefix user parts
 
 -- |simpleBot' connects to the server and handles messages using the supplied BotPartTs
 --
diff --git a/Network/IRC/Bot/Types.hs b/Network/IRC/Bot/Types.hs
new file mode 100644
--- /dev/null
+++ b/Network/IRC/Bot/Types.hs
@@ -0,0 +1,38 @@
+{-# LANGUAGE DeriveDataTypeable, RecordWildCards #-}
+module Network.IRC.Bot.Types
+    ( User(..)
+    , nullUser
+    ) where
+
+import Control.Concurrent       (ThreadId, forkIO, threadDelay)
+import Control.Concurrent.Chan  (Chan, dupChan, newChan, readChan, writeChan)
+import Control.Concurrent.MVar  (MVar, modifyMVar_, newMVar, readMVar)
+import Control.Concurrent.QSem  (QSem, newQSem, waitQSem, signalQSem)
+import Control.Exception        (IOException, catch)
+import Control.Monad            (mplus, forever, when)
+import Control.Monad.Trans      (liftIO)
+import Data.Data                (Data, Typeable)
+import Data.Time                (UTCTime, addUTCTime, getCurrentTime)
+import Network                  (HostName, PortID(PortNumber), connectTo)
+import Network.IRC              (Message, decode, encode, joinChan, nick, user)
+import Network.IRC              as I
+import Network.IRC.Bot.Log      (Logger, LogLevel(Normal, Debug), stdoutLogger)
+import Network.IRC.Bot.BotMonad (BotMonad(logM), BotPartT, BotEnv(..), runBotPartT)
+import Prelude                  hiding (catch)
+import System.IO                (BufferMode(LineBuffering), Handle, hClose, hGetLine, hPutStrLn, hSetBuffering)
+
+
+data User = User
+    { username   :: String    -- ^ username on client system
+    , hostname   :: HostName  -- ^ hostname of client system
+    , servername :: HostName  -- ^ irc server client is connected to
+    , realname   :: String    -- ^ client's real name
+    }
+    deriving (Data, Typeable, Eq, Ord, Read, Show)
+
+nullUser :: User
+nullUser = User { username   = ""
+                , hostname   = "."
+                , servername = "."
+                , realname   = ""
+                }
diff --git a/ircbot.cabal b/ircbot.cabal
--- a/ircbot.cabal
+++ b/ircbot.cabal
@@ -1,5 +1,5 @@
 Name:                ircbot
-Version:             0.2.0
+Version:             0.2.1
 Synopsis:            A library for writing irc bots
 Homepage:            http://patch-tag.com/r/stepcut/ircbot
 License:             BSD3
@@ -26,8 +26,10 @@
                        Network.IRC.Bot.Part.NickUser
                        Network.IRC.Bot.Parsec
                        Network.IRC.Bot.PosixLogger
+                       Network.IRC.Bot.Types
   
   Build-depends:  base       >= 4 && <5,
+                  containers == 0.4.*,
                   filepath   >= 1.2 && < 1.4,
                   irc        == 0.5.*,
                   mtl        == 2.0.*,
@@ -36,7 +38,8 @@
                   parsec     == 3.1.*,
                   time       == 1.4.*,
                   unix       >= 2.4 && < 2.6,
-                  random     == 1.0.*
+                  random     == 1.0.*,
+                  stm        == 2.2.*
 
   -- Modules not exported by this package.
   -- Other-modules:       
