diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,11 @@
+2009.6.25
+---------
+
+### Feature
+
+* windows compatible
+* use mps-light when possible to reduce size
+
 2009.6.9
 --------
 
diff --git a/hack-contrib.cabal b/hack-contrib.cabal
--- a/hack-contrib.cabal
+++ b/hack-contrib.cabal
@@ -1,5 +1,5 @@
 Name:                 hack-contrib
-Version:              2009.6.9
+Version:              2009.6.25
 Build-type:           Simple
 Synopsis:             Hack contrib
 Description:          Hack contrib
@@ -15,7 +15,7 @@
 
 library
   ghc-options: -Wall
-  build-depends: base >=4 && < 5, cgi, network, haskell98, old-locale, old-time, directory, filepath, containers, bytestring, ansi-wl-pprint, data-default >= 0.2, ansi-wl-pprint, unix, time, pureMD5, mps >= 2009.5.13, hack >= 2009.5.19
+  build-depends: base >=4 && < 5, cgi, network, haskell98, old-locale, old-time, directory, filepath, containers, bytestring, ansi-wl-pprint, data-default >= 0.2, ansi-wl-pprint, time, pureMD5, mps >= 2009.6.25, hack >= 2009.5.19
   hs-source-dirs: src/
   exposed-modules:  
                     Hack.Contrib.Utils
diff --git a/src/Hack/Contrib/Middleware/BounceFavicon.hs b/src/Hack/Contrib/Middleware/BounceFavicon.hs
--- a/src/Hack/Contrib/Middleware/BounceFavicon.hs
+++ b/src/Hack/Contrib/Middleware/BounceFavicon.hs
@@ -3,11 +3,11 @@
 module Hack.Contrib.Middleware.BounceFavicon (bounce_favicon) where
 
 import Hack
-import Hack.Contrib.Utils
 import Hack.Contrib.Middleware.NotFound
-
-import MPSUTF8
+import Hack.Contrib.Utils
+import MPS.Light
 import Prelude hiding ((.), (^), (>), head)
+
 
 
 bounce_favicon :: Middleware
diff --git a/src/Hack/Contrib/Middleware/ContentLength.hs b/src/Hack/Contrib/Middleware/ContentLength.hs
--- a/src/Hack/Contrib/Middleware/ContentLength.hs
+++ b/src/Hack/Contrib/Middleware/ContentLength.hs
@@ -4,12 +4,12 @@
 module Hack.Contrib.Middleware.ContentLength (content_length) where
 
 import Hack
-import Hack.Contrib.Utils
-import Hack.Contrib.Response
 import Hack.Contrib.Constants
-
-import MPSUTF8
+import Hack.Contrib.Response
+import Hack.Contrib.Utils
+import MPS.Light
 import Prelude hiding ((.), (^), (>))
+
 
 content_length :: Middleware
 content_length app = \env -> do
diff --git a/src/Hack/Contrib/Middleware/ContentType.hs b/src/Hack/Contrib/Middleware/ContentType.hs
--- a/src/Hack/Contrib/Middleware/ContentType.hs
+++ b/src/Hack/Contrib/Middleware/ContentType.hs
@@ -4,10 +4,9 @@
 module Hack.Contrib.Middleware.ContentType (content_type) where
 
 import Hack
-import Hack.Contrib.Response
 import Hack.Contrib.Constants
-
-import MPSUTF8
+import Hack.Contrib.Response
+import MPS.Light
 import Prelude hiding ((.), (^), (>))
 
 
diff --git a/src/Hack/Contrib/Middleware/ETag.hs b/src/Hack/Contrib/Middleware/ETag.hs
--- a/src/Hack/Contrib/Middleware/ETag.hs
+++ b/src/Hack/Contrib/Middleware/ETag.hs
@@ -3,14 +3,13 @@
 
 module Hack.Contrib.Middleware.ETag (etag) where
 
+import Data.Digest.Pure.MD5
 import Hack
