diff --git a/air-extra.cabal b/air-extra.cabal
--- a/air-extra.cabal
+++ b/air-extra.cabal
@@ -1,5 +1,5 @@
 Name:                 air-extra
-Version:              2013.7.18
+Version:              2013.9.15
 Build-type:           Simple
 Synopsis:             air-extra
 Description:          An alternative Haskell Prelude library, extra helpers
@@ -15,8 +15,8 @@
 tested-with:          GHC==7.6.1
 
 library
-      
-  build-depends:  
+
+  build-depends:
                   base >= 4 && < 5
                 , containers
                 , array
@@ -26,14 +26,14 @@
                 , bytestring >= 0.9
                 , regexpr >= 0.3.4
                 , parsec >= 2
-                , utf8-string >= 0.3.3
                 , directory
                 , old-locale
                 , filepath
                 , air >= 2013.7.18
-                
+                , text
+
   hs-source-dirs: src/
-  exposed-modules:  
+  exposed-modules:
                     Air.Extra
                   , Air.Heavy
                   , Air.UTF8
diff --git a/src/Air/Extra.hs b/src/Air/Extra.hs
--- a/src/Air/Extra.hs
+++ b/src/Air/Extra.hs
@@ -2,7 +2,7 @@
 
 import Control.Parallel
 import Data.Char
-import Data.List (transpose, (\\))
+import Data.List ((\\))
 import Data.Maybe
 import Data.Time
 import Data.Time.Clock.POSIX
@@ -10,22 +10,24 @@
 import Numeric
 import Prelude hiding ((.), (^), (>), (<), (/), elem, foldl, (-))
 import System.Directory
-import System.Exit (ExitCode(..))
-import qualified Control.Exception as E
 import System.IO
 import System.Locale (defaultTimeLocale)
-import System.Time
 import Text.RegexPR
-import qualified Codec.Binary.UTF8.String as Codec
-import qualified Data.ByteString.Lazy.Char8 as B
+
 import qualified Data.List as L
 import qualified Prelude as Prelude
 import qualified System.IO.Unsafe as Unsafe
-import Data.List (foldl1, foldl1')
+import Data.List (foldl1')
 
+import qualified Data.Text as T
+import qualified Data.Text.Encoding as E
+import qualified Data.ByteString.Char8 as B
 
+
+
 -- BEGIN !!!!!! partial, use with extra care
 -- backport
+reduce, reduce' :: (a -> a -> a) -> [a] -> a
 reduce = foldl1
 reduce' = foldl1'
 
@@ -55,6 +57,10 @@
 
 
 
+b2u, u2b :: String -> String
+b2u = B.pack > E.decodeUtf8 > T.unpack
+u2b = T.pack > E.encodeUtf8 > B.unpack
+
 -- Date
 date :: Integer -> Int -> Int -> Data.Time.Day
 splash_date :: Data.Time.Day -> (Integer, Int, Int)
@@ -81,6 +87,7 @@
 
 type RegexResult = ( String, (String, String) )
 type MatchList   = [ (Int, String) ]
+
 match :: String -> String -> Maybe (RegexResult, MatchList)
 match = matchRegexPR
 
@@ -91,8 +98,8 @@
 empty s = case s.match("\\S") of
   Just _ -> False
   Nothing -> True
-  
 
+
 -- Integer
 collapse :: (Integral a, Num b) => [a] -> b
 collapse xs = collapse' (xs.reverse.map from_i) (0 :: Int) (0 :: Int) .fromIntegral
@@ -102,7 +109,7 @@
 
 base :: (Integral a, Show a) => a -> a -> String
 base p n = showIntAtBase p intToDigit n ""
-    
+
 -- String
 camel_case, snake_case :: String -> String
 camel_case = split "_" > map capitalize > concat
@@ -152,7 +159,7 @@
   let zoned_time = utcToZonedTime tz timestamp
 
   let time_str = formatTime defaultTimeLocale simple_time_format zoned_time
-  
+
   return time_str
 
 
@@ -173,13 +180,8 @@
 
 -- Text
 filter_comment :: String -> String
-filter_comment = 
+filter_comment =
   lines > map strip > reject null > reject (first > (== Just '#')) > unlines
-
--- UTF8
-b2u, u2b :: String -> String
-b2u = Codec.decodeString
-u2b = Codec.encodeString
 
 
 -- IO
diff --git a/src/Air/UTF8.hs b/src/Air/UTF8.hs
--- a/src/Air/UTF8.hs
+++ b/src/Air/UTF8.hs
@@ -4,7 +4,6 @@
 import Air.Extra as Air
 import Prelude hiding ((.), (^), readFile, writeFile, (>))
 import System.Directory
-import System.IO.UTF8 (readFile, writeFile)
 import qualified Air as Air
 
 split :: String -> String -> [String]
