diff --git a/src/main/java/com/google/gwtorm/client/impl/AbstractAccess.java b/src/main/java/com/google/gwtorm/client/impl/AbstractAccess.java
index 77e150e..17ff862 100644
--- a/src/main/java/com/google/gwtorm/client/impl/AbstractAccess.java
+++ b/src/main/java/com/google/gwtorm/client/impl/AbstractAccess.java
@@ -15,16 +15,21 @@
 package com.google.gwtorm.client.impl;
 
 import com.google.gwtorm.client.Access;
+import com.google.gwtorm.client.AtomicUpdate;
 import com.google.gwtorm.client.Key;
+import com.google.gwtorm.client.OrmConcurrencyException;
 import com.google.gwtorm.client.OrmException;
 import com.google.gwtorm.client.ResultSet;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
 public abstract class AbstractAccess<E, K extends Key<?>>
     implements Access<E, K> {
+  private static final int MAX_TRIES = 10;
+
   public ResultSet<E> get(final Iterable<K> keys) throws OrmException {
     final ArrayList<E> r = new ArrayList<E>();
     for (final K key : keys) {
@@ -49,4 +54,30 @@
       }
     }
   }
+
+  @Override
+  public E atomicUpdate(final K key, final AtomicUpdate<E> update)
+      throws OrmException {
+    for (int attempts = 1;; attempts++) {
+      try {
+        final E obj = get(key);
+        if (obj == null) {
+          return null;
+        }
+        final E res = update.update(obj);
+        update(Collections.singleton(obj));
+        return res;
+      } catch (OrmConcurrencyException err) {
+        if (attempts < MAX_TRIES) {
+          continue;
+        }
+        throw err;
+      }
+    }
+  }
+
+  @Override
+  public void deleteKeys(Iterable<K> keys) throws OrmException {
+    delete(get(keys));
+  }
 }
diff --git a/src/main/java/com/google/gwtorm/jdbc/JdbcAccess.java b/src/main/java/com/google/gwtorm/jdbc/JdbcAccess.java
index 08f18e2..4105d75 100644
--- a/src/main/java/com/google/gwtorm/jdbc/JdbcAccess.java
+++ b/src/main/java/com/google/gwtorm/jdbc/JdbcAccess.java
@@ -15,7 +15,6 @@
 package com.google.gwtorm.jdbc;
 
 import com.google.gwtorm.client.Access;
-import com.google.gwtorm.client.AtomicUpdate;
 import com.google.gwtorm.client.Key;
 import com.google.gwtorm.client.OrmConcurrencyException;
 import com.google.gwtorm.client.OrmException;
@@ -32,8 +31,6 @@
 /** Internal base class for implementations of {@link Access}. */
 public abstract class JdbcAccess<T, K extends Key<?>> extends
     AbstractAccess<T, K> {
-  private static final int MAX_TRIES = 10;
-
   private final JdbcSchema schema;
 
   protected JdbcAccess(final JdbcSchema s) {
@@ -297,34 +294,6 @@
     }
   }
 
-  @Override
-  public T atomicUpdate(final K key, final AtomicUpdate<T> update)
-      throws OrmException {
-
-    for (int attempts = 1;; attempts++) {
-      try {
-        final T obj = get(key);
-        if (obj == null) {
-          return null;
-        }
-        final T res = update.update(obj);
-        update(Collections.singleton(obj));
-        return res;
-      } catch (OrmConcurrencyException err) {
-        if (attempts < MAX_TRIES) {
-          continue;
-        }
-        throw err;
-      }
-    }
-
-  }
-
-  @Override
-  public void deleteKeys(Iterable<K> keys) throws OrmException {
-    delete(get(keys));
-  }
-
   private OrmException convertError(final String op, final SQLException err) {
     if (err.getCause() == null && err.getNextException() != null) {
       err.initCause(err.getNextException());
