diff --git a/hsqml-datamodel.cabal b/hsqml-datamodel.cabal
--- a/hsqml-datamodel.cabal
+++ b/hsqml-datamodel.cabal
@@ -1,5 +1,5 @@
 name:                hsqml-datamodel
-version:             0.0.0.0
+version:             0.0.0.1
 synopsis:            HsQML (Qt5) data model.
 description:         HsQML (Qt5) data model. Use any collection (actually, any (Int -> IO a) action) of single constructor data types as a model for use with QML views.
 license:             BSD3
diff --git a/src/Graphics/QML/DataModel/Tutorial.hs b/src/Graphics/QML/DataModel/Tutorial.hs
--- a/src/Graphics/QML/DataModel/Tutorial.hs
+++ b/src/Graphics/QML/DataModel/Tutorial.hs
@@ -47,8 +47,8 @@
   -> TVar [a]
   -> IO ()
 setTVarCallbacks model tv = do
-  setRowCountCallback model $      length <$> readTVarIO mtv
-  setDataCallback     model $ \i -> (!!i) <$> readTVarIO mtv
+  setRowCountCallback model $      length <$> readTVarIO tv
+  setDataCallback     model $ \i -> (!!i) <$> readTVarIO tv
 
 main = do
     registerHaskellModel   
@@ -57,7 +57,13 @@
     model <- setupDataModel
     setTVarCallbacks model storage
 
-    toplevel'class <- newClass [ defPropertyConst' "haskellModelDelegate" . return $ delegate model ]
+    skey <- newSignalKey
+
+    toplevel'class <- newClass 
+       [ defPropertyConst' "haskellModelDelegate" $ \_ -> return (delegate model)
+       , defPropertyConst' "self" return 
+       , defSignal "updateTable" skey 
+       ]
     toplevel'obj <- newObject toplevel'class ()
 
     runEngineLoop defaultEngineConfig 
@@ -96,6 +102,16 @@
 
 Record fields become roles, and you can use them in any order any with any names you like.
 Views other than TableView can be used too, of course.
+
+You will also need to reset the model every time you make changes from the Haskell side.
+This can be done by connecting the modelReset method to a signal fired from Haskell:
+
+@
+  Connections {
+    target: self;
+    onUpdateTable: hsView.model.modelReset()  
+  }
+@
 
 -}
 
