diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabase.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabase.java
index 24f86a7..ef5d5df 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabase.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabase.java
@@ -103,8 +103,10 @@
    *
    * @param project project name
    * @param refName reference name
+   * @param clazz wanted Class of the returned value
    * @return {@link java.util.Optional} of the value
    * @throws GlobalRefDbSystemError value cannot be returned due to a system error.
    */
-  <T> Optional<T> get(Project.NameKey project, String refName) throws GlobalRefDbSystemError;
+  <T> Optional<T> get(Project.NameKey project, String refName, Class<T> clazz)
+      throws GlobalRefDbSystemError;
 }
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/FakeGlobalRefDatabase.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/FakeGlobalRefDatabase.java
index 4d2e0b6..77b5af5 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/FakeGlobalRefDatabase.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/FakeGlobalRefDatabase.java
@@ -105,9 +105,10 @@
 
   @Override
   @SuppressWarnings("unchecked")
-  public <T> Optional<T> get(Project.NameKey project, String refName)
+  public <T> Optional<T> get(Project.NameKey project, String refName, Class<T> clazz)
       throws GlobalRefDbSystemError {
-    return Optional.ofNullable((T) projectRefDb(project).get(refName))
+    String key = String.format("%s/%s", project.get(), refName);
+    return Optional.ofNullable((T) genericKeyValueStore.get(key))
         .map(v -> ((AtomicReference<T>) v).get());
   }
 
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabaseTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabaseTest.java
index 02d060b..de67975 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabaseTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabaseTest.java
@@ -154,17 +154,31 @@
   }
 
   @Test
-  public void shouldReturnValueInTheGlobalRefDB() {
-    objectUnderTest.compareAndPut(project, initialRef, objectId1);
-    Optional<ObjectId> o = objectUnderTest.get(project, initialRef.getName());
+  public void shouldReturnObjectValueInTheGlobalRefDB() {
+    Object object = new Object();
+    objectUnderTest.compareAndPut(project, refName, null, object);
+
+    Optional<Object> o = objectUnderTest.get(project, refName, Object.class);
+
     assertThat(o.isPresent()).isTrue();
-    assertThat(o.get()).isEqualTo(objectId1);
+    assertThat(o.get()).isEqualTo(object);
+  }
+
+  @Test
+  public void shouldReturnLongValueInTheGlobalRefDB() {
+    objectUnderTest.compareAndPut(project, refName, null, 1L);
+
+    Optional<Long> o = objectUnderTest.get(project, refName, Long.class);
+
+    assertThat(o.isPresent()).isTrue();
+    assertThat(o.get()).isEqualTo(1L);
   }
 
   @Test
   public void shouldReturnEmptyIfValueIsNotInTheGlobalRefDB() {
-    Optional<ObjectId> o = objectUnderTest.get(project, "nonExistentRef");
-    assertThat(o.isPresent()).isFalse();
+    Optional<Object> value = objectUnderTest.get(project, "nonExistentRef", Object.class);
+
+    assertThat(value.isPresent()).isFalse();
   }
 
   @Test
