diff --git a/hasqlator-mysql.cabal b/hasqlator-mysql.cabal
--- a/hasqlator-mysql.cabal
+++ b/hasqlator-mysql.cabal
@@ -1,5 +1,5 @@
 Name:		hasqlator-mysql
-Version: 	0.0.9
+Version: 	0.1.0
 Synopsis:	composable SQL generation
 Category: 	Database
 Copyright: 	Kristof Bastiaensen (2020)
@@ -44,7 +44,7 @@
                  template-haskell,
                  aeson,
                  pretty-simple,
-                 optics-core >= 0.4 && < 0.5
+                 optics-core >= 0.3 && < 0.5
   hs-source-dirs:
     src                 
   Exposed-Modules:
diff --git a/src/Database/MySQL/Hasqlator/Typed/Schema.hs b/src/Database/MySQL/Hasqlator/Typed/Schema.hs
--- a/src/Database/MySQL/Hasqlator/Typed/Schema.hs
+++ b/src/Database/MySQL/Hasqlator/Typed/Schema.hs
@@ -9,7 +9,7 @@
   (TableInfo(..), ColumnInfo(..), fetchTableInfo, Sign(..), ColumnType(..),
    pprTableInfo, Properties(..), defaultProperties, makeFields,
    smartUpcase, smartDowncase,
-   makeRecords, makeSelectors, makeInsertors) where
+   makeRecords, makeSelectors, makeInsertors, makeUpdators) where
 import Database.MySQL.Hasqlator
 import qualified Database.MySQL.Hasqlator.Typed as T
 import Database.MySQL.Base(MySQLConn)
@@ -247,6 +247,7 @@
   , includeSchema :: Bool
   , insertorTypeModifier :: TableInfo -> String
   , insertorNameModifier :: TableInfo -> String
+  , updatorNameModifier :: TableInfo -> String
   , selectorNameModifier :: TableInfo -> String
   , fieldsQualifier :: String
   , insertorFieldModifier :: ColumnInfo -> String
@@ -283,12 +284,15 @@
          (if smartDowncase n `elem` reserved then "_" else mempty) <> "_tbl"
   , classNameModifier = \n -> "Has_" <> n <> "_field"
   , includeSchema = True
+  , insertorNameModifier = \TableInfo{tableName} ->
+      let n = Text.unpack tableName
+      in smartDowncase (removeUnderscore n) <> "Insertor"
   , insertorTypeModifier = \TableInfo{tableName} ->
       let n = Text.unpack tableName
       in removeUnderscore (smartUpcase n) <> "Fields"
-  , insertorNameModifier = \TableInfo{tableName} ->
+  , updatorNameModifier = \TableInfo{tableName} ->
       let n = Text.unpack tableName
-      in smartDowncase (removeUnderscore n) <> "Insertor"
+      in smartDowncase (removeUnderscore n) <> "Updator"
   , selectorNameModifier = \TableInfo{tableName} ->
       let n = Text.unpack tableName
       in n <> "_sel"
@@ -298,7 +302,7 @@
       in smartDowncase n <> "_field"
   }
     where reserved :: [String]
-          reserved = ["id", "class", "data", "type", "foreign", "import",
+          reserved = ["class", "data", "type", "foreign", "import",
                       "default", "case"]
 
 getColumnTableName :: Properties -> ColumnInfo -> String
@@ -421,7 +425,7 @@
                  |]
            , valD (varP insertorName)
              (normalB $ foldr1 (\x y -> [| $(x) <> $(y) |]) $
-              map insertorField $ tableColumns ti)
+              map insertorField $ filter (not . autoIncrement) $ tableColumns ti)
              []
            ]
   where 
@@ -441,6 +445,33 @@
                              fieldsQualifier props <>
                              fieldNameModifier props ci) |]
 
+updator :: Properties -> Name -> TableInfo -> Q [Dec]
+updator props dbName ti =
+  sequence [ sigD
+             updatorName
+             [t| T.Alias $(table) $(database) 'T.InnerJoined
+                -> T.Alias $(table) $(database) 'T.InnerJoined
+                -> [T.Updator $(table) $(database)]
+             |]
+           , funD updatorName
+             [ do old <- newName "old"
+                  new <- newName "new"
+                  clause [ conP 'T.Alias [varP old]
+                         , conP 'T.Alias [varP new]]
+                    (normalB $ listE $ map (updatorField new) $
+                     filter (not . autoIncrement) $ tableColumns ti)
+                    []
+             ]
+           ]
+  where
+    table = litT $ strTyLit $ getTableName props ti
+    database = conT dbName
+    updatorName = mkName $ updatorNameModifier props ti
+    updatorField :: Name -> ColumnInfo -> Q Exp
+    updatorField new ci = [e| $(fieldName) T.:= $(varE new) $(fieldName) |]
+      where fieldName = varE $ mkName $
+                        fieldsQualifier props <> fieldNameModifier props ci
+
 makeSelector :: Properties -> Name -> TableInfo -> Q [Dec]
 makeSelector props dbName ti =
   sequence [ sigD
@@ -510,6 +541,10 @@
 makeInsertors :: Properties -> Name -> [TableInfo] -> Q [Dec]
 makeInsertors props dbName tis =
   concat <$> traverse (insertor props dbName) tis
+
+makeUpdators :: Properties -> Name -> [TableInfo] -> Q [Dec]
+makeUpdators props dbName tis =
+  concat <$> traverse (updator props dbName) tis
 
 makeSelectors :: Properties -> Name -> [TableInfo] -> Q [Dec]
 makeSelectors props dbName tis =
