diff --git a/Web/Informative.hs b/Web/Informative.hs
--- a/Web/Informative.hs
+++ b/Web/Informative.hs
@@ -87,7 +87,7 @@
 toClassname = filter isAlphaNum . T.unpack
 remCR = filter (/=chr 13)
 
-renderShowArticle :: YesodWikiAuth master => [Entity Wikisugg] -> Bool -> (AuthRoute -> Route master) -> (Route Informative -> Route master) -> AuthResult -> Maybe Html -> [(Int,(Int64,Either Html [[Html]],TextKind))] -> [(Int64,T.Text,UTCTime)] -> T.Text -> HandlerT Informative (HandlerT master IO) Html
+renderShowArticle :: YesodWikiAuth master => [Entity Wikisugg] -> Bool -> (AuthRoute -> Route master) -> (Route Informative -> Route master) -> AuthResult -> Maybe Html -> [(Int,(T.Text,Either Html [[Html]],TextKind))] -> [(T.Text,T.Text,UTCTime)] -> T.Text -> HandlerT Informative (HandlerT master IO) Html
 renderShowArticle suggs loggedIn authR toParent mayEdit mmsg sects edits page = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
@@ -106,22 +106,22 @@
     toWidget $(hamletFile "informative-edit.htm")
     toWidget $(cassiusFile "informative.css")
 
