diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,7 @@
+## Version 0.2.1.0
+
+Fix Snap.Snaplet.Auth.Backends.MysqlSimple, courtesty of klasske.
+
 ## Version 0.2
 
 Do not export `withTransaction` as it was broken. It needs a different kind
diff --git a/resources/db/devel.cfg b/resources/db/devel.cfg
--- a/resources/db/devel.cfg
+++ b/resources/db/devel.cfg
@@ -1,8 +1,8 @@
 host = "localhost"
 port = 3306
 user = "mysql"
-pass = ""
-db = "testdb"
+password = ""
+dbname = "testdb"
 
 # Nmuber of distinct connection pools to maintain.  The smallest acceptable
 # value is 1.
diff --git a/snaplet-mysql-simple.cabal b/snaplet-mysql-simple.cabal
--- a/snaplet-mysql-simple.cabal
+++ b/snaplet-mysql-simple.cabal
@@ -1,5 +1,5 @@
 name:           snaplet-mysql-simple
-version:        0.2.0.3
+version:        0.2.1.0
 synopsis:       mysql-simple snaplet for the Snap Framework
 description:    This snaplet contains support for using the MariaDB and MySQL
                 database with a Snap Framework application via the mysql-simple
diff --git a/src/Snap/Snaplet/Auth/Backends/MysqlSimple.hs b/src/Snap/Snaplet/Auth/Backends/MysqlSimple.hs
--- a/src/Snap/Snaplet/Auth/Backends/MysqlSimple.hs
+++ b/src/Snap/Snaplet/Auth/Backends/MysqlSimple.hs
@@ -98,26 +98,21 @@
 
 ------------------------------------------------------------------------------
 -- | Create the user table if it doesn't exist.
--- XXX: Check sql
 createTableIfMissing :: MysqlAuthManager -> IO ()
 createTableIfMissing MysqlAuthManager{..} = do
     withResource pamConnPool $ \conn -> do
-        res <- M.query_ conn $ Query $ T.encodeUtf8 $
-          "select relname from pg_class where relname='"
-          `T.append` schemaless (tblName pamTable) `T.append` "'"
-        when (null (res :: [Only T.Text])) $
-          M.execute_ conn (Query $ T.encodeUtf8 q) >> return ()
+        M.execute_ conn (Query $ T.encodeUtf8 q)
     return ()
   where
-    schemaless = T.reverse . T.takeWhile (/='.') . T.reverse
     q = T.concat
-          [ "CREATE TABLE \""
+          [ "CREATE TABLE IF NOT EXISTS "
           , tblName pamTable
-          , "\" ("
-          , T.intercalate "," (map (fDesc . ($pamTable) . (fst)) colDef)
+          , "("
+          , T.intercalate ", " (map (fDesc . ($pamTable) . (fst)) colDef)
           , ")"
           ]
 
+
 buildUid :: Int -> UserId
 buildUid = UserId . T.pack . show
 
@@ -173,7 +168,7 @@
         !_userResetRequestedAt = convert f18 b18
         !_userRoles            = []
         !_userMeta             = HM.empty
-    convertResults fs vs = convertError fs vs 18
+    convertResults fs vs = convertError fs vs 19
 
 
 querySingle :: (QueryParams q, QueryResults a)
@@ -223,22 +218,22 @@
   =  AuthTable
   {  tblName             = "snap_auth_user"
   ,  colId               = ("uid", "SERIAL PRIMARY KEY")
-  ,  colLogin            = ("login", "VARCHAR UNIQUE NOT NULL")
-  ,  colEmail            = ("email", "VARCHAR")
-  ,  colPassword         = ("password", "VARCHAR")
+  ,  colLogin            = ("login", "VARCHAR(255) UNIQUE NOT NULL")
+  ,  colEmail            = ("email", "VARCHAR(255)")
+  ,  colPassword         = ("password", "VARCHAR(255)")
   ,  colActivatedAt      = ("activated_at", "TIMESTAMP")
   ,  colSuspendedAt      = ("suspended_at", "TIMESTAMP")
-  ,  colRememberToken    = ("remember_token", "VARCHAR")
+  ,  colRememberToken    = ("remember_token", "VARCHAR(255)")
   ,  colLoginCount       = ("login_count", "INTEGER NOT NULL")
   ,  colFailedLoginCount = ("failed_login_count", "INTEGER NOT NULL")
   ,  colLockedOutUntil   = ("locked_out_until", "TIMESTAMP")
   ,  colCurrentLoginAt   = ("current_login_at", "TIMESTAMP")
   ,  colLastLoginAt      = ("last_login_at", "TIMESTAMP")
-  ,  colCurrentLoginIp   = ("current_login_ip", "VARCHAR")
-  ,  colLastLoginIp      = ("last_login_ip", "VARCHAR")
+  ,  colCurrentLoginIp   = ("current_login_ip", "VARCHAR(255)")
+  ,  colLastLoginIp      = ("last_login_ip", "VARCHAR(255)")
   ,  colCreatedAt        = ("created_at", "TIMESTAMP")
   ,  colUpdatedAt        = ("updated_at", "TIMESTAMP")
-  ,  colResetToken       = ("reset_token", "VARCHAR")
+  ,  colResetToken       = ("reset_token", "VARCHAR(255)")
   ,  colResetRequestedAt = ("reset_requested_at", "TIMESTAMP")
   ,  rolesTable          = "user_roles"
   }
@@ -308,10 +303,8 @@
         let (qstr, params) = saveQuery pamTable u
         let q = Query $ T.encodeUtf8 qstr
         let action = withResource pamConnPool $ \conn -> do
-                _      <- M.execute conn q params
-                newUid <- M.insertID conn
-                return . Right $
-                    u{ userId = Just $ buildUid $ fromIntegral newUid}
+                res <- M.query conn q params
+                return $ Right $ fromMaybe u $ listToMaybe res
         E.catch action onFailure
 
 
diff --git a/src/Snap/Snaplet/MysqlSimple.hs b/src/Snap/Snaplet/MysqlSimple.hs
--- a/src/Snap/Snaplet/MysqlSimple.hs
+++ b/src/Snap/Snaplet/MysqlSimple.hs
@@ -132,7 +132,7 @@
 
 ------------------------------------------------------------------------------
 -- | The state for the mysql-simple snaplet. To use it in your app
--- include this in your application state and use pgsInit to initialize it.
+-- include this in your application state and use mysqlInit to initialize it.
 data Mysql = Mysql
     { mysqlPool :: Pool M.Connection
     -- ^ Function for retrieving the connection pool
@@ -159,7 +159,7 @@
 -- | A convenience instance to make it easier to use this snaplet in the
 -- Initializer monad like this:
 --
--- > d <- nestSnaplet "db" db pgsInit
+-- > d <- nestSnaplet "db" db mysqlInit
 -- > count <- liftIO $ runReaderT (execute "INSERT ..." params) d
 instance (MonadCatchIO m) => HasMysql (ReaderT (Snaplet Mysql) m) where
     getMysqlState = asks (^# snapletValue)
