Index: elixir/ext/versioned.py
===================================================================
--- elixir/ext/versioned.py	(revision 301)
+++ elixir/ext/versioned.py	(working copy)
@@ -84,12 +84,16 @@
 
 class VersionedMapperExtension(MapperExtension):
     def before_insert(self, mapper, connection, instance):
-        instance.version = 1
+        if instance.__class__.__enforce_version__:
+            instance.version = 0
+        else:
+            instance.version = 1
         instance.timestamp = datetime.now()
         return EXT_PASS
             
     def before_update(self, mapper, connection, instance):
-        values = instance.table.select(get_entity_where(instance)).execute().fetchone() 
+        values = instance.table.select(get_entity_where(instance)).execute().fetchone()
+        if values is None: return EXT_PASS
 
         # SA might've flagged this for an update even though it didn't change.
         # This occurs when a relation is updated, thus marking this instance
@@ -126,9 +130,14 @@
 
 class VersionedEntityBuilder(object):
         
-    def __init__(self, entity, ignore=[]):
+    def __init__(self, entity, ignore=[], enforce=False):
         entity._descriptor.add_mapper_extension(versioned_mapper_extension)
         self.entity = entity
+        
+        # decide if the user wants to manage concurrent modification errors
+        # using SQLAlchemy's version_id_col
+        entity.__enforce_version__ = enforce
+        
         # Changes in these fields will be ignored
         entity.__ignored_fields__ = ignore
         entity.__ignored_fields__.extend(['version', 'timestamp'])
@@ -143,6 +152,10 @@
     # we copy columns from the main entity table, so we need it to exist first
     def after_table(self):
         entity = self.entity
+        
+        # enforce for concurrent writes, if specified
+        if entity.__enforce_version__:
+            entity._descriptor.version_id_col = entity.table.c.version
 
         # look for events
         after_revert_events = []