-getArticleIdR :: Int -> WikiHandler Html
+getArticleIdR :: T.Text -> WikiHandler Html
 getArticleIdR pageid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
   (edits,sects',page,suggs) <- lift $ runDB $ do
-    let Right pid = keyFromValues [PersistInt64 $ fromIntegral pageid] :: Either T.Text WikipageId
+    let pid = read $ T.unpack pageid
     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")
+      Nothing -> return ([("/new/",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 k r) -> let [PersistInt64 rid] = keyToValues k in liftM (rid,) $ get $ wikirelSection r
+        sects <- forM rels $ \(Entity k r) -> liftM (T.pack $ show k,) $ 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 k p) -> (let [PersistInt64 pid] = keyToValues k in pid, wikipageEditor p, wikipageTimestamp p)) hs
+    let es = map (\(Entity k p) -> (T.pack $ show k, wikipageEditor p, wikipageTimestamp p)) hs
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
     return (es,sects,page,suggs)
   toParent <- getRouteToParent
@@ -140,12 +140,12 @@
     wp <- selectList [WikipageTitle ==. page, WikipageSegment ==. seg] [Desc WikipageTimestamp, LimitTo 10]
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
     case wp of
-      [] -> return ([], [(-1,Left $ convFmt LaTeX "\\section{404 Not Found} We're sorry, but that article doesn't exist in our database.", Error)],suggs)
+      [] -> return ([], [("/new/",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 k r) -> let [PersistInt64 rid] = keyToValues k in liftM (rid,) $ get $ wikirelSection r
+        sects <- forM rels $ \(Entity k r) -> liftM (T.pack $ show k,) $ get $ wikirelSection r
         let s' = map (\(rid,Just  s) -> (rid,convSect (wikisectionKind s) (wikisectionFormat s) (wikisectionContent s), wikisectionKind s)) sects
-            es = map (\(Entity k p) -> (let [PersistInt64 pid] = keyToValues k in pid, wikipageEditor p, wikipageTimestamp p)) hs
+            es = map (\(Entity k p) -> (T.pack $ show k, wikipageEditor p, wikipageTimestamp p)) hs
         return (es, s',suggs)
   toParent <- getRouteToParent
   mayEdit <- lift $ isAuthorized (toParent $ ArticleR page) True
@@ -174,13 +174,13 @@
         formats = [("Markdown",Markdown),("MediaWiki",MediaWiki),("ReStructuredText",ReStructuredText),("LaTeX",LaTeX),("Textile",Textile),("Source code",Source "" 1),("Plain text",Plain)]
         kinds = map (T.pack . show &&& id) [minBound..maxBound]
 
-getEditR :: Int -> WikiHandler Html
+getEditR :: T.Text -> WikiHandler Html
 getEditR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
   (msect, mprec, kind, fmt, suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
-    rel <- let Right k = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId in get k
+    rel <- get $ read $ T.unpack rid
     case rel of
       Nothing -> return (Nothing, Nothing, Error, Plain, suggs, "none")
       Just rel -> do
@@ -199,13 +199,13 @@
   submitR <- return $ toParent $ EditR rid
   renderEditArticle suggs loggedIn authR toParent submitR mmsg msect kind form page
 
-getInsertR :: Int -> WikiHandler Html
+getInsertR :: T.Text -> WikiHandler Html
 getInsertR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
   (suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
-    rel <- let Right k = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId in get k
+    rel <-  get $ read $ T.unpack rid
     case rel of
       Nothing -> return (suggs, "none")
       Just rel -> do
@@ -224,13 +224,13 @@
   kind <- return Article
   renderEditArticle suggs loggedIn authR toParent submitR mmsg msect kind form page
 
-getPrependR :: Int -> WikiHandler Html
+getPrependR :: T.Text -> WikiHandler Html
 getPrependR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
   (suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
-    rel <- let Right k = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId in get k
+    rel <- get $ read $ T.unpack rid
     case rel of
       Nothing -> return (suggs, "none")
       Just rel -> do
@@ -268,11 +268,11 @@
   kind <- return Article
   renderEditArticle suggs loggedIn authR toParent submitR mmsg msect kind form page
 
-postEditR :: Int -> WikiHandler Html
+postEditR :: T.Text -> WikiHandler Html
 postEditR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
-  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
+  let rid' = read $ T.unpack rid
   (msect, mprec, kind, fmt, suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
     rel <- get rid'
@@ -319,11 +319,11 @@
       form <- lift $ widgetToPageContent widget
       renderEditArticle suggs loggedIn authR toParent submitR mmsg msect kind form page
 
-postInsertR :: Int -> WikiHandler Html
+postInsertR :: T.Text -> WikiHandler Html
 postInsertR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
-  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
+  let rid' = read $ T.unpack rid
   (suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
     rel <- get rid'
@@ -374,11 +374,11 @@
       form <- lift $ widgetToPageContent widget
       renderEditArticle suggs loggedIn authR toParent submitR mmsg msect kind form page 
 
-postPrependR :: Int -> WikiHandler Html
+postPrependR :: T.Text -> WikiHandler Html
 postPrependR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
-  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
+  let rid' = read $ T.unpack rid
   (suggs, page) <- lift $ runDB $ do
     suggs <- selectList [WikisuggSegment ==. seg] [Asc WikisuggIndex]
     rel <- get rid'
@@ -451,7 +451,7 @@
   case (exists,result,action) of
     (False,FormSuccess (SectionData k f lg ln (Textarea c)),"save") -> do
       lift $ runDB $ do
-        Right sid <- insertBy $ Wikisection c (source f lg ln) k
+        sid <- insert $ Wikisection c (source f lg ln) k
         Right pid <- insertBy $ Wikipage page seg user now
         insertBy $ Wikirel pid sid 1
       setMessage $ toHtml ("Page has been created." :: T.Text)
@@ -467,14 +467,14 @@
       form <- lift $ widgetToPageContent widget
       renderEditArticle suggs loggedIn authR toParent submitR mmsg msect kind form page 
 
-postDownR :: Int -> WikiHandler Html
+postDownR :: T.Text -> WikiHandler Html
 postDownR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
   user <- lift getUserName
   now <- liftIO getCurrentTime
   toParent <- getRouteToParent
-  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
+  let rid' = read $ T.unpack rid
   page <- lift $ runDB $ do
     rel <- get rid'
     case rel of
@@ -495,14 +495,14 @@
             return $ wikipageTitle page
   lift $ redirect $ toParent $ ArticleR page
 
-postUpR :: Int -> WikiHandler Html
+postUpR :: T.Text -> WikiHandler Html
 postUpR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
   user <- lift getUserName
   now <- liftIO getCurrentTime
   toParent <- getRouteToParent
-  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
+  let rid' = read $ T.unpack rid
   page <- lift $ runDB $ do
     rel <- get rid'
     case rel of
@@ -523,14 +523,14 @@
             return $ wikipageTitle page
   lift $ redirect $ toParent $ ArticleR page
 
-postDeleteR :: Int -> WikiHandler Html
+postDeleteR :: T.Text -> WikiHandler Html
 postDeleteR rid = do
   seg <- liftM getSegment getYesod
   pref <- liftM getPrefix getYesod
   user <- lift getUserName
   now <- liftIO getCurrentTime
   toParent <- getRouteToParent
-  let Right rid' = keyFromValues [PersistInt64 $ fromIntegral rid] :: Either T.Text WikirelId
+  let rid' = read $ T.unpack rid
   page <- lift $ runDB $ do
     rel <- get rid'
     case rel of
diff --git a/Web/Informative/Data.hs b/Web/Informative/Data.hs
--- a/Web/Informative/Data.hs
+++ b/Web/Informative/Data.hs
@@ -9,13 +9,13 @@
 
 mkYesodSubData "Informative" [parseRoutes|
  /article/#Text ArticleR GET
- /articleid/#Int ArticleIdR GET
- /edit/#Int EditR GET POST
- /insert/#Int InsertR GET POST
- /prepend/#Int PrependR GET POST
- /down/#Int DownR POST
- /up/#Int UpR POST
- /delete/#Int DeleteR POST
+ /articleid/#Text ArticleIdR GET
+ /edit/#Text EditR GET POST
+ /insert/#Text InsertR GET POST
+ /prepend/#Text PrependR GET POST
+ /down/#Text DownR POST
+ /up/#Text UpR POST
+ /delete/#Text DeleteR POST
  /create/#Text CreateR GET POST
 |]
 
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.7
+version:             0.1.0.8
 
 -- A short (one-line) description of the package.
 synopsis:            A yesod subsite serving a wiki.
diff --git a/informative.htm b/informative.htm
--- a/informative.htm
+++ b/informative.htm
@@ -17,9 +17,9 @@
       #{msg}
   $if not (null sects)
     $with (idx, (rid, sect, kind)) <- head sects
-      $if ((mayEdit == Authorized) && (rid >= 0))
+      $if ((mayEdit == Authorized) && (rid /= "/new/"))
         <div .edit>
-          <a href=@{toParent $ PrependR $ fromIntegral rid}>insert
+          <a href=@{toParent $ PrependR rid}>insert
   $forall (idx, (rid, sect, kind)) <- sects
     $case (sect, kind)
       $of (Left c, Article)
@@ -51,22 +51,22 @@
               <tr>
                 $forall c <- cols
                   <td>#{c}
-    $if ((mayEdit == Authorized) && (rid < 0))
+    $if ((mayEdit == Authorized) && (rid == "/new/"))
       <div .edit>
         <a href=@{toParent $ CreateR page}>create
-    $if ((mayEdit == Authorized) && (rid >= 0))
+    $if ((mayEdit == Authorized) && (rid /= "/new/"))
       <div .edit>
         $if idx > 1
-          <form method=post action=@{toParent $ UpR $ fromIntegral rid}>
+          <form method=post action=@{toParent $ UpR  rid}>
             <button .linkbutton>up
         $if idx < length sects
-          <form method=post action=@{toParent $ DownR $ fromIntegral rid}>
+          <form method=post action=@{toParent $ DownR rid}>
             <button .linkbutton>down
         $if length sects > 1
-          <form method=post action=@{toParent $ DeleteR $ fromIntegral rid}>
+          <form method=post action=@{toParent $ DeleteR rid}>
             <button .linkbutton>delete
-        <a href=@{toParent $ InsertR $ fromIntegral rid}>insert
-        <a href=@{toParent $ EditR $ fromIntegral rid}>edit
+        <a href=@{toParent $ InsertR rid}>insert
+        <a href=@{toParent $ EditR rid}>edit
   <div .table>
     <table>
       <thead>
@@ -88,6 +88,6 @@
         $forall (i, editor, stamp) <- tail edits
           <tr>
             <td>
-              <a href=@{toParent $ ArticleIdR $ fromIntegral i}>#{page}
+              <a href=@{toParent $ ArticleIdR i}>#{page}
             <td>#{editor}
             <td>#{formatTime defaultTimeLocale "%Y-%m-%d %H:%M:%S %Z" stamp}
