diff --git a/Data/Memo/Sqlite.hs b/Data/Memo/Sqlite.hs
--- a/Data/Memo/Sqlite.hs
+++ b/Data/Memo/Sqlite.hs
@@ -3,7 +3,7 @@
 Copyright   :  (c) 2011 Claude Heiland-Allen
 License     :  BSD3
 
-Maintainer  :  claudiusmaximus@goto10.org
+Maintainer  :  claude@mathr.co.uk
 Stability   :  unstable
 Portability :  portable
 
@@ -51,6 +51,9 @@
   * the @data-memocombinators@ package for pure in-memory memoization.
 
 -}
+
+{-# LANGUAGE OverloadedStrings #-}
+
 module Data.Memo.Sqlite
   (
   -- * Database table identifier.
@@ -80,24 +83,24 @@
   , SQLData(..)
   ) where
 
-import Prelude hiding (lookup)
+import Prelude hiding (lookup, all)
 
-import Control.Monad.Instances () -- Functor ((,) a)
-import Data.List (isPrefixOf)
 import System.IO (fixIO)
 
+import Data.Text as T
+
 import Database.SQLite3 -- hackage: direct-sqlite
 
 -- | A valid SQLite3 table name.
-newtype Table = Table String deriving (Eq, Ord, Show)
+newtype Table = Table Text deriving (Eq, Ord, Show)
 
 -- | Construct a table name.
-table :: String -> Maybe Table
-table [] = Nothing
-table s@(c:_)
-  | c `elem` letters &&
+table :: Text -> Maybe Table
+table s
+  | T.null s = Nothing
+  | T.head s `elem` letters &&
     all (`elem` alphaNum) s &&
-    not ("sqlite_" `isPrefixOf` s) = Just (Table $ "\"" ++ s ++ "\"")
+    not ("sqlite_" `isPrefixOf` s) = Just (Table $ "\"" <> s <> "\"")
   | otherwise = Nothing
   where
     letters  = ['a'..'z'] ++ ['A'..'Z']
@@ -119,8 +122,8 @@
 newtype ReadShow t = ReadShow{ unReadShow :: t }
 
 instance (Read t, Show t) => Sqlite (ReadShow t) where
-  toSqlite   (ReadShow t) = SQLText (show t)
-  fromSqlite (SQLText  s) = ReadShow $ read s
+  toSqlite   (ReadShow t) = SQLText (T.pack $ show t)
+  fromSqlite (SQLText  s) = ReadShow $ read (T.unpack s)
 
 toReadShow :: Wrap ReadShow ReadShow k v
 toReadShow f k = ReadShow `fmap` f (unReadShow k)
@@ -134,20 +137,20 @@
 
 type Memo k v = (k -> IO v) -> IO (IO (), k -> IO v)
 type MemoRec k v = ((k -> IO v) -> k -> IO v) -> IO (IO (), k -> IO v)
-type MkMemo k v = FilePath -> Table -> Memo k v
-type MkMemoRec k v = FilePath -> Table -> MemoRec k v
+type MkMemo k v = Text -> Table -> Memo k v
+type MkMemoRec k v = Text -> Table -> MemoRec k v
 
 -- | Memoize a function using an SQLite3 database.
 memo :: (Sqlite k, Sqlite v) => MkMemo k v
 memo file (Table tab) f = do
   db <- open file
   -- create database
-  create <- prepare db $ "CREATE TABLE IF NOT EXISTS " ++ tab ++ " ( k TEXT PRIMARY KEY, v TEXT )"
+  create <- prepare db $ "CREATE TABLE IF NOT EXISTS " <> tab <> " ( k TEXT PRIMARY KEY, v TEXT )"
   _ <- step create
   finalize create
   -- prepare statements
-  lookup <- prepare db $ "SELECT v FROM " ++ tab ++ " WHERE k = ? LIMIT 1"
-  insert <- prepare db $ "INSERT INTO " ++ tab ++ " ( k , v ) VALUES ( ? , ? )"
+  lookup <- prepare db $ "SELECT v FROM " <> tab <> " WHERE k = ? LIMIT 1"
+  insert <- prepare db $ "INSERT INTO " <> tab <> " ( k , v ) VALUES ( ? , ? )"
   let -- clean up database
       cleanup = do
         finalize lookup
diff --git a/examples/fib.hs b/examples/fib.hs
--- a/examples/fib.hs
+++ b/examples/fib.hs
@@ -1,6 +1,6 @@
 import Control.Monad (liftM2)
 import System.Environment (getArgs)
-
+import qualified Data.Text as T
 import Data.Memo.Sqlite (memoRec', readShow, table)
 
 -- | Compute Fibonacci numbers.
@@ -13,9 +13,9 @@
 main :: IO ()
 main = do
   [file, ts, ns] <- getArgs
-  let Just t = table ts
+  let Just t = table (T.pack ts)
       n = read ns
-  (cleanup, fib') <- memoRec' readShow file t fib
+  (cleanup, fib') <- memoRec' readShow (T.pack file) t fib
   fib' n >>= \fn -> putStrLn $ "fib(" ++ show n ++ ") = " ++ show fn
   cleanup
 
diff --git a/memo-sqlite.cabal b/memo-sqlite.cabal
--- a/memo-sqlite.cabal
+++ b/memo-sqlite.cabal
@@ -1,16 +1,29 @@
 Name:                memo-sqlite
-Version:             0.1
+Version:             0.2
 Synopsis:            memoize functions using SQLite3 database
-Homepage:            https://gitorious.org/memo-sqlite
+Homepage:            https://code.mathr.co.uk/memo-sqlite
 License:             BSD3
 License-file:        LICENSE
 Author:              Claude Heiland-Allen
-Maintainer:          claudiusmaximus@goto10.org
+Maintainer:          claude@mathr.co.uk
 Category:            Database
 Build-type:          Simple
 Extra-source-files:  examples/fib.hs
-Cabal-version:       >=1.2
+Cabal-version:       >=1.10
 
 Library
   Exposed-modules:     Data.Memo.Sqlite
-  Build-depends:       base < 5, direct-sqlite >= 1 && < 2
+  Build-depends:       base < 5,
+                       direct-sqlite >= 2.3 && < 2.4,
+                       text >= 1.2 && < 1.3
+  default-language:    Haskell2010
+  other-extensions:    OverloadedStrings
+
+source-repository head
+  type: git
+  location: https://code.mathr.co.uk/memo-sqlite.git
+
+source-repository this
+  type: git
+  location: https://code.mathr.co.uk/memo-sqlite.git
+  tag: memo-sqlite-0.2
