diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
index 3ec851d..9012053 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
@@ -55,6 +55,7 @@
 import com.google.inject.Inject;
 import com.google.inject.servlet.ServletModule;
 import com.googlesource.gerrit.plugins.gitblit.app.GitBlitSettings;
+import com.googlesource.gerrit.plugins.gitblit.app.ReallyNullTicketService;
 import com.googlesource.gerrit.plugins.gitblit.auth.GerritToGitBlitUserService;
 
 public class GitBlitServletModule extends ServletModule {
@@ -75,7 +76,7 @@
 
     // bind complex providers
     bind(IPublicKeyManager.class).toProvider(IPublicKeyManagerProvider.class);
-    bind(ITicketService.class).toProvider(ITicketServiceProvider.class);
+    bind(ITicketService.class).to(ReallyNullTicketService.class);
     bind(WorkQueue.class).toProvider(WorkQueueProvider.class);
 
     // core managers
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/app/ReallyNullTicketService.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/app/ReallyNullTicketService.java
new file mode 100644
index 0000000..14f3fe3
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/app/ReallyNullTicketService.java
@@ -0,0 +1,79 @@
+// 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.gitblit.app;
+
+import java.util.Collections;
+import java.util.List;
+
+import com.gitblit.manager.INotificationManager;
+import com.gitblit.manager.IPluginManager;
+import com.gitblit.manager.IRepositoryManager;
+import com.gitblit.manager.IRuntimeManager;
+import com.gitblit.manager.IUserManager;
+import com.gitblit.models.RepositoryModel;
+import com.gitblit.tickets.NullTicketService;
+import com.gitblit.tickets.TicketLabel;
+import com.gitblit.tickets.TicketMilestone;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+/**
+ * The {@link NullTicketService} of GitBlit is not really a null service. It
+ * creates a TicketIndexer, and because it neglects to override some methods
+ * from its base class, that even gets called sometimes, which then produces
+ * exceptions.
+ */
+@Singleton
+public class ReallyNullTicketService extends NullTicketService {
+
+  @Inject
+  public ReallyNullTicketService(IRuntimeManager runtimeManager,
+      IPluginManager pluginManager,
+      INotificationManager notificationManager,
+      IUserManager userManager,
+      IRepositoryManager repositoryManager) {
+    super(runtimeManager, pluginManager, notificationManager, userManager,
+        repositoryManager);
+  }
+
+  @Override
+  public boolean hasTickets(RepositoryModel repository) {
+    return false;
+  }
+
+  @Override
+  public boolean isAcceptingNewPatchsets(RepositoryModel repository) {
+    return false;
+  }
+
+  @Override
+  public boolean isAcceptingNewTickets(RepositoryModel repository) {
+    return false;
+  }
+
+  @Override
+  public boolean isAcceptingTicketUpdates(RepositoryModel repository) {
+    return false;
+  }
+
+  @Override
+  public List<TicketLabel> getLabels(RepositoryModel repository) {
+    return Collections.emptyList();
+  }
+
+  @Override
+  public List<TicketMilestone> getMilestones(RepositoryModel repository) {
+    return Collections.emptyList();
+  }
+}
