diff --git a/hack2-contrib.cabal b/hack2-contrib.cabal
--- a/hack2-contrib.cabal
+++ b/hack2-contrib.cabal
@@ -1,5 +1,5 @@
 Name:                 hack2-contrib
-Version:              2013.6.15.1
+Version:              2013.6.16
 Build-type:           Simple
 Synopsis:             Hack2 contrib
 Description:          Common middlewares and utilities for Hack2
@@ -21,7 +21,6 @@
                   , cgi
                   , network
                   , old-locale
-                  , old-time
                   , directory
                   , filepath
                   , containers
@@ -31,15 +30,15 @@
                   , air
                   , hack2
                   , utf8-string
-                  , regexpr
-                  , air-extra
                   
   hs-source-dirs: src/
   
   exposed-modules:  
                     
+                    Hack2.Contrib.AirBackports
                     Hack2.Contrib.Constants
                     Hack2.Contrib.Middleware.BounceFavicon
+                    Hack2.Contrib.Middleware.Cascade
                     Hack2.Contrib.Middleware.Censor
                     Hack2.Contrib.Middleware.Config
                     Hack2.Contrib.Middleware.ContentLength
@@ -47,24 +46,19 @@
                     Hack2.Contrib.Middleware.Debug
                     Hack2.Contrib.Middleware.File
                     Hack2.Contrib.Middleware.Head
+                    Hack2.Contrib.Middleware.IOConfig
                     Hack2.Contrib.Middleware.Inspect
                     Hack2.Contrib.Middleware.NotFound
-                    Hack2.Contrib.Middleware.RegexpRouter
-                    -- Hack2.Contrib.Middleware.ShowExceptions
                     Hack2.Contrib.Middleware.SimpleAccessLogger
-                    -- Hack2.Contrib.Middleware.Hub
                     Hack2.Contrib.Middleware.Static
                     Hack2.Contrib.Middleware.URLMap
-                    Hack2.Contrib.Middleware.IOConfig
                     Hack2.Contrib.Middleware.UserMime
-                    -- Hack2.Contrib.Middleware.UTF8Body
-                    Hack2.Contrib.Middleware.Cascade
                     Hack2.Contrib.Middleware.XForwardedForToRemoteHost
                     Hack2.Contrib.Mime
                     Hack2.Contrib.Request
                     Hack2.Contrib.Response
                     Hack2.Contrib.Utils
-                    Hack2.Contrib.AirBackports
+
 
 
 
diff --git a/src/Hack2/Contrib/AirBackports.hs b/src/Hack2/Contrib/AirBackports.hs
--- a/src/Hack2/Contrib/AirBackports.hs
+++ b/src/Hack2/Contrib/AirBackports.hs
@@ -6,9 +6,8 @@
 import System.Directory
 import System.IO
 import System.Locale (defaultTimeLocale)
-import System.Time
 import qualified System.IO.Unsafe as Unsafe
-import Text.RegexPR
+
 import Data.Maybe
 
 import Air.Env hiding (Default, def)
@@ -41,7 +40,7 @@
 parse_time :: String -> String -> UTCTime
 parse_time = readTime defaultTimeLocale
 
