diff --git a/xos/api/service/hpc/hpc_config.py b/xos/api/service/hpc/hpc_config.py
index a181a1c..7cb60c0 100644
--- a/xos/api/service/hpc/hpc_config.py
+++ b/xos/api/service/hpc/hpc_config.py
@@ -1,7 +1,7 @@
 from django.http import HttpResponse, HttpResponseServerError
 from core.models import *
 from services.hpc.models import *
-from services.requestrouter.models import *
+#from services.requestrouter.models import *
 import xos.settings
 import json
 import os
@@ -66,25 +66,25 @@
     if not hpcSlice:
         return HttpResponseServerError("Error: no HPC slice")
 
-    if (redirSlice==None) or (demuxSlice==None):
-        # The HPC Service didn't have a dnsredir or a dnsdemux, so try looking
-        # in the RequestRouterService for one.
-
-        rr = RequestRouterService.objects.all()
-        if not (rr):
-            return HttpResponseServerError("Error: no RR service")
-
-        rr = rr[0]
-        try:
-           slices = rr.slices.all()
-        except:
-           # this field used to be improperly named, and makemigrations won't fix it
-           slices = rr.service.all()
-        for slice in slices:
-            if "redir" in slice.name:
-                redirSlice = slice
-            elif "demux" in slice.name:
-                demuxSlice = slice
+#    if (redirSlice==None) or (demuxSlice==None):
+#        # The HPC Service didn't have a dnsredir or a dnsdemux, so try looking
+#        # in the RequestRouterService for one.
+#
+#        rr = RequestRouterService.objects.all()
+#        if not (rr):
+#            return HttpResponseServerError("Error: no RR service")
+#
+#        rr = rr[0]
+#        try:
+#           slices = rr.slices.all()
+#        except:
+#           # this field used to be improperly named, and makemigrations won't fix it
+#           slices = rr.service.all()
+#        for slice in slices:
+#            if "redir" in slice.name:
+#                redirSlice = slice
+#            elif "demux" in slice.name:
+#                demuxSlice = slice
 
     if not redirSlice:
         return HttpResponseServerError("Error: no dnsredir slice")
diff --git a/xos/api/service/hpc/hpcview.py b/xos/api/service/hpc/hpcview.py
index 3e31e73..9e82aec 100644
--- a/xos/api/service/hpc/hpcview.py
+++ b/xos/api/service/hpc/hpcview.py
@@ -6,7 +6,7 @@
 from rest_framework.views import APIView
 from core.models import *
 from services.hpc.models import *
-from services.requestrouter.models import *
+#from services.requestrouter.models import *
 from django.forms import widgets
 from django.core.exceptions import PermissionDenied
 from django.contrib.contenttypes.models import ContentType
@@ -98,18 +98,18 @@
             hpc_service = hpc
             hpc_slice = slice
 
-    if not dnsdemux_slice:
-        rr = RequestRouterService.objects.all()
-        if rr:
-            rr=rr[0]
-            slices = rr.slices.all()
-            for slice in slices:
-                if "dnsdemux" in slice.name:
-                    dnsdemux_service = rr
-                    dnsdemux_slice = slice
-                if "dnsredir" in slice.name:
-                    dnsredir_service = rr
-                    dnsredir_slice = slice
+#    if not dnsdemux_slice:
+#        rr = RequestRouterService.objects.all()
+#        if rr:
+#            rr=rr[0]
+#            slices = rr.slices.all()
+#            for slice in slices:
+#                if "dnsdemux" in slice.name:
+#                    dnsdemux_service = rr
+#                    dnsdemux_slice = slice
+#                if "dnsredir" in slice.name:
+#                    dnsredir_service = rr
+#                    dnsredir_slice = slice
 
     if not dnsredir_slice:
         print "no dnsredir slice"
diff --git a/xos/synchronizer/hpc_watcher.py b/xos/synchronizer/hpc_watcher.py
index d2efdcc..5e46a7d 100644
--- a/xos/synchronizer/hpc_watcher.py
+++ b/xos/synchronizer/hpc_watcher.py
@@ -45,7 +45,7 @@
 from django.contrib.contenttypes.models import ContentType
 from core.models import *
 from services.hpc.models import *
-from services.requestrouter.models import *
+#from services.requestrouter.models import *
 django.setup()
 import time
 import pycurl
@@ -458,9 +458,9 @@
             for slice in self.get_service_slices(hpcService, "dnsdemux"):
                 self.check_request_routers(hpcService, slice.instances.all())
 
-        for rrService in RequestRouterService.objects.all():
-            for slice in self.get_service_slices(rrService, "dnsdemux"):
-                self.check_request_routers(rrService, slice.instances.all())
+#        for rrService in RequestRouterService.objects.all():
+#            for slice in self.get_service_slices(rrService, "dnsdemux"):
+#                self.check_request_routers(rrService, slice.instances.all())
 
     def run(self):
         while True:
diff --git a/xos/synchronizer/hpclib.py b/xos/synchronizer/hpclib.py
index bb1c263..e0c4563 100644
--- a/xos/synchronizer/hpclib.py
+++ b/xos/synchronizer/hpclib.py
@@ -11,7 +11,6 @@
 from xos.config import Config
 from core.models import Service
 from services.hpc.models import HpcService
-from services.requestrouter.models import RequestRouterService
 from xos.logger import Logger, logging
 
 logger = Logger(level=logging.INFO)
diff --git a/xos/synchronizer/steps/sync_hpcservices.py b/xos/synchronizer/steps/sync_hpcservices.py
index 63bf19b..f3b607a 100644
--- a/xos/synchronizer/steps/sync_hpcservices.py
+++ b/xos/synchronizer/steps/sync_hpcservices.py
@@ -6,7 +6,6 @@
 from synchronizers.base.syncstep import SyncStep
 from core.models import Service
 from services.hpc.models import HpcService
-from services.requestrouter.models import RequestRouterService
 from xos.logger import Logger, logging
 
 # hpclibrary will be in steps/..
