diff --git a/Text/FlowDiagram.hs b/Text/FlowDiagram.hs
--- a/Text/FlowDiagram.hs
+++ b/Text/FlowDiagram.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-|
 Converts flow diagrams to the Graphviz (Dot) files for subsequent rendering
 into nice pictures.
@@ -13,8 +14,10 @@
 import Control.Monad.State (StateT, evalStateT, gets, modify, lift)
 import qualified Data.Map as M (Map, empty, lookup, insert)
 import Data.List (intercalate, unfoldr, splitAt, findIndex)
+#ifndef NATIVEUTF8
 import Prelude hiding (readFile)
 import System.IO.UTF8 (readFile)
+#endif
 import Data.Char (isSpace)
 import Test.QuickCheck
 import Control.Monad (liftM, liftM2, liftM3)
@@ -262,7 +265,6 @@
 
 instance Arbitrary Name where
   arbitrary = liftM Name (listOf' $ elements "abcxyz_банк")
-  coarbitrary = undefined
 
 instance Arbitrary Message where
   -- words.unwords trick is needed to prevent Messages which contain only spaces
@@ -270,7 +272,6 @@
                                                           -- One special case which i decided to hard-code
                                                           , (1, return "foo -> bar")
                                                           ]
-  coarbitrary = undefined
 
 instance Arbitrary Flow where
   arbitrary = frequency [ (10, liftM3 Msg mkName mkName mkMsg)
@@ -279,7 +280,6 @@
     where
       mkName = do Name n <- arbitrary; return n
       mkMsg = do Message m <- arbitrary; return m
-  coarbitrary = undefined
 
 -- Taken from a unreleased version of quickcheck
 -- Just added ' to the names
diff --git a/flow2dot.cabal b/flow2dot.cabal
--- a/flow2dot.cabal
+++ b/flow2dot.cabal
@@ -1,5 +1,5 @@
 Name:    flow2dot
-Version: 0.7
+Version: 0.8
 License: BSD3
 License-File: LICENSE
 Author: Dmitry Astapov <dastapov@gmail.com>
@@ -11,16 +11,30 @@
 Homepage: http://adept.linux.kiev.ua:8080/repos/flow2dot
 Category: Tool
 Stability: beta
-Cabal-Version:   >= 1.2
+Cabal-Version:   >= 1.6
 
 Tested-With:        GHC >=6.10.4
 Build-Type:         Simple
 Extra-Source-Files: README ChangeLog
 
 Library
+  hs-source-dirs: .
+  Extensions: CPP
   Exposed-Modules: Text.FlowDiagram
   Other-Modules:   Text.Dot
-  Build-Depends:   base >=3 && <4, mtl >= 1.0, containers, haskell98, QuickCheck, parsec, utf8-string
+  Build-Depends:   base >=3 && <=5, mtl >= 1.0, containers, haskell98, QuickCheck, parsec, utf8-string
+  if impl(ghc >= 7.0)
+    cpp-options: -DNATIVEUTF8
 
 Executable  flow2dot
+  hs-source-dirs: .
   Main-Is:       flow2dot.hs
+  Extensions: CPP
+  Other-Modules:   Text.Dot
+                   Text.FlowDiagram
+  if impl(ghc >= 7.0)
+    cpp-options: -DNATIVEUTF8
+
+source-repository head
+  type:     darcs
+  location: adept@patch-tag.com:/r/adept/flow2dot
diff --git a/flow2dot.hs b/flow2dot.hs
--- a/flow2dot.hs
+++ b/flow2dot.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 -----------------------------------------------------------------------------
 -- |
 -- Name        :  Flow2Dot
@@ -12,8 +13,10 @@
 module Main where
 
 import Text.FlowDiagram
+#ifndef NATIVEUTF8
 import System.IO.UTF8 (putStrLn)
 import Prelude hiding (putStrLn)
+#endif
 import System (getArgs)
 
 main :: IO ()
