diff --git a/apitests/distro_test.py b/apitests/distro_test.py
index f9d380e..f53aadb 100644
--- a/apitests/distro_test.py
+++ b/apitests/distro_test.py
@@ -22,6 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 """
 
 from base import *
+import urllib2
 
 class DistroTests(CobblerTest):
 
@@ -57,3 +58,8 @@ class DistroTests(CobblerTest):
         """
         self.assertRaises(xmlrpclib.Fault, self.api.new_distro)
 
+    def test_ks_mirror_accessible(self):
+        url = "http://%s/cblr/ks_mirror/" % (cfg['cobbler_server']) 
+        # Just want to be sure no 404 HTTPError is thrown:
+        response = urllib2.urlopen(url)
+
diff --git a/apitests/profile_test.py b/apitests/profile_test.py
index 7dac9f1..ed8a321 100644
--- a/apitests/profile_test.py
+++ b/apitests/profile_test.py
@@ -21,7 +21,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 02110-1301  USA
 """
 
-import pdb
 import urllib2
 
 from base import *
@@ -47,7 +46,8 @@ class ProfileTests(CobblerTest):
     def test_getks_no_such_profile(self):
         url = "http://%s/cblr/svc/op/ks/profile/%s" % (cfg['cobbler_server'], 
                 "doesnotexist")
-        response = urllib2.urlopen(url)
-        data = response.read()
-        self.assertNotEquals(-1, data.find("was not found"))
-
+        try:
+            response = urllib2.urlopen(url)
+            self.fail()
+        except urllib2.HTTPError, e:
+            self.assertEquals(404, e.code)
diff --git a/cobbler.spec b/cobbler.spec
index 03f812b..e7a6012 100644
--- a/cobbler.spec
+++ b/cobbler.spec
@@ -13,12 +13,14 @@ Group: Applications/System
 Requires: python >= 2.3
 %if 0%{?suse_version} >= 1000
 Requires: apache2
-Requires: apache2-mod_python
+# Used to be apache2-mod_python, similar mod_wsgi package appears to exist, but
+# this is untested.
+Requires: apache2-mod_wsgi
 Requires: tftp
 %else
 Requires: httpd
 Requires: tftp-server
-Requires: mod_python
+Requires: mod_wsgi
 %endif
 
 Requires: createrepo
diff --git a/config/cobbler.conf b/config/cobbler.conf
index 70d3b0c..5b31037 100644
--- a/config/cobbler.conf
+++ b/config/cobbler.conf
@@ -1,10 +1,12 @@
 # This configuration file allows cobbler data
 # to be accessed over HTTP.
 
-AliasMatch ^/cblr(.*)?$ "/var/www/cobbler$1"
+AliasMatch ^/cblr(?!/svc/)(.*)?$ "/var/www/cobbler$1"
 AliasMatch ^/cobbler_track(.*)?$ "/var/www/cobbler$1"
 AliasMatch ^/cobbler(.*)?$ "/var/www/cobbler$1"
 
+WSGIScriptAliasMatch ^/cblr/svc/([^/]*) /var/www/cobbler/svc/services.py
+
 <Directory "/var/www/cobbler">
     Options Indexes FollowSymLinks
     Order allow,deny
@@ -28,13 +30,3 @@ BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
     Allow from all
 </Directory>
 
-# service handlers for internal functions (not humans)
-
-<Directory "/var/www/cobbler/svc/">
-    SetHandler mod_python
-    PythonHandler services
-    PythonDebug on
-    PythonPath "sys.path + ['/var/www/cobbler/svc/']"
-</Directory>
-
-
diff --git a/scripts/services.py b/scripts/services.py
index 2cb6b99..22c6927 100755
--- a/scripts/services.py
+++ b/scripts/services.py
@@ -1,49 +1,34 @@
 """
-mod_python gateway to cgi-like cobbler web functions
+This module is a mod_wsgi application used to serve up the Cobbler 
+service URLs.
 
-Copyright 2007-2009, Red Hat, Inc
-Michael DeHaan <mdehaan@redhat.com>
+Copyright 2010, Red Hat, Inc
 
-This software may be freely redistributed under the terms of the GNU
-general public license.
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301  USA
 """
+import yaml
 
-from mod_python import apache
-from mod_python import Session
-from mod_python import util
-
-import xmlrpclib
-import cgi
-import os
 from cobbler.services import CobblerSvc
-import yaml # PyYAML version
-import cobbler.utils as utils
-
-#=======================================
-
-def handler(req):
-
-    """
-    Right now, index serves everything.
 