-import Hack.Contrib.Response
 import Hack.Contrib.Constants
-
-import MPSUTF8
+import Hack.Contrib.Response
+import MPS.Light
 import Prelude hiding ((.), (^), (>))
 
-import Data.Digest.Pure.MD5
 
 
 etag :: Middleware
diff --git a/src/Hack/Contrib/Middleware/File.hs b/src/Hack/Contrib/Middleware/File.hs
--- a/src/Hack/Contrib/Middleware/File.hs
+++ b/src/Hack/Contrib/Middleware/File.hs
@@ -3,22 +3,20 @@
 
 module Hack.Contrib.Middleware.File (file) where
 
+import Data.Default
+import Data.List (isInfixOf)
+import Data.Maybe
 import Hack
-import Hack.Contrib.Utils
-import Hack.Contrib.Response
 import Hack.Contrib.Constants
 import Hack.Contrib.Mime
-
-import MPSUTF8
+import Hack.Contrib.Response
+import Hack.Contrib.Utils
+import MPS
 import Prelude hiding ((.), (^), (>), (+), (/), readFile)
-
-import Data.Default
-import Data.Maybe
-import Data.List (isInfixOf)
 import System.Directory
 import System.FilePath
-
 import qualified Data.ByteString.Lazy.Char8 as B
+
 
 file :: Maybe String -> Middleware
 file root _ = \env -> do
diff --git a/src/Hack/Contrib/Middleware/Head.hs b/src/Hack/Contrib/Middleware/Head.hs
--- a/src/Hack/Contrib/Middleware/Head.hs
+++ b/src/Hack/Contrib/Middleware/Head.hs
@@ -1,12 +1,12 @@
 module Hack.Contrib.Middleware.Head (head) where
 
 import Hack
-import Hack.Contrib.Utils
 import Hack.Contrib.Response
-
-import MPSUTF8
+import Hack.Contrib.Utils
+import MPS.Light
 import Prelude hiding ((.), (^), (>), head)
 import qualified Data.ByteString.Lazy.Char8 as B
+
 
 head :: Middleware
 head app = \env -> do
