diff --git a/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java b/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java
index 410089c..c860ae1 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java
@@ -58,6 +58,9 @@
       return false;
     }
     RecordKey other = (RecordKey) obj;
+    if (isFuture != other.isFuture) {
+      return false;
+    }
     if (!id.equals(other.id)) {
       return false;
     }
diff --git a/user/test/com/google/gwt/app/AppJreSuite.java b/user/test/com/google/gwt/app/AppJreSuite.java
index da566a4..29a3bbf 100644
--- a/user/test/com/google/gwt/app/AppJreSuite.java
+++ b/user/test/com/google/gwt/app/AppJreSuite.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.app;
 
+import com.google.gwt.app.place.ActivityManagerTest;
 import com.google.gwt.app.place.PlaceChangeRequestedEventTest;
 import com.google.gwt.app.place.PlaceControllerTest;
 
@@ -27,6 +28,7 @@
 public class AppJreSuite {
   public static Test suite() {
     TestSuite suite = new TestSuite("app package tests that require the JRE");
+    suite.addTestSuite(ActivityManagerTest.class);
     suite.addTestSuite(PlaceControllerTest.class);
     suite.addTestSuite(PlaceChangeRequestedEventTest.class);
     return suite;
diff --git a/user/test/com/google/gwt/requestfactory/RequestFactoryJreSuite.java b/user/test/com/google/gwt/requestfactory/RequestFactoryJreSuite.java
new file mode 100644
index 0000000..b816af2
--- /dev/null
+++ b/user/test/com/google/gwt/requestfactory/RequestFactoryJreSuite.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2010 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.requestfactory;
+
+import com.google.gwt.requestfactory.client.impl.RecordKeyTest;
+import com.google.gwt.requestfactory.server.JsonRequestProcessorTest;
+import com.google.gwt.requestfactory.server.ReflectionBasedOperationRegistryTest;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Suite of UiBinder tests that require the JRE.
+ */
+public class RequestFactoryJreSuite {
+  public static Test suite() {
+    TestSuite suite = new TestSuite("requestfactory package tests that require the JRE");
+    suite.addTestSuite(RecordKeyTest.class);
+    suite.addTestSuite(JsonRequestProcessorTest.class);
+    suite.addTestSuite(ReflectionBasedOperationRegistryTest.class);
+    return suite;
+  }
+}
diff --git a/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java b/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java
index 67a43c2..b3290ad 100644
--- a/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java
+++ b/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java
@@ -27,7 +27,7 @@
 public class RequestFactorySuite {
   public static Test suite() {
     GWTTestSuite suite = new GWTTestSuite(
-        "Test suite for all requestfactory code.");
+        "Test suite for requestfactory gwt code.");
     suite.addTestSuite(RecordJsoImplTest.class);
     suite.addTestSuite(DeltaValueStoreJsonImplTest.class);
     return suite;
diff --git a/user/test/com/google/gwt/requestfactory/client/impl/RecordKeyTest.java b/user/test/com/google/gwt/requestfactory/client/impl/RecordKeyTest.java
new file mode 100644
index 0000000..6eaffa1
--- /dev/null
+++ b/user/test/com/google/gwt/requestfactory/client/impl/RecordKeyTest.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2010 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.requestfactory.client.impl;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link RecordJsoImpl}.
+ */
+public class RecordKeyTest extends TestCase {
+
+  public void testEquals() {
+    RecordKey newKey1 = new RecordKey(1L, SimpleFooRecordImpl.SCHEMA,
+        RequestFactoryJsonImpl.IS_FUTURE);
+    RecordKey newKey2 = new RecordKey(newKey1.id + 1, newKey1.schema,
+        newKey1.isFuture);
+    RecordKey oldKey1 = new RecordKey(newKey1.id, newKey1.schema,
+        !newKey1.isFuture);
+    RecordKey anotherNewKey1 = new RecordKey(newKey1.id, newKey1.schema,
+        newKey1.isFuture);
+    
+    assertTrue(newKey1.equals(anotherNewKey1));
+    assertTrue(newKey1.hashCode() == anotherNewKey1.hashCode());
+    
+    assertFalse(newKey1.equals(newKey2));
+    assertFalse(newKey1.hashCode() == newKey2.hashCode());
+    
+    assertFalse(newKey1.equals(oldKey1));
+    assertFalse(newKey1.hashCode() == newKey2.hashCode());
+  }
+}
