diff --git a/lib/event_source/expected_version.rb b/lib/event_source/expected_version.rb
index <HASH>..<HASH> 100644
--- a/lib/event_source/expected_version.rb
+++ b/lib/event_source/expected_version.rb
@@ -3,6 +3,7 @@ module EventSource
     class Error < RuntimeError; end
 
     def self.canonize(expected_version)
+      return nil if expected_version.nil?
       return expected_version unless expected_version == NoStream.name
       NoStream.version
     end
diff --git a/lib/event_source/write.rb b/lib/event_source/write.rb
index <HASH>..<HASH> 100644
--- a/lib/event_source/write.rb
+++ b/lib/event_source/write.rb
@@ -53,14 +53,18 @@ module EventSource
     def write_batch(batch, stream_name, expected_version: nil)
       logger.trace { "Writing batch (Stream Name: #{stream_name}, Number of Events: #{batch.length}, Expected Version: #{expected_version.inspect})" }
 
-      # unless expected_version.nil?
-      #   expected_version =
-      # end
+      unless expected_version.nil?
+        expected_version = ExpectedVersion.canonize(expected_version)
+      end
 
       last_position = nil
       put.session.transaction do
         batch.each do |event_data|
           last_position = write(event_data, stream_name, expected_version: expected_version)
+
+          unless expected_version.nil?
+            expected_version += 1
+          end
         end
       end
Expected version is incremented for each event in a batch