diff --git a/avers.cabal b/avers.cabal
--- a/avers.cabal
+++ b/avers.cabal
@@ -1,5 +1,5 @@
 name:                avers
-version:             0.0.2
+version:             0.0.3
 license:             GPL-3
 license-file:        LICENSE
 author:              Tomas Carnecky
diff --git a/src/Avers.hs b/src/Avers.hs
--- a/src/Avers.hs
+++ b/src/Avers.hs
@@ -23,6 +23,7 @@
   , Object(..)
   , exists
   , createObject
+  , createObject'
   , lookupObject
   , deleteObject
   , pruneObject
diff --git a/src/Avers/Storage.hs b/src/Avers/Storage.hs
--- a/src/Avers/Storage.hs
+++ b/src/Avers/Storage.hs
@@ -106,16 +106,24 @@
     objId <- otId
     now   <- liftIO $ getCurrentTime
 
-    let object   = Object objId otType now createdBy Nothing
-        boId     = BaseObjectId objId
-        snapshot = Snapshot boId zeroRevId (toJSON content)
+    createObject' objId now ot createdBy content
 
+    return objId
+
+
+-- | A more low-level version of 'createObject', for use when you want to
+-- generate your own ObjId or create objects at a specific time.
+createObject' :: (ToJSON a) => ObjId -> UTCTime -> ObjectType a -> ObjId -> a -> Avers ()
+createObject' objId now ot@ObjectType{..} createdBy content = do
     insertDocument objectsTable object
     insertDocument snapshotsTable snapshot
-
     updateObjectViews ot objId (Just content)
 
-    return objId
+  where
+    object   = Object objId otType now createdBy Nothing
+    boId     = BaseObjectId objId
+    snapshot = Snapshot boId zeroRevId (toJSON content)
+
 
 
 -- | Mark the object as deleted.
