diff --git a/Web/Informative.hs b/Web/Informative.hs
--- a/Web/Informative.hs
+++ b/Web/Informative.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell, QuasiQuotes, FlexibleInstances, MultiParamTypeClasses, FlexibleContexts, RankNTypes, TypeFamilies, GADTs, GeneralizedNewtypeDeriving, OverloadedStrings, TupleSections #-}
+{-# LANGUAGE TemplateHaskell, QuasiQuotes, FlexibleInstances, MultiParamTypeClasses, FlexibleContexts, RankNTypes, TypeFamilies, GADTs, GeneralizedNewtypeDeriving, OverloadedStrings, TupleSections, ViewPatterns #-}
 
 module Web.Informative where
 
@@ -10,9 +10,10 @@
 import qualified Data.Text as T
 import Data.Time.Clock
 import Data.Time.Format
+import Database.Persist
 import Database.Persist.Sql
 import GHC.Int
-import System.Locale
+import Data.Time.Locale.Compat
 import Text.Cassius
 import Text.CSV
 import Text.Hamlet
@@ -25,7 +26,7 @@
 import Yesod.Auth
 import Yesod.Form
 
-type WikiHandler a = forall master. (YesodWikiAuth master, YesodPersist master, YesodPersistBackend master ~ SqlPersistT) => HandlerT Informative (HandlerT master IO) a
+type WikiHandler a = forall master. (YesodWikiAuth master, YesodPersist master, YesodPersistBackend master ~ SqlBackend) => HandlerT Informative (HandlerT master IO) a
 
 class (Yesod master, RenderMessage master FormMessage) => YesodWikiAuth master where
   getAuthR :: HandlerT master IO (AuthRoute -> Route master)
@@ -110,17 +111,17 @@
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
   (edits,sects',page,suggs) <- lift $ runDB $ do
-    let pid = Key (PersistInt64 $ fromIntegral pageid) :: WikipageId
+    let Right pid = keyFromValues [PersistInt64 $ fromIntegral pageid] :: Either T.Text WikipageId
     wp <- get pid
     (sects,page) <- case wp of
       Nothing -> return ([(-1,Left $ convFmt LaTeX "\\section{404 Not Found} We're sorry, but that article doesn't exist in our database.", Error)],"none")
       Just p -> do
         rels <- selectList [WikirelPage ==. pid] [Asc WikirelIndex]
-        sects <- forM rels $ \(Entity (Key (PersistInt64 rid)) r) -> liftM (rid,) $ get $ wikirelSection r
+        sects <- forM rels $ \(Entity k r) -> let [PersistInt64 rid] = keyToValues k in liftM (rid,) $ get $ wikirelSection r
         let s' = map (\(rid,Just  s) -> (rid,convSect (wikisectionKind s) (wikisectionFormat s) (wikisectionContent s), wikisectionKind s)) sects
         return (s', wikipageTitle p)
     hs <- selectList [WikipageTitle ==. page, WikipageSegment ==. seg] [Desc WikipageTimestamp, LimitTo 10]
-    let es = map (\(Entity (Key (PersistInt64 pid)) p) -> (pid, wikipageEditor p, wikipageTimestamp p)) hs
+    let es = map (\(Entity k p) -> (let [PersistInt64 pid] = keyToValues k in pid, wikipageEditor p, wikipageTimestamp p)) hs
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
     return (es,sects,page,suggs)
   toParent <- getRouteToParent
@@ -142,9 +143,9 @@
       [] -> return ([], [(-1,Left $ convFmt LaTeX "\\section{404 Not Found} We're sorry, but that article doesn't exist in our database.", Error)],suggs)
       hs@((Entity pid p):_) -> do
         rels <- selectList [WikirelPage ==. pid] [Asc WikirelIndex]
-        sects <- forM rels $ \(Entity (Key (PersistInt64 rid)) r) -> liftM (rid,) $ get $ wikirelSection r
+        sects <- forM rels $ \(Entity k r) -> let [PersistInt64 rid] = keyToValues k in liftM (rid,) $ get $ wikirelSection r
         let s' = map (\(rid,Just  s) -> (rid,convSect (wikisectionKind s) (wikisectionFormat s) (wikisectionContent s), wikisectionKind s)) sects
-            es = map (\(Entity (Key (PersistInt64 pid)) p) -> (pid, wikipageEditor p, wikipageTimestamp p)) hs
+            es = map (\(Entity k p) -> (let [PersistInt64 pid] = keyToValues k in pid, wikipageEditor p, wikipageTimestamp p)) hs
         return (es, s',suggs)
   toParent <- getRouteToParent
   mayEdit <- lift $ isAuthorized (toParent $ ArticleR page) True
@@ -179,7 +180,7 @@
   pref <- liftM getPrefix getYesod
   (msect, mprec, kind, fmt, suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
-    rel <- get (Key (PersistInt64 $ fromIntegral rid) :: WikirelId)
+    rel <- let Right k = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId in get k
     case rel of
       Nothing -> return (Nothing, Nothing, Error, Plain, suggs, "none")
       Just rel -> do
@@ -204,7 +205,7 @@
   pref <- liftM getPrefix getYesod
   (suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
-    rel <- get (Key (PersistInt64 $ fromIntegral rid) :: WikirelId)
+    rel <- let Right k = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId in get k
     case rel of
       Nothing -> return (suggs, "none")
       Just rel -> do
@@ -229,7 +230,7 @@
   pref <- liftM getPrefix getYesod
   (suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
-    rel <- get (Key (PersistInt64 $ fromIntegral rid) :: WikirelId)
+    rel <- let Right k = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId in get k
     case rel of
       Nothing -> return (suggs, "none")
       Just rel -> do
@@ -271,7 +272,7 @@
 postEditR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
-  let rid' = Key (PersistInt64 $ fromIntegral rid) :: WikirelId
+  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
   (msect, mprec, kind, fmt, suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
     rel <- get rid'
@@ -322,7 +323,7 @@
 postInsertR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
-  let rid' = Key (PersistInt64 $ fromIntegral rid) :: WikirelId
+  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
   (suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
     rel <- get rid'
@@ -377,7 +378,7 @@
 postPrependR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
-  let rid' = Key (PersistInt64 $ fromIntegral rid) :: WikirelId
+  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
   (suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
     rel <- get rid'
@@ -473,7 +474,7 @@
   user <- lift getUserName
   now <- liftIO getCurrentTime
   toParent <- getRouteToParent
-  let rid' = Key (PersistInt64 $ fromIntegral rid) :: WikirelId
+  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
   page <- lift $ runDB $ do
     rel <- get rid'
     case rel of
@@ -501,7 +502,7 @@
   user <- lift getUserName
   now <- liftIO getCurrentTime
   toParent <- getRouteToParent
-  let rid' = Key (PersistInt64 $ fromIntegral rid) :: WikirelId
+  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
   page <- lift $ runDB $ do
     rel <- get rid'
     case rel of
@@ -529,7 +530,7 @@
   user <- lift getUserName
   now <- liftIO getCurrentTime
   toParent <- getRouteToParent
-  let rid' = Key (PersistInt64 $ fromIntegral rid) :: WikirelId
+  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
   page <- lift $ runDB $ do
     rel <- get rid'
     case rel of
@@ -546,5 +547,5 @@
             return $ wikipageTitle page
   lift $ redirect $ toParent $ ArticleR page
 
-instance (YesodWikiAuth master, YesodPersist master, YesodPersistBackend master ~ SqlPersistT) => YesodSubDispatch Informative (HandlerT master IO) where
+instance (YesodWikiAuth master, YesodPersist master, YesodPersistBackend master ~ SqlBackend) => YesodSubDispatch Informative (HandlerT master IO) where
   yesodSubDispatch = $(mkYesodSubDispatch resourcesInformative)
diff --git a/Web/Informative/Data.hs b/Web/Informative/Data.hs
--- a/Web/Informative/Data.hs
+++ b/Web/Informative/Data.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell, QuasiQuotes, TypeFamilies #-}
+{-# LANGUAGE TemplateHaskell, QuasiQuotes, TypeFamilies, ViewPatterns, OverloadedStrings #-}
 
 module Web.Informative.Data where
 
diff --git a/informative-test.hs b/informative-test.hs
--- a/informative-test.hs
+++ b/informative-test.hs
@@ -36,7 +36,7 @@
   renderMessage _ _ = defaultFormMessage
 
 instance YesodPersist Master where
-  type YesodPersistBackend Master = SqlPersistT
+  type YesodPersistBackend Master = SqlBackend
   runDB action = do
     pool <- liftM getWikiPool getYesod
     runSqlPool action pool
diff --git a/informative.cabal b/informative.cabal
--- a/informative.cabal
+++ b/informative.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.1.0.5
+version:             0.1.0.7
 
 -- A short (one-line) description of the package.
 synopsis:            A yesod subsite serving a wiki.
@@ -59,7 +59,7 @@
   -- other-extensions:    
   
   -- Other library packages from which modules are imported.
-  build-depends:       base >=4.6 && <4.8, yesod >=1.2 && <1.3, text >=1.1 && <1.2, persistent-postgresql >=1.3 && <1.4, monad-logger >=0.3 && <0.4, persistent >=1.3 && <1.4, pandoc >=1.10, shakespeare >=2.0 && <2.1, time >=1.4 && <1.5, old-locale >= 1.0, csv >=0.1 && <0.2, yesod-auth >=1.3 && <1.4, http-conduit >=2.1 && <2.2, yesod-core >=1.2 && <1.3, yesod-form >=1.3 && <1.4, highlighting-kate >=0.5 && <0.6
+  build-depends:       base >=4.6 && <4.9, yesod >=1.2 && <1.5, text >=1.1 && <1.4, persistent-postgresql >=2.1 && <2.2, monad-logger >=0.3 && <0.4, persistent >=2.1 && <2.2, pandoc >=1.10, shakespeare >=2.0 && <2.1, time >=1.4 && <1.6, csv >=0.1 && <0.2, yesod-auth >=1.3 && <1.5, http-conduit >=2.1 && <2.2, yesod-core >=1.2 && <1.5, yesod-form >=1.3 && <1.5, highlighting-kate >=0.5 && <0.6, time-locale-compat >= 0.1 && < 0.2
   
   -- Directories containing source files.
   -- hs-source-dirs:      
@@ -68,6 +68,6 @@
   default-language:    Haskell2010
   
 executable informative-test
-  build-depends:       base >=4.6 && <4.8, yesod >=1.2 && <1.3, text >=1.1 && <1.2, persistent-postgresql >=1.3 && <1.4, monad-logger >=0.3 && <0.4, persistent >=1.3 && <1.4, pandoc >=1.10, shakespeare >=2.0 && <2.1, time >=1.4 && <1.5, old-locale >= 1.0, csv >=0.1 && <0.2, yesod-auth >=1.3 && <1.4, http-conduit >=2.1 && <2.2, yesod-core >=1.2 && <1.3, yesod-form >=1.3 && <1.4, highlighting-kate >=0.5 && <0.6
+  build-depends:       base >=4.6 && <4.9, yesod >=1.2 && <1.5, text >=1.1 && <1.4, persistent-postgresql >=2.1 && <2.2, monad-logger >=0.3 && <0.4, persistent >=2.1 && <2.2, pandoc >=1.10, shakespeare >=2.0 && <2.1, time >=1.4 && <1.6, csv >=0.1 && <0.2, yesod-auth >=1.3 && <1.5, http-conduit >=2.1 && <2.2, yesod-core >=1.2 && <1.5, yesod-form >=1.3 && <1.5, highlighting-kate >=0.5 && <0.6, time-locale-compat >= 0.1 && < 0.2
   main-is:             informative-test.hs
   default-language:    Haskell2010
