diff --git a/planetstack/planetstack/settings.py b/planetstack/planetstack/settings.py
index c8da725..a19c591 100644
--- a/planetstack/planetstack/settings.py
+++ b/planetstack/planetstack/settings.py
@@ -3,7 +3,7 @@
 # Django settings for planetstack project.
 from config import Config
 config = Config()
-
+ 
 DEBUG = True
 TEMPLATE_DEBUG = DEBUG
 
@@ -59,12 +59,12 @@
 
 # Absolute filesystem path to the directory that will hold user-uploaded files.
 # Example: "/var/www/example.com/media/"
-MEDIA_ROOT = ''
+MEDIA_ROOT = '/var/www/html/files/'
 
 # URL that handles the media served from MEDIA_ROOT. Make sure to use a
 # trailing slash.
 # Examples: "http://example.com/media/", "http://media.example.com/"
-MEDIA_URL = ''
+MEDIA_URL = '/files/'
 
 # Absolute path to the directory static files should be collected to.
 # Don't put anything in this directory yourself; store your static files
diff --git a/planetstack/planetstack/urls.py b/planetstack/planetstack/urls.py
index 6c9acfa..99119e2 100644
--- a/planetstack/planetstack/urls.py
+++ b/planetstack/planetstack/urls.py
@@ -22,10 +22,16 @@
 from core.api_root import api_root
 from rest_framework import generics
 from core.plus.sites import SitePlus
+from django.http import HttpResponseRedirect
 
 admin.site = SitePlus()
 admin.autodiscover()
 
+def redirect_to_apache(request):
+     """ bounce a request back to the apache server that is running on the machine """
+     apache_url = "http://%s%s" % (request.META['HOSTNAME'], request.path)
+     return HttpResponseRedirect(apache_url)
+
 urlpatterns = patterns('',
     # Examples:
     # url(r'^$', 'planetstack.views.home', name='home'),
@@ -89,6 +95,7 @@
 
     url(r'^legacyapi/$', 'core.views.legacyapi.LegacyXMLRPC', name='xmlrpc'),
 
+    url(r'^files/', redirect_to_apache),
 
     #Adding in rest_framework urls
     url(r'^plstackapi/', include('rest_framework.urls', namespace='rest_framework')),
diff --git a/planetstack/requestrouter/admin.py b/planetstack/requestrouter/admin.py
index 30b7fad..0036c4a 100644
--- a/planetstack/requestrouter/admin.py
+++ b/planetstack/requestrouter/admin.py
@@ -25,7 +25,14 @@
         ('serviceattrs','Additional Attributes'),
     )
 
+class ServiceMapAdmin(SingletonAdmin):
+    model = ServiceMap
+    verbose_name = "Service Map"
+    verbose_name_plural = "Service Map"
+    list_display = ("name", "owner", "slice", "prefix")
+    #readonly_fields = ["name"]
+
 
 admin.site.register(RequestRouterService, RequestRouterServiceAdmin)
-admin.site.register(ClientMap)
+admin.site.register(ServiceMap, ServiceMapAdmin)
 
diff --git a/planetstack/requestrouter/models.py b/planetstack/requestrouter/models.py
index 4350030..ced91cf 100644
--- a/planetstack/requestrouter/models.py
+++ b/planetstack/requestrouter/models.py
@@ -1,4 +1,4 @@
-from core.models import User,Site,Service,SingletonModel,PlCoreBase
+from core.models import User,Site,Service,SingletonModel,PlCoreBase, Slice
 import os
 from django.db import models
 from django.forms.models import model_to_dict
@@ -15,13 +15,24 @@
     defaultAction = models.CharField(max_length=30, default = "best", help_text="Review if this should be enum")
     lastResortAction = models.CharField(max_length=30, default = "random", help_text="Review if this should be enum")
     maxAnswers = models.PositiveIntegerField(default=3, help_text="Maximum number of answers in DNS response.")
-    
+
     def __unicode__(self):  return u'RequestRouterService'
 
-class ClientMap(models.Model):
-    site = models.OneToOneField(Site, unique=True)
-    name = models.CharField(max_length=64, help_text="Name of the Client Map")
-    description = models.TextField(null=True, blank=True,max_length=130)
+class ServiceMap(models.Model):
+    name = models.SlugField(max_length=50, unique=True, blank=False, null=False, help_text="name of this service map")
+    owner = models.ForeignKey(Service, help_text="service which owns this map")
+    slice = models.ForeignKey(Slice, help_text="slice that implements this service")
+    prefix = models.CharField(max_length=256, help_text="FQDN of the region of URI space managed by RR on behalf of this service")
+    siteMap = models.FileField(upload_to="maps/", help_text="maps client requests to service instances")
+    accessMap = models.FileField(upload_to="maps/", help_text="specifies which client requests are allowed")
 
-    def __unicode__(self):  return self.name
-    
+    def siteMapName(self):
+        return self.name + ".site"
+
+    def accessMapName(self):
+        return self.name + ".access"
+
+    def __unicode__(self): return u'%s' % self.name
+
+
+
