diff --git a/src/main/java/com/googlesource/gerrit/plugins/quota/MaxRepositorySizeQuota.java b/src/main/java/com/googlesource/gerrit/plugins/quota/MaxRepositorySizeQuota.java
index 3d42aa4..d5c9e6c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/quota/MaxRepositorySizeQuota.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/quota/MaxRepositorySizeQuota.java
@@ -48,7 +48,7 @@
 import java.util.concurrent.atomic.AtomicLong;
 
 @Singleton
-class MaxRepositorySizeQuota implements ReceivePackInitializer, PostReceiveHook {
+class MaxRepositorySizeQuota implements ReceivePackInitializer, PostReceiveHook, RepoSizeCache {
   private static final Logger log = LoggerFactory
       .getLogger(MaxRepositorySizeQuota.class);
 
@@ -60,6 +60,7 @@
         persist(REPO_SIZE_CACHE, Project.NameKey.class, AtomicLong.class)
             .loader(Loader.class)
             .expireAfterWrite(1, TimeUnit.DAYS);
+        bind(RepoSizeCache.class).to(MaxRepositorySizeQuota.class);
       }
     };
   }
@@ -173,4 +174,14 @@
       return size.longValue();
     }
   }
+
+  @Override
+  public long get(Project.NameKey p) {
+    try {
+      return cache.get(p).get();
+    } catch (ExecutionException e) {
+      log.warn("Error creating RepoSizeEvent", e);
+      return 0;
+    }
+  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/quota/Publisher.java b/src/main/java/com/googlesource/gerrit/plugins/quota/Publisher.java
index b68e080..26637f8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/quota/Publisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/quota/Publisher.java
@@ -14,14 +14,12 @@
 
 package com.googlesource.gerrit.plugins.quota;
 
-import com.google.common.cache.LoadingCache;
 import com.google.gerrit.extensions.events.UsageDataPublishedListener;
 import com.google.gerrit.extensions.events.UsageDataPublishedListener.Data;
 import com.google.gerrit.extensions.events.UsageDataPublishedListener.Event;
 import com.google.gerrit.extensions.events.UsageDataPublishedListener.MetaData;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.reviewdb.client.Project.NameKey;
 import com.google.gerrit.server.project.ProjectCache;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -33,8 +31,6 @@
 import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.atomic.AtomicLong;
 
 @Singleton
 public class Publisher implements Runnable {
@@ -51,7 +47,7 @@
 
   private final Iterable<UsageDataPublishedListener> listeners;
   private final ProjectCache projectCache;
-  private final LoadingCache<NameKey, AtomicLong> repoSizeCache;
+  private final RepoSizeCache repoSizeCache;
   private final PersistentCounter fetchCounts;
   private final PersistentCounter pushCounts;
 
@@ -59,7 +55,7 @@
   public Publisher(
       DynamicSet<UsageDataPublishedListener> listeners,
       ProjectCache projectCache,
-      @Named(MaxRepositorySizeQuota.REPO_SIZE_CACHE) LoadingCache<Project.NameKey, AtomicLong> repoSizeCache,
+      RepoSizeCache repoSizeCache,
       @Named(PersistentCounter.FETCH) PersistentCounter fetchCounts,
       @Named(PersistentCounter.PUSH) PersistentCounter pushCounts) {
     this.listeners = listeners;
@@ -75,29 +71,27 @@
       return;
     }
 
-    try {
-      UsageDataEvent repoSizeEvent = createRepoSizeEvent();
-      UsageDataEvent fetchCountEvent = createEvent(FETCH_COUNT, fetchCounts);
-      UsageDataEvent pushCountEvent = createEvent(PUSH_COUNT, pushCounts);
-      for (UsageDataPublishedListener l : listeners) {
-          try {
-            l.onUsageDataPublished(repoSizeEvent);
-            l.onUsageDataPublished(pushCountEvent);
-            l.onUsageDataPublished(fetchCountEvent);
-          } catch (RuntimeException e) {
-            log.warn("Failure in UsageDataPublishedListener", e);
-          }
+    UsageDataEvent repoSizeEvent = createRepoSizeEvent();
+    UsageDataEvent fetchCountEvent = createEvent(FETCH_COUNT, fetchCounts);
+    UsageDataEvent pushCountEvent = createEvent(PUSH_COUNT, pushCounts);
+    for (UsageDataPublishedListener l : listeners) {
+      try {
+        l.onUsageDataPublished(repoSizeEvent);
+        l.onUsageDataPublished(pushCountEvent);
+        l.onUsageDataPublished(fetchCountEvent);
+      } catch (RuntimeException e) {
+        log.warn("Failure in UsageDataPublishedListener", e);
       }
-    } catch (ExecutionException e) {
-      log.warn("Error creating RepoSizeEvent", e);
     }
   }
 
-  private UsageDataEvent createRepoSizeEvent() throws ExecutionException {
+  private UsageDataEvent createRepoSizeEvent() {
     UsageDataEvent event = new UsageDataEvent(REPO_SIZE);
     for (Project.NameKey p : projectCache.all()) {
-        long size = repoSizeCache.get(p).get();
+      long size = repoSizeCache.get(p);
+      if (size > 0) {
         event.addData(size, p.get());
+      }
     }
     return event;
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/quota/RepoSizeCache.java b/src/main/java/com/googlesource/gerrit/plugins/quota/RepoSizeCache.java
new file mode 100644
index 0000000..697c61e
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/quota/RepoSizeCache.java
@@ -0,0 +1,22 @@
+// Copyright (C) 2014 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.googlesource.gerrit.plugins.quota;
+
+import com.google.gerrit.reviewdb.client.Project;
+
+public interface RepoSizeCache {
+
+  long get(Project.NameKey p);
+}
