diff --git a/src/Web/Users/Postgresql.hs b/src/Web/Users/Postgresql.hs
--- a/src/Web/Users/Postgresql.hs
+++ b/src/Web/Users/Postgresql.hs
@@ -109,6 +109,9 @@
            unlessM (doesIndexExist conn "l_email") $
               do _ <- execute_ conn [sql|CREATE INDEX l_email ON login USING btree(email);|]
                  return ()
+           unlessM (doesIndexExist conn "l_lower_email") $
+              do _ <- execute_ conn [sql|CREATE INDEX l_lower_email ON login USING btree(lower(email));|]
+                 return ()
            unlessM (doesIndexExist conn "lt_token_type") $
               do _ <- execute_ conn [sql|CREATE INDEX lt_token_type ON login_token USING btree(token_type);|]
                  return ()
@@ -138,7 +141,7 @@
                    case mLimit of
                      Nothing -> ""
                      Just (start, count) ->
-                         (Query $ BSC.pack $ " LIMIT " ++ show start ++ ", " ++ show count)
+                         (Query $ BSC.pack $ " OFFSET " ++ show start ++ " LIMIT " ++ show count)
                sortPart =
                    Query $ " " <> getOrderBy sortField <> " "
                baseQuery =
@@ -158,7 +161,7 @@
         case u_password user of
           PasswordHash p ->
               do ([(Only emailCounter)], [(Only nameCounter)]) <- (,) <$>
-                     query conn [sql|SELECT COUNT(lid) FROM login WHERE email = ? LIMIT 1;|] (Only $ u_email user)
+                     query conn [sql|SELECT COUNT(lid) FROM login WHERE lower(email) = lower(?) LIMIT 1;|] (Only $ u_email user)
                      <*> query conn [sql|SELECT COUNT(lid) FROM login WHERE username = ? LIMIT 1;|] (Only $ u_name user)
                  let both f (x, y) = (f x, f y)
                      bothCount = both (== 1) (emailCounter :: Int64, nameCounter :: Int64)
@@ -187,7 +190,7 @@
                             when ((counter :: Int64) /= 0) $ throwError UsernameAlreadyExists
                     when (u_email newUser /= u_email origUser) $
                          do [(Only counter)] <-
-                                liftIO $ query conn [sql|SELECT COUNT(lid) FROM login WHERE email = ?;|] (Only $ u_email newUser)
+                                liftIO $ query conn [sql|SELECT COUNT(lid) FROM login WHERE lower(email) = lower(?);|] (Only $ u_email newUser)
                             when ((counter :: Int64) /= 0) $ throwError EmailAlreadyExists
                     liftIO $
                        do _ <-
@@ -265,7 +268,7 @@
 
 createToken :: Connection -> String -> Int64 -> NominalDiffTime -> IO T.Text
 createToken conn tokenType userId timeToLive =
-    do [(Only sessionToken)] <-
+    do [Only sessionToken] <-
            query conn [sql|INSERT INTO login_token (token, token_type, lid, valid_until)
                             VALUES (uuid_generate_v4(), ?, ?, NOW() + '? seconds')
                                    RETURNING token;|]
diff --git a/users-postgresql-simple.cabal b/users-postgresql-simple.cabal
--- a/users-postgresql-simple.cabal
+++ b/users-postgresql-simple.cabal
@@ -1,5 +1,5 @@
 name:                users-postgresql-simple
-version:             0.5.0.1
+version:             0.5.0.2
 synopsis:            A PostgreSQL backend for the users package
 description:         This library is a backend driver using <http://hackage.haskell.org/package/postgresql-simple postgresql-simple> for
                      <http://hackage.haskell.org/package/users the "users" library>.
@@ -20,7 +20,7 @@
 license-file:        LICENSE
 author:              Alexander Thiemann <mail@athiemann.net>
 maintainer:          Alexander Thiemann <mail@athiemann.net>
-copyright:           (c) 2015 Alexander Thiemann
+copyright:           (c) 2015 - 2016 Alexander Thiemann
 category:            Web
 build-type:          Simple
 cabal-version:       >=1.10
