diff --git a/cobbler/action_check.py b/cobbler/action_check.py
index 5b01959..c3ee2fb 100644
--- a/cobbler/action_check.py
+++ b/cobbler/action_check.py
@@ -217,7 +217,7 @@ class BootCheck:
                    rule1 = True
                if line.startswith("/var/lib/tftpboot/.*"):
                    rule2 = True
-               if line.startswith("/var/www/cobbler/images/.*"):
+               if line.startswith(self.settings.webdir+"/images/.*"):
                    rule3 = True
 
            rules = []
@@ -227,7 +227,7 @@ class BootCheck:
                if not rule2:
                    rules.append(selinux_msg % "/var/lib/tftpboot/.*")
            if not rule3:
-               rules.append(selinux_msg % "/var/www/cobbler/images/.*")
+               rules.append(selinux_msg % self.settings.webdir+"/images/.*")
            if len(rules) > 0:
                status.append("you need to set some SELinux content rules to ensure cobbler serves content correctly in your SELinux environment, run the following: %s" % " && ".join(rules))
 
diff --git a/cobbler/action_hardlink.py b/cobbler/action_hardlink.py
index 33881ab..b7f5a87 100644
--- a/cobbler/action_hardlink.py
+++ b/cobbler/action_hardlink.py
@@ -54,7 +54,12 @@ class HardLinker:
 
         self.logger.info("now hardlinking to save space, this may take some time.")
 
-        rc = utils.subprocess_call(self.logger,"/usr/sbin/hardlink -c -v /var/www/cobbler/ks_mirror /var/www/cobbler/repo_mirror",shell=True)
+        # FIXME: how about settings? (self.settings.webdir)
+        webdir = "/var/www/cobbler"
+        if not os.path.isdir("/srv/www"):
+            webdir = "/srv/www/cobbler"
+
+        rc = utils.subprocess_call(self.logger,"/usr/sbin/hardlink -c -v "+webdir+"/ks_mirror /var/www/cobbler/repo_mirror",shell=True)
 
         return rc
 
diff --git a/cobbler/action_reposync.py b/cobbler/action_reposync.py
index 08df3ec..bb01854 100644
--- a/cobbler/action_reposync.py
+++ b/cobbler/action_reposync.py
@@ -212,7 +212,7 @@ class RepoSync:
             self.logger.warning("--rpm-list is not supported for rsync'd repositories")
 
         # FIXME: don't hardcode
-        dest_path = os.path.join("/var/www/cobbler/repo_mirror", repo.name)
+        dest_path = os.path.join(self.settings.webdir+"/repo_mirror", repo.name)
 
         spacer = ""
         if not repo.mirror.startswith("rsync://") and not repo.mirror.startswith("/"):
@@ -255,7 +255,7 @@ class RepoSync:
 
         # create yum config file for use by reposync
         # FIXME: don't hardcode
-        dest_path = os.path.join("/var/www/cobbler/repo_mirror", repo.name)
+        dest_path = os.path.join(self.settings.webdir+"/repo_mirror", repo.name)
         temp_path = os.path.join(dest_path, ".origin")
 
         if not os.path.isdir(temp_path):
@@ -273,7 +273,7 @@ class RepoSync:
         if has_rpm_list:
             self.logger.warning("warning: --rpm-list is not supported for RHN content")
         rest = repo.mirror[6:] # everything after rhn://
-        cmd = "/usr/bin/reposync %s -r %s --download_path=%s" % (self.rflags, rest, "/var/www/cobbler/repo_mirror")
+        cmd = "/usr/bin/reposync %s -r %s --download_path=%s" % (self.rflags, rest, self.settings.webdir+"/repo_mirror")
         if repo.name != rest:
             args = { "name" : repo.name, "rest" : rest }
             utils.die(self.logger,"ERROR: repository %(name)s needs to be renamed %(rest)s as the name of the cobbler repository must match the name of the RHN channel" % args)
@@ -334,7 +334,7 @@ class RepoSync:
             has_rpm_list = True
 
         # create yum config file for use by reposync
-        dest_path = os.path.join("/var/www/cobbler/repo_mirror", repo.name)
+        dest_path = os.path.join(self.settings.webdir+"/repo_mirror", repo.name)
         temp_path = os.path.join(dest_path, ".origin")
 
         if not os.path.isdir(temp_path) and repo.mirror_locally:
@@ -348,7 +348,7 @@ class RepoSync:
 
         if not has_rpm_list and repo.mirror_locally:
             # if we have not requested only certain RPMs, use reposync
-            cmd = "/usr/bin/reposync %s --config=%s --repoid=%s --download_path=%s" % (self.rflags, temp_file, repo.name, "/var/www/cobbler/repo_mirror")
+            cmd = "/usr/bin/reposync %s --config=%s --repoid=%s --download_path=%s" % (self.rflags, temp_file, repo.name, self.settings.webdir+"/repo_mirror")
             if repo.arch != "":
                 if repo.arch == "x86":
                    repo.arch = "i386" # FIX potential arch errors
diff --git a/cobbler/collection_distros.py b/cobbler/collection_distros.py
index 8de96d5..e58c82c 100644
--- a/cobbler/collection_distros.py
+++ b/cobbler/collection_distros.py
@@ -80,7 +80,8 @@ class Distros(collection.Collection):
 
             # look through all mirrored directories and find if any directory is holding
             # this particular distribution's kernel and initrd
