diff --git a/xos/hpc/models.py b/xos/hpc/models.py
index 9a0e507..0d88fdb 100644
--- a/xos/hpc/models.py
+++ b/xos/hpc/models.py
@@ -4,6 +4,7 @@
 import os
 from django.db import models
 from django.forms.models import model_to_dict
+from django.db.models import Q
 
 
 # Create your models here.
@@ -28,6 +29,12 @@
 
     def __unicode__(self):  return u'%s' % (self.name)
 
+    @classmethod
+    def select_by_hpcService(cls, hpcService):
+        # This should be overridden by descendant classes that want to perform
+        # filtering of visible objects by user.
+        return cls.objects.filter(hpcService=hpcService)
+
 class ContentProvider(PlCoreBase):
     class Meta:
         app_label = "hpc"
@@ -51,6 +58,13 @@
     def account(self):
         return self.CP_TO_ACCOUNT.get(self.name, self.name)
 
+    @classmethod
+    def select_by_hpcService(cls, hpcService):
+        # This should be overridden by descendant classes that want to perform
+        # filtering of visible objects by user.
+        return cls.objects.filter(serviceProvider__hpcService=hpcService)
+
+
 class OriginServer(PlCoreBase):
     class Meta:
         app_label = "hpc"
@@ -68,6 +82,12 @@
     
     def __unicode__(self):  return u'%s' % (self.url)
 
+    @classmethod
+    def select_by_hpcService(cls, hpcService):
+        # This should be overridden by descendant classes that want to perform
+        # filtering of visible objects by user.
+        return cls.objects.filter(contentProvider__serviceProvider__hpcService=hpcService)
+
 class CDNPrefix(PlCoreBase):
     class Meta:
         app_label = "hpc"
@@ -82,6 +102,12 @@
 
     def __unicode__(self):  return u'%s' % (self.prefix)
 
+    @classmethod
+    def select_by_hpcService(cls, hpcService):
+        # This should be overridden by descendant classes that want to perform
+        # filtering of visible objects by user.
+        return cls.objects.filter(contentProvider__serviceProvider__hpcService=hpcService)
+
 class AccessMap(PlCoreBase):
     class Meta:
         app_label = "hpc"
@@ -119,6 +145,15 @@
 
         super(SiteMap, self).save(*args, **kwds)
 
+    @classmethod
+    def select_by_hpcService(cls, hpcService):
+        # This should be overridden by descendant classes that want to perform
+        # filtering of visible objects by user.
+        return cls.objects.filter(Q(hpcService=hpcService) |
+                                  Q(serviceProvider__hpcService=hpcService) |
+                                  Q(contentProvider__serviceProvider__hpcService=hpcService) |
+                                  Q(cdnPrefix__contentProvider__serviceProvider__hpcService=hpcService))
+
 class HpcHealthCheck(PlCoreBase):
     class Meta:
         app_label = "hpc"
@@ -134,3 +169,10 @@
 
     def __unicode__(self): return self.resource_name
 
+    @classmethod
+    def select_by_hpcService(cls, hpcService):
+        # This should be overridden by descendant classes that want to perform
+        # filtering of visible objects by user.
+        return cls.objects.filter(hpcService=hpcService)
+
+