diff --git a/src/Hack/Contrib/Middleware/Hub.hs b/src/Hack/Contrib/Middleware/Hub.hs
--- a/src/Hack/Contrib/Middleware/Hub.hs
+++ b/src/Hack/Contrib/Middleware/Hub.hs
@@ -1,18 +1,21 @@
 {-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE CPP #-}
 
 -- the entire logging module is stolen from
 -- [innate](http://github.com/manveru/innate/tree/master)
 
 module Hack.Contrib.Middleware.Hub where
 
-import MPSUTF8
+import Data.Maybe
+import Data.Time
+import MPS
 import Prelude hiding ((.), (^), (>), (+))
-
+import Text.PrettyPrint.ANSI.Leijen
 import Text.Printf
+
+#ifdef UNIX
 import System.Posix.Process (getProcessID)
-import Data.Maybe
-import Text.PrettyPrint.ANSI.Leijen
-import Data.Time
+#endif
 
 data Severity = 
      Debug
@@ -34,8 +37,16 @@
 hub stream formatter program = \message severity -> 
   do
     time <- now
-    pid <- getProcessID ^ from_i
+    pid <- get_pid
     stream $ formatter severity time pid program message
+
+get_pid :: IO Int
+get_pid =
+#ifdef UNIX
+  getProcessID ^ from_i
+#else
+  return (-1)
+#endif
 
 simple_logger :: (String -> IO ()) -> String -> Logger
 simple_logger = flip hub simple_formatter
diff --git a/src/Hack/Contrib/Middleware/Inspect.hs b/src/Hack/Contrib/Middleware/Inspect.hs
--- a/src/Hack/Contrib/Middleware/Inspect.hs
+++ b/src/Hack/Contrib/Middleware/Inspect.hs
@@ -3,7 +3,7 @@
 module Hack.Contrib.Middleware.Inspect (inspect) where
 
 import Hack
-import MPSUTF8
+import MPS.Light
 import Prelude hiding ((.), (^))
 
 inspect :: Middleware
diff --git a/src/Hack/Contrib/Middleware/Lambda.hs b/src/Hack/Contrib/Middleware/Lambda.hs
--- a/src/Hack/Contrib/Middleware/Lambda.hs
+++ b/src/Hack/Contrib/Middleware/Lambda.hs
@@ -4,16 +4,17 @@
 
 module Hack.Contrib.Middleware.Lambda (lambda) where
 
+import Data.Default
 import Hack
-import Hack.Contrib.Utils
-import Hack.Contrib.Response
 import Hack.Contrib.Constants
-
-import MPSUTF8
+import Hack.Contrib.Response
+import Hack.Contrib.Utils
+import MPS
+import MPS.Heavy
+import MPS.TH
 import Prelude hiding ((.), (^), (>), (+))
-import Data.Default
-
 import qualified Data.ByteString.Lazy.Char8 as B
+
 
 data64 :: String
 data64 = [$here|
diff --git a/src/Hack/Contrib/Middleware/Lucky.hs b/src/Hack/Contrib/Middleware/Lucky.hs
--- a/src/Hack/Contrib/Middleware/Lucky.hs
+++ b/src/Hack/Contrib/Middleware/Lucky.hs
@@ -4,15 +4,15 @@
 
 module Hack.Contrib.Middleware.Lucky (lucky) where
 
+import Data.Default
 import Hack
-import Hack.Contrib.Utils
-import Hack.Contrib.Response
 import Hack.Contrib.Constants
-
-import MPSUTF8
+import Hack.Contrib.Response
+import Hack.Contrib.Utils
+import MPS
+import MPS.Heavy
+import MPS.TH
 import Prelude hiding ((.), (^), (>), (+))
-import Data.Default
-
 import qualified Data.ByteString.Lazy.Char8 as B
 
 lucky :: Middleware
diff --git a/src/Hack/Contrib/Middleware/NotFound.hs b/src/Hack/Contrib/Middleware/NotFound.hs
--- a/src/Hack/Contrib/Middleware/NotFound.hs
+++ b/src/Hack/Contrib/Middleware/NotFound.hs
@@ -4,7 +4,7 @@
 import Hack.Contrib.Response
 import Hack.Contrib.Constants
 
-import MPSUTF8
+import MPS.Light
 import Prelude hiding ((.), (^), (>), (+))
 import Data.Default
 
diff --git a/src/Hack/Contrib/Middleware/RegexpRouter.hs b/src/Hack/Contrib/Middleware/RegexpRouter.hs
--- a/src/Hack/Contrib/Middleware/RegexpRouter.hs
+++ b/src/Hack/Contrib/Middleware/RegexpRouter.hs
@@ -3,13 +3,12 @@
 
 module Hack.Contrib.Middleware.RegexpRouter (regexp_router) where
 
+import Data.Maybe
 import Hack
 import Hack.Contrib.Utils
-
-import MPSUTF8
-import Prelude hiding ((.), (^), (>))
 import List (find)
-import Data.Maybe
+import MPS
+import Prelude hiding ((.), (^), (>))
 
 type RoutePath = (String, Application)
 
diff --git a/src/Hack/Contrib/Middleware/ShowExceptions.hs b/src/Hack/Contrib/Middleware/ShowExceptions.hs
--- a/src/Hack/Contrib/Middleware/ShowExceptions.hs
+++ b/src/Hack/Contrib/Middleware/ShowExceptions.hs
@@ -2,19 +2,16 @@
 
 module Hack.Contrib.Middleware.ShowExceptions (show_exceptions) where
 
+
+import Data.Default
+import Data.Maybe
 import Hack
-import Hack.Contrib.Utils
 import Hack.Contrib.Middleware.Hub
-
-import MPSUTF8
+import Hack.Contrib.Utils
+import MPS.Light
 import Prelude hiding ((.), (^), (>), log)
-
-import Data.Maybe
-import Data.Default
-
 import System.IO  
 import System.IO.Error
-
 import qualified Data.ByteString.Lazy.Char8 as B
 
 program :: String
diff --git a/src/Hack/Contrib/Middleware/ShowStatus.hs b/src/Hack/Contrib/Middleware/ShowStatus.hs
--- a/src/Hack/Contrib/Middleware/ShowStatus.hs
+++ b/src/Hack/Contrib/Middleware/ShowStatus.hs
@@ -12,17 +12,17 @@
 
 module Hack.Contrib.Middleware.ShowStatus (show_status) where
 
+
+import Data.Maybe
 import Hack
-import Hack.Contrib.Utils
 import Hack.Contrib.Constants
 import Hack.Contrib.Request hiding (body)
 import Hack.Contrib.Response
-
-import MPSUTF8
+import Hack.Contrib.Utils
+import MPS
+import MPS.Heavy
+import MPS.TH
 import Prelude hiding ((.), (^), (>), head)
-
-import Data.Maybe
-
 import qualified Data.ByteString.Lazy.Char8 as B
 
 show_status :: Middleware
diff --git a/src/Hack/Contrib/Middleware/SimpleAccessLogger.hs b/src/Hack/Contrib/Middleware/SimpleAccessLogger.hs
--- a/src/Hack/Contrib/Middleware/SimpleAccessLogger.hs
+++ b/src/Hack/Contrib/Middleware/SimpleAccessLogger.hs
@@ -1,13 +1,13 @@
 module Hack.Contrib.Middleware.SimpleAccessLogger (simple_access_logger) where
 
+import Data.Maybe
 import Hack
-import Hack.Contrib.Utils
-import Hack.Contrib.Request
 import Hack.Contrib.Middleware.Hub
-
-import MPSUTF8
+import Hack.Contrib.Request
+import Hack.Contrib.Utils
+import MPS.Light
 import Prelude hiding ((.), (^), (>), log)
-import Data.Maybe
+
 
 program :: String
 program = "SimpleAccessLogger"
diff --git a/src/Hack/Contrib/Middleware/Static.hs b/src/Hack/Contrib/Middleware/Static.hs
--- a/src/Hack/Contrib/Middleware/Static.hs
+++ b/src/Hack/Contrib/Middleware/Static.hs
@@ -6,14 +6,13 @@
 
 module Hack.Contrib.Middleware.Static (static) where
 
+import Data.Maybe
 import Hack
-import Hack.Contrib.Utils
 import Hack.Contrib.Middleware.File (file)
-
-import MPSUTF8
-import Prelude hiding ((.), (^), (>), (+))
-import Data.Maybe
+import Hack.Contrib.Utils
 import List (find, isPrefixOf)
+import MPS.Light
+import Prelude hiding ((.), (^), (>), (+))
 
 static :: Maybe String -> [String] -> Middleware
 static root urls app = \env -> do
diff --git a/src/Hack/Contrib/Middleware/URLMap.hs b/src/Hack/Contrib/Middleware/URLMap.hs
--- a/src/Hack/Contrib/Middleware/URLMap.hs
+++ b/src/Hack/Contrib/Middleware/URLMap.hs
@@ -14,10 +14,10 @@
 
 import Hack
 import Hack.Contrib.Utils
-
-import MPSUTF8
-import Prelude hiding ((.), (^), (>))
 import List (find, isPrefixOf)
+import MPS.Light
+import Prelude hiding ((.), (^), (>))
+
 
 type RoutePath = (String, Application)
 
diff --git a/src/Hack/Contrib/Mime.hs b/src/Hack/Contrib/Mime.hs
--- a/src/Hack/Contrib/Mime.hs
+++ b/src/Hack/Contrib/Mime.hs
@@ -1,8 +1,8 @@
 module Hack.Contrib.Mime where
 
-import qualified Data.Map as M
-import MPSUTF8
+import MPS.Light
 import Prelude hiding ((.))
+import qualified Data.Map as M
 
 lookup_mime_type :: String -> Maybe String
 lookup_mime_type = flip M.lookup mime_types
diff --git a/src/Hack/Contrib/Request.hs b/src/Hack/Contrib/Request.hs
--- a/src/Hack/Contrib/Request.hs
+++ b/src/Hack/Contrib/Request.hs
@@ -2,20 +2,16 @@
 
 module Hack.Contrib.Request where
 
+import Data.ByteString.Lazy.Char8 (ByteString)
+import Data.Maybe
 import Hack hiding (body)
 import Hack.Contrib.Constants
-
-import Prelude hiding ((.), (^), (>), (+))
-import MPSUTF8
 import Hack.Contrib.Utils
-import Data.Maybe
-import Network.CGI.Protocol
+import MPS
 import Network.CGI.Cookie
-import Data.ByteString.Lazy.Char8 (ByteString)
+import Network.CGI.Protocol
+import Prelude hiding ((.), (^), (>), (+))
 import qualified Data.ByteString.Lazy.Char8 as B
-
--- import qualified Happstack.Server.MessageWrap as HM
--- import qualified Happstack.Server.HTTP.Types as HT
 
 body :: Env -> ByteString
 body = hack_input
diff --git a/src/Hack/Contrib/Response.hs b/src/Hack/Contrib/Response.hs
--- a/src/Hack/Contrib/Response.hs
+++ b/src/Hack/Contrib/Response.hs
@@ -2,16 +2,15 @@
 
 module Hack.Contrib.Response where
 
+import Data.ByteString.Lazy.Char8 (ByteString)
+import Data.Maybe
 import Hack
-import Hack.Contrib.Utils
 import Hack.Contrib.Constants
-
-import MPSUTF8
+import Hack.Contrib.Utils
+import MPS.Light
 import Prelude hiding ((.), (^), (>), (+))
-
-import Data.Maybe
-import Data.ByteString.Lazy.Char8 (ByteString)
 import qualified Data.ByteString.Lazy.Char8 as B
+
 
 redirect :: String -> Maybe Int -> Response -> Response
 redirect target code = 
diff --git a/src/Hack/Contrib/Utils.hs b/src/Hack/Contrib/Utils.hs
--- a/src/Hack/Contrib/Utils.hs
+++ b/src/Hack/Contrib/Utils.hs
@@ -3,22 +3,19 @@
 
 module Hack.Contrib.Utils where
 
+import Control.Arrow ((<<<))
+import Data.ByteString.Lazy.Char8 (ByteString)
+import Data.Default
+import Data.List (lookup)
+import Data.Time
 import Hack
 import Hack.Contrib.Constants
-
-import MPSUTF8
-import Prelude hiding ((.), (^), (>), lookup, (+), (/))
-
+import MPS.Light
 import Network.URI hiding (path)
-import Data.Default
-
-import Control.Arrow ((<<<))
-import qualified Data.Map as M
-import Data.Time
-import Data.Maybe
-import Data.List (lookup)
-import Data.ByteString.Lazy.Char8 (ByteString)
+import Prelude hiding ((.), (^), (>), lookup, (+), (/))
+import System.Locale (defaultTimeLocale)
 import qualified Data.ByteString.Lazy.Char8 as B
+import qualified Data.Map as M
 
 empty_app :: Application
 empty_app = return def
@@ -62,8 +59,15 @@
 show_status_message :: Int -> Maybe String
 show_status_message x = status_code.M.lookup x
 
+now :: IO UTCTime
+now = getCurrentTime
+
 httpdate :: UTCTime -> String
 httpdate x = x.format_time "%a, %d %b %Y %X GMT"
+
+
+format_time :: String -> UTCTime -> String
+format_time = formatTime defaultTimeLocale
 
 request_method    :: Env -> RequestMethod
 script_name       :: Env -> String
