diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java
index fca63b1..9debd5d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java
@@ -924,7 +924,7 @@
     Boolean mergeable;
 
     String _sortkey;
-    int _number;
+    public int _number;
 
     AccountInfo owner;
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/CreateProject.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/CreateProject.java
index c5217c9..0d4f336 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/CreateProject.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/CreateProject.java
@@ -42,8 +42,8 @@
 import java.util.List;
 
 @RequiresCapability(GlobalCapability.CREATE_PROJECT)
-class CreateProject implements RestModifyView<TopLevelResource, Input> {
-  static class Input {
+public class CreateProject implements RestModifyView<TopLevelResource, Input> {
+  public static class Input {
     String name;
     String parent;
     String description;
@@ -59,7 +59,7 @@
     String maxObjectSizeLimit;
   }
 
-  static interface Factory {
+  public static interface Factory {
     CreateProject create(String name);
   }
 
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/QueryChangesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/QueryChangesTest.java
new file mode 100644
index 0000000..ad24c2c
--- /dev/null
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/QueryChangesTest.java
@@ -0,0 +1,166 @@
+// Copyright (C) 2013 The Android Open Source Project
+//
+// 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.gerrit.server.git;
+
+package com.google.gerrit.server.query.change;
+
+import com.google.gerrit.extensions.restapi.TopLevelResource;
+import com.google.gerrit.lifecycle.LifecycleManager;
+import com.google.gerrit.reviewdb.client.Account;
+import com.google.gerrit.reviewdb.client.Branch;
+import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.reviewdb.server.ReviewDb;
+import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.IdentifiedUser;
+import com.google.gerrit.server.account.AccountManager;
+import com.google.gerrit.server.account.AuthRequest;
+import com.google.gerrit.server.change.ChangeInserter;
+import com.google.gerrit.server.change.ChangeJson.ChangeInfo;
+import com.google.gerrit.server.project.CreateProject;
+import com.google.gerrit.server.project.NoSuchProjectException;
+import com.google.gerrit.server.project.ProjectControl;
+import com.google.gerrit.server.project.RefControl;
+import com.google.gerrit.server.schema.SchemaCreator;
+import com.google.gerrit.server.util.RequestContext;
+import com.google.gerrit.server.util.ThreadLocalRequestContext;
+import com.google.gerrit.testutil.InMemoryDatabase;
+import com.google.gerrit.testutil.InMemoryModule;
+import com.google.gerrit.testutil.InMemoryRepositoryManager;
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.Provider;
+import com.google.inject.util.Providers;
+
+import junit.framework.TestCase;
+
+import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
+import org.eclipse.jgit.junit.TestRepository;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.revwalk.RevCommit;
+
+import java.io.IOException;
+import java.util.List;
+
+public class QueryChangesTest extends TestCase {
+  @Inject private AccountManager accountManager;
+  @Inject private ChangeInserter.Factory changeFactory;
+  @Inject private CreateProject.Factory projectFactory;
+  @Inject private IdentifiedUser.RequestFactory userFactory;
+  @Inject private InMemoryDatabase schemaFactory;
+  @Inject private InMemoryRepositoryManager repoManager;
+  @Inject private ProjectControl.GenericFactory projectControlFactory;
+  @Inject private Provider<QueryChanges> queryProvider;
+  @Inject private SchemaCreator schemaCreator;
+  @Inject private ThreadLocalRequestContext requestContext;
+
+  private LifecycleManager lifecycle;
+  private ReviewDb db;
+  private Account.Id user;
+
+  @Override
+  public void setUp() throws Exception {
+    Config cfg = InMemoryModule.newDefaultConfig();
+    cfg.setString("index", null, "type", "lucene");
+    cfg.setBoolean("index", "lucene", "testInmemory", true);
+    cfg.setInt("index", "lucene", "testVersion", 2);
+
+    Injector injector = Guice.createInjector(new InMemoryModule(cfg));
+    injector.injectMembers(this);
+    lifecycle = new LifecycleManager();
+    lifecycle.add(injector);
+    lifecycle.start();
+
+    db = schemaFactory.open();
+    schemaCreator.create(db);
+    user = accountManager.authenticate(AuthRequest.forUser("user"))
+        .getAccountId();
+
+    requestContext.setContext(new RequestContext() {
+      @Override
+      public CurrentUser getCurrentUser() {
+        return userFactory.create(user);
+      }
+
+      @Override
+      public Provider<ReviewDb> getReviewDbProvider() {
+        return Providers.of(db);
+      }
+    });
+  }
+
+  @Override
+  public void tearDown() {
+    lifecycle.stop();
+    requestContext.setContext(null);
+    db.close();
+    InMemoryDatabase.drop(schemaFactory);
+  }
+
+
+  public void testInjectionSetup() {
+    assertNotNull(changeFactory);
+    assertNotNull(repoManager);
+  }
+
+  public void testQueryById() throws Exception {
+    TestRepository<InMemoryRepository> repo = createProject("repo");
+    RevCommit commit = repo.parseBody(repo.commit().message("message").create());
+    Change change = new Change(
+        new Change.Key("I1234567890123456789012345678901234567890"),
+        new Change.Id(db.nextChangeId()),
+        user,
+        new Branch.NameKey(new Project.NameKey("repo"), "refs/heads/master"));
+    ChangeInserter ins = changeFactory.create(
+        refControl("repo", change),
+        change,
+        commit);
+    ins.insert();
+
+    int id = change.getId().get();
+    ChangeInfo result = queryOne(Integer.toString(id));
+    assertEquals(id, result._number);
+  }
+
+  private TestRepository<InMemoryRepository> createProject(String name)
+      throws Exception {
+    CreateProject create = projectFactory.create(name);
+    create.apply(TopLevelResource.INSTANCE, new CreateProject.Input());
+    return new TestRepository<InMemoryRepository>(
+        repoManager.openRepository(new Project.NameKey(name)));
+  }
+
+  private RefControl refControl(String repo, Change change) throws NoSuchProjectException, IOException {
+    return projectControlFactory.controlFor(
+        new Project.NameKey(repo),
+        userFactory.create(user)).controlFor(change).getRefControl();
+  }
+
+  private ChangeInfo queryOne(String query) throws Exception {
+    QueryChanges q = queryProvider.get();
+    q.addQuery(query);
+    Object result = q.apply(TopLevelResource.INSTANCE);
+    assertTrue(String.format("expected List<ChangeInfo>, found %s", result),
+        result instanceof List);
+    @SuppressWarnings("rawtypes")
+    List results = (List) result;
+    assertTrue(String.format(
+        "expected singleton List<ChangeInfo>, found %s", result),
+        results.size() == 1);
+    Object ci = results.get(0);
+    assertTrue(String.format("expected ChangeInfo, found %s", result),
+        ci instanceof ChangeInfo);
+    return (ChangeInfo) ci;
+  }
+}
