diff --git a/doc/adapter_methods.txt b/doc/adapter_methods.txt
index c5757a349f96bc0bf1106098f5b9e27927a8cc27..4d7792f209debb007a44df9f71f29a7891e33832 100644
--- a/doc/adapter_methods.txt
+++ b/doc/adapter_methods.txt
@@ -41,7 +41,7 @@ monetdb/database_statements.rb
   |- select_rows (*)
   |- execute (!) - OK
   |- exec_query (!) - OK Just without cache. We need to implement this later
-  |- exec_insert (!)
+  |- exec_insert (!) - OK
   |- exec_delete (!)
   |- truncate (!)
   |- exec_update (!)
diff --git a/lib/active_record/connection_adapters/monetdb/database_statements.rb b/lib/active_record/connection_adapters/monetdb/database_statements.rb
index f53c3a4b1ed69c8d2c803de1a6cdf216e95c939d..7e5233e47fc40ea378e633a5a1c24e802722d88b 100644
--- a/lib/active_record/connection_adapters/monetdb/database_statements.rb
+++ b/lib/active_record/connection_adapters/monetdb/database_statements.rb
@@ -27,7 +27,7 @@ module ActiveRecord
         # Executes +sql+ statement in the context of this connection using
         # +binds+ as the bind substitutes. +name+ is logged along with
         # the executed +sql+ statement.
-        def exec_query(sql, name = 'SQL', binds = []) # 
+        def exec_query(sql, name = 'SQL', binds = []) 
             execute_and_clear(sql, name, binds) do |result|
                 types = {}
                 fields = result.fields
@@ -44,6 +44,17 @@ module ActiveRecord
         # +binds+ as the bind substitutes. +name+ is logged along with
         # the executed +sql+ statement.
         def exec_insert(sql, name, binds, pk = nil, sequence_name = nil)
+            val = exec_query(sql, name, binds)
+            if pk
+                unless sequence_name
+                    table_ref = extract_table_ref_from_insert_sql(sql)
+                    sequence_name = default_sequence_name(table_ref, pk)
+                    return val unless sequence_name
+                end
+                exec_query("SELECT currval('#{sequence_name}')", 'SQL')
+            else
+                val
+            end
         end
 
         # Executes delete +sql+ statement in the context of this connection using
diff --git a/lib/active_record/connection_adapters/monetdb_adapter.rb b/lib/active_record/connection_adapters/monetdb_adapter.rb
index de1bd0211c00ac1b7722c539cc04e4501b5401fe..18137530ab2b769dc981f55fe48d10618e80d9f0 100644
--- a/lib/active_record/connection_adapters/monetdb_adapter.rb
+++ b/lib/active_record/connection_adapters/monetdb_adapter.rb
@@ -300,6 +300,10 @@ module ActiveRecord
       def native_database_types
         NATIVE_DATABASE_TYPES
       end
+      def extract_table_ref_from_insert_sql(sql) # :nodoc:
+        sql[/into\s+([^\(]*).*values\s*\(/im]
+        $1.strip if $1
+      end
     end
   end
 end