     
     // MARK: - Version
     
+    /// A Version represents a state of a rowModel.
     private class Version {
-        /// Version will NEVER change the rowModel.
+        
+        /// The rowModel. The Version will never modify it.
         let rowModel: RowModel
         
+        /**
+        Version keeps a copy the rowModel's storedDatabaseDictionary, so that
+        this dictionary is built once whatever the database operation.
+        */
         let storedDatabaseDictionary: [String: DatabaseValueConvertible?]
         
         lazy var databaseTable: Table? = self.rowModel.dynamicType.databaseTable
         
-        // A primary key dictionary. Its values may be nil.
+        /**
+        A dictionary of primary key columns that may identify a row in the
+        database. Hence its "weak" name.
+        
+        It is nil when rowModel has no primary key. Its values come from the
+        storedDatabaseDictionary and may be nil.
+        */
         lazy var weakPrimaryKeyDictionary: [String: DatabaseValueConvertible?]? = {
             guard let primaryKey = self.databaseTable?.primaryKey else {
                 return nil

            storedDatabaseDictionary = rowModel.storedDatabaseDictionary
        }
        
        /// Returns an optional (rowIDColumn, insertedRowID) if and only if the
        /// row model should be updated.
        func insert(db: Database) throws -> (String, Int64)? {
            // Fail early if databaseTable is nil (not overriden)
            guard let table = databaseTable else {

            }
        }
        
        /// UPDATE
        func save(db: Database) throws -> (String, Int64)? {
            if let _ = strongPrimaryKeyDictionary {
                do {