-            possible_storage = glob.glob("/var/www/cobbler/ks_mirror/*")
+            settings = self.config.settings()
+            possible_storage = glob.glob(settings.webdir+"/ks_mirror/*")
             path = None
             for storage in possible_storage:
                 if os.path.dirname(obj.kernel).find(storage) != -1:
@@ -89,7 +90,7 @@ class Distros(collection.Collection):
 
             # if we found a mirrored path above, we can delete the mirrored storage /if/
             # no other object is using the same mirrored storage.
-            if with_delete and path is not None and os.path.exists(path) and kernel.find("/var/www/cobbler") != -1:
+            if with_delete and path is not None and os.path.exists(path) and kernel.find(settings.webdir) != -1:
                # this distro was originally imported so we know we can clean up the associated
                # storage as long as nothing else is also using this storage.
                found = False
diff --git a/cobbler/collection_repos.py b/cobbler/collection_repos.py
index 08c5e96..c6e7661 100644
--- a/cobbler/collection_repos.py
+++ b/cobbler/collection_repos.py
@@ -66,8 +66,10 @@ class Repos(collection.Collection):
                     utils.run_triggers(self.config.api, obj, "/var/lib/cobbler/triggers/delete/repo/post/*", [], logger)
                     utils.run_triggers(self.config.api, obj, "/var/lib/cobbler/triggers/change/*", [], logger)
            
- 
+                #FIXME: better use config.settings() webdir?
                 path = "/var/www/cobbler/repo_mirror/%s" % obj.name
+                if os.path.exists("/srv/www/"):
+                    path = "/srv/www/cobbler/repo_mirror/%s" % obj.name
                 if os.path.exists(path):
                     utils.rmtree(path)
 
diff --git a/cobbler/remote.py b/cobbler/remote.py
index 55c8056..43c5fa2 100644
--- a/cobbler/remote.py
+++ b/cobbler/remote.py
@@ -142,8 +142,12 @@ class CobblerXMLRPCInterface:
         profiles without using PXE.
         """
         def runner(self):
+            # FIXME: better use webdir from the settings?
+            webdir = "/var/www/cobbler/"
+            if os.path.exists("/srv/www"):
+                webdir = "/srv/www/cobbler/"
             return self.remote.api.build_iso(
-                self.options.get("iso","/var/www/cobbler/pub/generated.iso"),
+                self.options.get("iso",webdir+"/pub/generated.iso"),
                 self.options.get("profiles",None),
                 self.options.get("systems",None),
                 self.options.get("buildisodir",None),
@@ -154,7 +158,7 @@ class CobblerXMLRPCInterface:
                 self.logger
             )
         def on_done(self):
-            if self.options.get("iso","") == "/var/www/cobbler/pub/generated.iso":
+            if self.options.get("iso","") == webdir+"/pub/generated.iso":
                 msg = "ISO now available for <A HREF=\"/cobbler/pub/generated.iso\">download</A>"
                 self.remote._new_event(msg)
         return self.__start_task(runner, token, "buildiso", "Build Iso", options, on_done)
diff --git a/cobbler/services.py b/cobbler/services.py
index 335e76c..26fe3d8 100644
--- a/cobbler/services.py
+++ b/cobbler/services.py
@@ -315,7 +315,11 @@ def __test_setup():
     api.add_image(image)
 
     # perhaps an artifact of the test process?
-    utils.os_system("rm -rf /var/www/cobbler/repo_mirror/repo0")
+    # FIXME: get path (at least webdir) from settings?
+    if os.path.exists("/var/www/cobbler/repo_mirror/"):
+        utils.os_system("rm -rf /var/www/cobbler/repo_mirror/repo0")
+    elif os.path.exists("/srv/www/cobbler/repo_mirror/"):
+        utils.os_system("rm -rf /srv/www/cobbler/repo_mirror/repo0")
 
     api.reposync(name="repo0")
 
diff --git a/cobbler/settings.py b/cobbler/settings.py
index 47aa18a..40bb267 100644
--- a/cobbler/settings.py
+++ b/cobbler/settings.py
@@ -23,6 +23,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 import utils
 from utils import _
 
+import os.path
+
 TESTMODE = False
 
 # defaults is to be used if the config file doesn't contain the value
@@ -110,6 +112,8 @@ DEFAULTS = {
     "ldap_management_default_type": "authconfig"
 }
 
+if os.path.exists("/srv/www/"):
+    DEFAULTS["webdir"] = "/srv/www/cobbler"
 
 class Settings:
 
diff --git a/cobbler/utils.py b/cobbler/utils.py
index 2787de2..430cd7e 100644
--- a/cobbler/utils.py
+++ b/cobbler/utils.py
@@ -1037,6 +1037,8 @@ def tftpboot_location():
        return "/var/lib/tftpboot"
     elif make == "debian" or make == "ubuntu":
        return "/var/lib/tftpboot"
+    if make == "suse":
+        return "/srv/tftpboot"
     return "/tftpboot"
 
 def can_do_public_content(api):
@@ -2039,10 +2041,13 @@ def loh_sort_by_key(datastruct, indexkey):
 
 def dhcpconf_location(api):
     version = api.os_version
+    (dist, ver) = api.get_os_details()
     if version[0] in [ "redhat", "centos" ] and version[1] < 6:
         return "/etc/dhcpd.conf"
     elif version[0] in [ "fedora" ] and version[1] < 11: 
         return "/etc/dhcpd.conf"
+    elif dist == "suse":
+        return "/etc/dhcpd.conf"
     else:
         return "/etc/dhcp/dhcpd.conf"
 