-    Hitting this URL means we've already cleared authn/authz
-    but we still need to use the token for all remote requests.
-    """
+def application(environ, start_response):
 
-    my_uri = req.uri
+    my_uri = environ['REQUEST_URI']
     
-    req.add_common_vars()
- 
-    # process form and qs data, if any
-    fs = util.FieldStorage(req)
     form = {}
-    for x in fs.keys():
-        form[x] = str(fs.get(x,'default'))
-    
+
     if my_uri.find("?") == -1:
        # support fake query strings
        # something log /cobbler/web/op/ks/server/foo
@@ -62,13 +47,12 @@ def handler(req):
              form[field] = t
           label = not label
 
-    # TESTING..
-    form.update(req.subprocess_env)
-
-    #form["REMOTE_ADDR"] = req.headers_in.get("REMOTE_ADDR",None)
-    #form["REMOTE_MAC"]  = req.subprocess_env.get("HTTP_X_RHN_PROVISIONING_MAC_0",None)
-    form["REMOTE_MAC"]  = form.get("HTTP_X_RHN_PROVISIONING_MAC_0",None)
+    # This MAC header is set by anaconda during a kickstart booted with the 
+    # kssendmac kernel option. The field will appear here as something 
+    # like: eth0 XX:XX:XX:XX:XX:XX
+    form["REMOTE_MAC"]  = form.get("HTTP_X_RHN_PROVISIONING_MAC_0", None)
 
+    # Read config for the XMLRPC port to connect to:
     fd = open("/etc/cobbler/settings")
     data = fd.read()
     fd.close()
@@ -76,31 +60,36 @@ def handler(req):
     remote_port = ydata.get("xmlrpc_port",25151)
 
     # instantiate a CobblerWeb object
-    cw = CobblerSvc(
-         server   = "http://127.0.0.1:%s" % remote_port
-    )
+    cw = CobblerSvc(server = "http://127.0.0.1:%s" % remote_port)
 
     # check for a valid path/mode
     # handle invalid paths gracefully
     mode = form.get('op','index')
 
+    # TODO: We could do proper exception handling here and return
+    # corresponding HTTP status codes:
+
+    # Execute corresponding operation on the CobblerSvc object:
     func = getattr( cw, mode )
     content = func( **form )
 
-    # apache.log_error("%s:%s ... %s" % (my_user, my_uri, str(form)))
-    req.content_type = "text/plain;charset=utf-8"
     content = unicode(content).encode('utf-8')
+    status = '200 OK'
     
     if content.find("# *** ERROR ***") != -1:
-        req.write(content)
-        apache.log_error("possible cheetah template error")
-        return apache.HTTP_INTERNAL_SERVER_ERROR
-    elif content.find("# profile not found") != -1 or content.find("# system not found") != -1 or content.find("# object not found") != -1:
-        req.content_type = "text/html;charset=utf-8"
-        req.write(" ")
-        apache.log_error("content not found")
-        return apache.HTTP_NOT_FOUND
-    else:
-        req.write(content)
-        return apache.OK
-
+        status = '500 SERVER ERROR'
+        print("possible cheetah template error")
+
+    # TODO: Not sure these strings are the right ones to look for...
+    elif content.find("# profile not found") != -1 or \
+            content.find("# system not found") != -1 or \
+            content.find("# object not found") != -1:
+        print("content not found: %s" % my_uri)
+        status = "404 NOT FOUND"
+
+ #   req.content_type = "text/plain;charset=utf-8"
+    response_headers = [('Content-type', 'text/plain;charset=utf-8'),
+                        ('Content-Length', str(len(content)))]
+    start_response(status, response_headers)
+
+    return [content]
diff --git a/setup.py b/setup.py
index e05a9fe..2fbc751 100644
--- a/setup.py
+++ b/setup.py
@@ -119,7 +119,7 @@ if __name__ == "__main__":
     vw_links      = wwwpath + "/links"
     vw_aux        = wwwpath + "/aux"
     modpython     = wwwpath + "/web"
-    modpythonsvc  = wwwpath + "/svc"
+    modwsgisvc    = wwwpath + "/svc"
         
     # log paths
     logpath  = "/var/log/cobbler"
@@ -159,7 +159,7 @@ if __name__ == "__main__":
             "scripts/cobbler-register"
         ],
         data_files = [ 
-            (modpythonsvc, ['scripts/services.py']),
+            (modwsgisvc, ['scripts/services.py']),
  
             # miscellaneous config files
             (rotpath,  ['config/cobblerd_rotate']),
