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.7.18
+Version:              2014.4.14
 Build-type:           Simple
 Synopsis:             Hack2 contrib
 Description:          Common middlewares and utilities for Hack2
@@ -16,7 +16,7 @@
 
 library
 
-  build-depends: 
+  build-depends:
                     base >=4 && < 100
                   , cgi
                   , network
@@ -29,12 +29,12 @@
                   , time
                   , air >= 2013.7.18
                   , hack2
-                  , utf8-string
-                  
+                  , text
+
   hs-source-dirs: src/
-  
-  exposed-modules:  
-                    
+
+  exposed-modules:
+
                     Hack2.Contrib.AirBackports
                     Hack2.Contrib.Constants
                     Hack2.Contrib.Middleware.BounceFavicon
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
@@ -1,21 +1,21 @@
 module Hack2.Contrib.AirBackports where
 
-import qualified Codec.Binary.UTF8.String as Codec
 import Data.Time
-import Data.Time.Clock.POSIX
 import System.Directory
 import System.IO
 import System.Locale (defaultTimeLocale)
 import qualified System.IO.Unsafe as Unsafe
 
-import Data.Maybe
-
 import Air.Env hiding (Default, def)
 import Prelude ()
 
+import qualified Data.Text as T
+import qualified Data.Text.Encoding as E
+import qualified Data.ByteString.Char8 as B
+
 b2u, u2b :: String -> String
-b2u = Codec.decodeString
-u2b = Codec.encodeString
+b2u = B.pack > E.decodeUtf8 > T.unpack
+u2b = T.pack > E.encodeUtf8 > B.unpack
 
 
 file_size :: String -> IO Integer
@@ -24,7 +24,6 @@
 file_mtime :: String -> IO UTCTime
 file_mtime = getModificationTime
 
-  
 now :: IO UTCTime
 now = getCurrentTime
 
@@ -39,36 +38,3 @@
 
 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
-  | otherwise           = [xs]
-
-split :: String -> String -> [String]
-split re xs = split_raw re xs .reject empty
-
-split' :: String -> [String]
-split' s = s.lines.reject empty
-
-sub :: String -> String -> String -> String
-sub = subRegexPR
-
-gsub :: String -> String -> String -> String
-gsub = gsubRegexPR
-
-
-type RegexResult = ( String, (String, String) )
-type MatchList   = [ (Int, String) ]
-match :: String -> String -> Maybe (RegexResult, MatchList)
-match = matchRegexPR
-
-strip :: String -> String
-strip s = s.sub "^\\s*" "" .reverse .sub "^\\s*" "" .reverse
-
-empty :: String -> Bool
-empty s = case s.match("\\S") of
- Just _ -> False
- Nothing -> True
--}