-
+{-
 split_raw :: String -> String -> [String]
 split_raw re xs
   | xs.match re .isJust = splitRegexPR re xs
@@ -70,6 +69,6 @@
 
 empty :: String -> Bool
 empty s = case s.match("\\S") of
-  Just _ -> False
-  Nothing -> True
-  
+ Just _ -> False
+ Nothing -> True
+-}
diff --git a/src/Hack2/Contrib/Middleware/RegexpRouter.hs b/src/Hack2/Contrib/Middleware/RegexpRouter.hs
deleted file mode 100644
--- a/src/Hack2/Contrib/Middleware/RegexpRouter.hs
+++ /dev/null
@@ -1,23 +0,0 @@
--- | matching a list of regexp agains a path_info, if matched, consponding app
---   is used, otherwise, pass the env down to lower middleware
-
-module Hack2.Contrib.Middleware.RegexpRouter (regexp_router) where
-
-import Data.Maybe
-import Hack2
-import Hack2.Contrib.Utils
-import Hack2.Contrib.AirBackports
-import Data.List (find)
-import Air
-import Prelude hiding ((.), (^), (>), (-))
-import qualified Data.ByteString.Char8 as B
-
-type RoutePath = (String, Application)
-
-regexp_router :: [RoutePath] -> Middleware
-regexp_router h app = \env ->
-  let path = env.path_info.B.unpack
-  in
-  case h.find (fst > flip match path > isJust) of
-    Nothing -> app env
-    Just (_, found_app) -> found_app env
diff --git a/src/Hack2/Contrib/Middleware/Static.hs b/src/Hack2/Contrib/Middleware/Static.hs
--- a/src/Hack2/Contrib/Middleware/Static.hs
+++ b/src/Hack2/Contrib/Middleware/Static.hs
@@ -17,7 +17,7 @@
 import Prelude hiding ((.), (^), (>), (+))
 import qualified Data.ByteString.Char8 as B
 import Data.ByteString.Char8 (ByteString)
-import Air.Extra (u2b)
+import Hack2.Contrib.AirBackports (u2b)
 
 static :: Maybe ByteString -> [ByteString] -> Middleware
 static root urls app = \env -> do
diff --git a/src/Hack2/Contrib/Request.hs b/src/Hack2/Contrib/Request.hs
--- a/src/Hack2/Contrib/Request.hs
+++ b/src/Hack2/Contrib/Request.hs
@@ -14,6 +14,8 @@
 import Prelude ()
 import qualified Data.ByteString.Char8 as B
 import Hack2.Contrib.AirBackports
+import Data.List (all)
+import Data.Char (isSpace)
 
 
 input_bytestring :: Env -> IO ByteString
@@ -31,12 +33,14 @@
 content_type :: Env -> ByteString
 content_type env = env.httpHeaders.get _ContentType .fromMaybe ""
 
+{-
 media_type :: Env -> ByteString
 media_type env = case env.content_type.B.unpack.split "\\s*[;,]\\s*" of
   [] -> ""
   x:_ -> x.lower.B.pack
 
 
+
 media_type_params :: Env -> [(ByteString, ByteString)]
 media_type_params env
   | env.content_type.B.unpack.empty = []
@@ -52,16 +56,18 @@
         .map_fst (lower > B.pack)
         .map_snd (B.pack)
 
+
 content_charset :: Env -> ByteString
 content_charset env = env.media_type_params.lookup "charset" .fromMaybe ""
+-}
 
 host :: Env -> ByteString
-host env = env.httpHeaders.get _Host .fromMaybe (env.server_name) .B.unpack.gsub ":\\d+\\z" "" .B.pack
+host env = env.httpHeaders.get _Host .fromMaybe (env.server_name) .as_string (takeWhile (is_not ':'))
 
 
 params :: Env -> [(ByteString, ByteString)]
 params env =
-  if env.query_string.B.unpack.empty
+  if env.query_string.B.unpack.all isSpace
     then []
     else env.query_string.B.unpack.formDecode.map_both B.pack
 
@@ -71,7 +77,7 @@
   return - 
     env
       .httpHeaders
-      .map_fst (B.unpack > upper > gsub "-" "_") -- cgi env use all cap letters
+      .map_fst (B.unpack > upper > map (\x -> if x == '-' then '_' else x)) -- cgi env use all cap letters
       .map_snd B.unpack
       .(("REQUEST_METHOD", env.request_method.show) : ) -- for cgi request
       .flip decodeInput (_body.s2l)
@@ -96,7 +102,7 @@
 
 fullpath :: Env -> ByteString
 fullpath env = 
-  if env.query_string.B.unpack.empty 
+  if env.query_string.B.unpack.all isSpace 
     then env.path 
     else env.path + "?" + env.query_string
 
