diff --git a/manifests/attr.pp b/manifests/attr.pp
index f1486a6e8ff3d179a9540e42de2798169fd25709..ed39f179846a79d8560066d08c3d9ea088832c43 100644
--- a/manifests/attr.pp
+++ b/manifests/attr.pp
@@ -1,11 +1,16 @@
 # Install FreeRADIUS config snippets
 define freeradius::attr ($source) {
-  file { "/etc/raddb/attr.d/${name}":
+  $fr_package = $::freeradius::params::fr_package
+  $fr_service = $::freeradius::params::fr_service
+  $fr_basepath = $::freeradius::params::fr_basepath
+  $fr_user = $::freeradius::params::fr_user
+
+  file { "${fr_basepath}/attr.d/${name}":
     mode    => '0640',
     owner   => 'root',
     group   => 'radiusd',
     source  => $source,
-    require => File['/etc/raddb/attr.d'],
-    notify  => Service['radiusd'],
+    require => File["${fr_basepath}/attr.d"],
+    notify  => Service[$fr_service],
   }
 }
diff --git a/manifests/client.pp b/manifests/client.pp
index c453a86b06893f322a6786d6be5657876f339ab8..5cdfb88a26993d3ea9980e9e99fcf27bd774cc47 100644
--- a/manifests/client.pp
+++ b/manifests/client.pp
@@ -13,12 +13,17 @@ define freeradius::client (
   $port=undef,
   $srcip=undef,
 ) {
-  file { "/etc/raddb/clients.d/${shortname}.conf":
+  $fr_package = $::freeradius::params::fr_package
+  $fr_service = $::freeradius::params::fr_service
+  $fr_basepath = $::freeradius::params::fr_basepath
+  $fr_user = $::freeradius::params::fr_user
+
+  file { "${fr_basepath}/clients.d/${shortname}.conf":
     mode    => '0640',
     owner   => 'root',
     group   => 'radiusd',
     content => template('freeradius/client.conf.erb'),
-    require => File['/etc/raddb/clients.d'],
-    notify  => Service['radiusd'],
+    require => File["${fr_basepath}/clients.d"],
+    notify  => Service[$fr_service],
   }
 }
diff --git a/manifests/config.pp b/manifests/config.pp
index cc4f2e3ca5c7ab7d9b48037da161ccae368b042f..25d8854bc4889807a63f78b207b2a0232f44b5ef 100644
--- a/manifests/config.pp
+++ b/manifests/config.pp
@@ -1,11 +1,16 @@
 # Install FreeRADIUS config snippets
 define freeradius::config ($source) {
-  file { "/etc/raddb/conf.d/${name}":
+  $fr_package = $::freeradius::params::fr_package
+  $fr_service = $::freeradius::params::fr_service
+  $fr_basepath = $::freeradius::params::fr_basepath
+  $fr_user = $::freeradius::params::fr_user
+
+  file { "${fr_basepath}/conf.d/${name}":
     mode    => '0640',
     owner   => 'root',
     group   => 'radiusd',
     source  => $source,
-    require => File['/etc/raddb/conf.d'],
-    notify  => Service['radiusd'],
+    require => File["${fr_basepath}/conf.d"],
+    notify  => Service[$fr_service],
   }
 }
diff --git a/manifests/init.pp b/manifests/init.pp
index 7c9f63474c200edbc9f6ce10e7914db85bf508dc..7b33203af02b29d2eeeb92dd55a7bca7c2e7e60b 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -1,62 +1,68 @@
 # Base class to install FreeRADIUS
 class freeradius (
   $control_socket = false,
-) {
+  $fr_service = $fr_service,
+) inherits freeradius::params {
+
   include samba
   include nagios::plugins::radius
 
   file { 'radiusd.conf':
-    name    => '/etc/raddb/radiusd.conf',
+    name    => "$fr_basepath/radiusd.conf",
     mode    => '0640',
     owner   => 'root',
     group   => 'radiusd',
     source  => 'puppet:///modules/freeradius/radiusd.conf',
-    require => Package['freeradius'],
-    notify  => Service['radiusd'],
+    require => Package[$fr_package],
+    notify  => Service[$fr_service],
   }
 
   # Create various directories
   file { [
-    '/etc/raddb/clients.d',
-    '/etc/raddb/statusclients.d',
-    '/etc/raddb',
-    '/etc/raddb/instantiate',
-    '/etc/raddb/conf.d',
-    '/etc/raddb/attr.d',
-    '/etc/raddb/users.d',
-    '/etc/raddb/policy.d',
-    '/etc/raddb/scripts',
-    '/etc/raddb/certs',
+    "$fr_basepath/clients.d",
+    "$fr_basepath/statusclients.d",
+    "$fr_basepath",
+    "$fr_basepath/instantiate",
+    "$fr_basepath/conf.d",
+    "$fr_basepath/attr.d",
+    "$fr_basepath/users.d",
+    "$fr_basepath/policy.d",
+    "$fr_basepath/scripts",
+    "$fr_basepath/certs",
   ]:
     ensure  => directory,
     mode    => '0750',
     owner   => 'root',
     group   => 'radiusd',
-    require => Package['freeradius'],
-    notify  => Service['radiusd'],
+    require => Package[$fr_package],
+    notify  => Service[$fr_service],
   }
 
   # Set up concat policy file, as there is only one global policy
   # We also add standard header and footer
-  concat { '/etc/raddb/policy.conf':
+  concat { "$fr_basepath/policy.conf":
     owner => 'root',
     group => 'radiusd',
     mode  => '0640',
   }
   concat::fragment { 'policy_header':
-    target  => '/etc/raddb/policy.conf',
+    target  => "$fr_basepath/policy.conf",
     content => "policy {\n",
     order   => 10,
   }
   concat::fragment { 'policy_footer':
-    target  => '/etc/raddb/policy.conf',
+    target  => "$fr_basepath/policy.conf",
     content => "}\n",
     order   => '99',
   }
 
   # Install FreeRADIUS packages from ResNet repo, which is newer than stock CentOS 
+  package { 'freeradius':
+    name   => $fr_package,
+    ensure => installed,
+  }
+
   package { [ 
-    'freeradius',
     'freeradius-mysql',
     'freeradius-perl',
     'freeradius-utils',
@@ -73,16 +79,12 @@ class freeradius (
   # won't get restarted, and the puppet run will fail.
   service { 'radiusd':
     ensure     => running,
-    name       => $::operatingsystem ? {
-      /CentOS|Scientific|Fedora/ => 'radiusd',
-      /Ubuntu|Debian/            => 'freeradius',
-      default                    => 'radiusd',
-    },
+    name       => $fr_service,
     require    => [
       Exec['radiusd-config-test'],
       File['radiusd.conf'],
       User['radiusd'],
-      Package['freeradius'],
+      Package[$fr_package],
       Service['winbind']
     ],
     enable     => true,
@@ -96,7 +98,7 @@ class freeradius (
     uid     => '95',
     gid     => 'radiusd',
     groups  => 'wbpriv',
-    require => Package['freeradius', 'samba-winbind'],
+    require => Package[$fr_package, 'samba-winbind'],
   }
 
   # Install a few modules required on all FR installations
@@ -137,7 +139,7 @@ class freeradius (
     '/var/log/radius/radacct',
   ]:
     mode    => '0750',
-    require => Package['freeradius'],
+    require => Package[$fr_package],
   }
 
   file { '/var/log/radius/radius.log':
@@ -152,20 +154,20 @@ class freeradius (
     owner   => 'root',
     group   => 'radiusd',
     source  => 'puppet:///modules/freeradius/radiusd.logrotate',
-    require => Package['freeradius'],
+    require => Package[$fr_package],
   }
 
   # Generate global SSL parameters
   exec { 'dh':
-    command => 'openssl dhparam -out /etc/raddb/certs/dh 1024',
-    creates => '/etc/raddb/certs/dh',
+    command => "openssl dhparam -out $fr_basepath/certs/dh 1024",
+    creates => "$fr_basepath/certs/dh",
     path    => '/usr/bin',
   }
 
   # Generate global SSL parameters
   exec { 'random':
-    command => 'dd if=/dev/urandom of=/etc/raddb/certs/random count=10 >/dev/null 2>&1',
-    creates => '/etc/raddb/certs/random',
+    command => "dd if=/dev/urandom of=$fr_basepath/certs/random count=10 >/dev/null 2>&1",
+    creates => "$fr_basepath/certs/random",
     path    => '/bin',
   }
 
@@ -181,27 +183,27 @@ class freeradius (
   # Blank a couple of default files that will break our config. This is more effective than deleting them
   # as they won't get overwritten when FR is upgraded from RPM, whereas missing files are replaced.
   file { [
-    '/etc/raddb/sites-available/default',
-    '/etc/raddb/sites-available/inner-tunnel',
-    '/etc/raddb/proxy.conf',
-    '/etc/raddb/clients.conf',
+    "$fr_basepath/sites-available/default",
+    "$fr_basepath/sites-available/inner-tunnel",
+    "$fr_basepath/proxy.conf",
+    "$fr_basepath/clients.conf",
   ]:
     content => "# FILE INTENTIONALLY BLANK\n",
     mode    => '0644',
     owner   => 'root',
     group   => 'radiusd',
-    require => Package['freeradius'],
-    notify  => Service['radiusd'],
+    require => Package[$fr_package],
+    notify  => Service[$fr_service],
   }
 
   # Delete *.rpmnew and *.rpmsave files from the radius config dir because
   # radiusd stupidly reads these files in, and they break the config
   exec { 'delete-radius-rpmnew':
-    command => '/bin/find /etc/raddb -name *.rpmnew -delete',
-    onlyif  => '/bin/find /etc/raddb -name *.rpmnew | /bin/grep rpmnew',
+    command => "/bin/find $fr_basepath -name *.rpmnew -delete",
+    onlyif  => "/bin/find $fr_basepath -name *.rpmnew | /bin/grep rpmnew",
   }
   exec { 'delete-radius-rpmsave':
-    command => '/bin/find /etc/raddb -name *.rpmsave -delete',
-    onlyif  => '/bin/find /etc/raddb -name *.rpmsave | /bin/grep rpmsave',
+    command => "/bin/find $fr_basepath -name *.rpmsave -delete",
+    onlyif  => "/bin/find $fr_basepath -name *.rpmsave | /bin/grep rpmsave",
   }
 }
diff --git a/manifests/instantiate.pp b/manifests/instantiate.pp
index 95fce6a1d1a405d91f370f6b56d578f64a39e2c4..6df6f1cc622839fa815abc1115ed438b085750ed 100644
--- a/manifests/instantiate.pp
+++ b/manifests/instantiate.pp
@@ -1,11 +1,16 @@
 # Instantiate a module in global config
 define freeradius::instantiate {
-  file { "/etc/raddb/instantiate/${name}":
+  $fr_package = $::freeradius::params::fr_package
+  $fr_service = $::freeradius::params::fr_service
+  $fr_basepath = $::freeradius::params::fr_basepath
+  $fr_user = $::freeradius::params::fr_user
+
+  file { "${fr_basepath}/instantiate/${name}":
     mode    => '0640',
     owner   => 'root',
     group   => 'radiusd',
     content => $name,
-    require => Package['freeradius'],
-    notify  => Service['radiusd'],
+    require => Package[$fr_package],
+    notify  => Service[$fr_service],
   }
 }
diff --git a/manifests/module.pp b/manifests/module.pp
index 0af094f3abf0c8ab6fa3dadc189094d551fa8a62..73f6c4fbf2872dcdaceb29739138105a45af7db6 100644
--- a/manifests/module.pp
+++ b/manifests/module.pp
@@ -1,11 +1,16 @@
 # Install FreeRADIUS modules
 define freeradius::module ($source) {
-  file { "/etc/raddb/modules/${name}":
+  $fr_package = $::freeradius::params::fr_package
+  $fr_service = $::freeradius::params::fr_service
+  $fr_basepath = $::freeradius::params::fr_basepath
+  $fr_user = $::freeradius::params::fr_user
+
+  file { "${fr_basepath}/modules/${name}":
     mode    => '0640',
     owner   => 'root',
     group   => 'radiusd',
     source  => $source,
-    require => Package['freeradius'],
-    notify  => Service['radiusd'],
+    require => Package[$fr_package],
+    notify  => Service[$fr_service],
   }
 }
diff --git a/manifests/params.pp b/manifests/params.pp
new file mode 100644
index 0000000000000000000000000000000000000000..b3916dec95967529d811027ce4655521f63aa454
--- /dev/null
+++ b/manifests/params.pp
@@ -0,0 +1,31 @@
+# Default parameters for freeradius
+class freeradius::params {
+
+  # Name of FreeRADIUS package
+  $fr_package = $::osfamily ? {
+    'RedHat' => 'freeradius',
+    'Debian' => 'freeradius',
+    default  => 'freeradius',
+  }
+
+  # Name of FreeRADIUS service
+  $fr_service = $::osfamily ? {
+    'RedHat' => 'radiusd',
+    'Debian' => 'freeradius',
+    default  => 'radiusd',
+  }
+
+  # Default base path for FreeRADIUS configs
+  $fr_basepath = $::osfamily ? {
+    'RedHat' => '/etc/raddb',
+    'Debian' => '/etc/freeradius',
+    default  => '/etc/raddb',
+  }
+
+  # FreeRADIUS user
+  $fr_user = $::osfamily ? {
+    'RedHat' => 'radiusd',
+    default  => 'radiusd'
+  }
+
+}
diff --git a/manifests/policy.pp b/manifests/policy.pp
index 64fd264c792669e8326d841f4af8507e1b9552a2..124d4db5b362d0f37011207cc77e0b080be0ecf7 100644
--- a/manifests/policy.pp
+++ b/manifests/policy.pp
@@ -1,22 +1,27 @@
 # Install FreeRADIUS policies
 define freeradius::policy ($source, $order=50) {
+  $fr_package = $::freeradius::params::fr_package
+  $fr_service = $::freeradius::params::fr_service
+  $fr_basepath = $::freeradius::params::fr_basepath
+  $fr_user = $::freeradius::params::fr_user
+
   # Install policy in policy.d 
-  file { "/etc/raddb/policy.d/${name}":
+  file { "${fr_basepath}/policy.d/${name}":
     mode    => '0644',
     owner   => 'root',
     group   => 'radiusd',
     source  => $source,
-    require => Package['freeradius'],
-    notify  => Service['radiusd'],
+    require => Package[$fr_package],
+    notify  => Service[$fr_service],
   }
 
   # Reference policy.d in the global includes file
   # If no order priority is given, assume 50
   concat::fragment { "policy-${name}":
-    target  => '/etc/raddb/policy.conf',
-    content => "\t\$INCLUDE /etc/raddb/policy.d/${name}\n",
+    target  => "${fr_basepath}/policy.conf",
+    content => "\t\$INCLUDE ${fr_basepath}/policy.d/${name}\n",
     order   => $order,
-    require => File["/etc/raddb/policy.d/${name}"],
+    require => File["${fr_basepath}/policy.d/${name}"],
   }
 
 }
diff --git a/manifests/script.pp b/manifests/script.pp
index 08fcc5aaf5e30b999ecbc1dfcac9e37bd83b5b8b..59caf1da94c2db79a72a977653ce23f334eebf7f 100644
--- a/manifests/script.pp
+++ b/manifests/script.pp
@@ -1,10 +1,15 @@
 # Install FreeRADIUS helper scripts
 define freeradius::script ($source) {
-  file { "/etc/raddb/scripts/${name}":
+  $fr_package = $::freeradius::params::fr_package
+  $fr_service = $::freeradius::params::fr_service
+  $fr_basepath = $::freeradius::params::fr_basepath
+  $fr_user = $::freeradius::params::fr_user
+
+  file { "${fr_basepath}/scripts/${name}":
     mode    => '0750',
     owner   => 'root',
     group   => 'radiusd',
     source  => $source,
-    require => File['/etc/raddb/scripts'],
+    require => File["${fr_basepath}/scripts"],
   }
 }
diff --git a/manifests/site.pp b/manifests/site.pp
index 6d5abab5372dcb490045e60517fcea19b67ee3b0..12e7ea85a9e075f79598e99db04355de55bf149a 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -3,13 +3,18 @@ define freeradius::site (
   $source  = undef,
   $content = undef,
 ) {
-  file { "/etc/raddb/sites-enabled/${name}":
+  $fr_package = $::freeradius::params::fr_package
+  $fr_service = $::freeradius::params::fr_service
+  $fr_basepath = $::freeradius::params::fr_basepath
+  $fr_user = $::freeradius::params::fr_user
+
+  file { "${fr_basepath}/sites-enabled/${name}":
     mode    => '0640',
     owner   => 'root',
     group   => 'radiusd',
     source  => $source,
     content => $content,
-    require => Package['freeradius'],
-    notify  => Service['radiusd'],
+    require => Package[$fr_package],
+    notify  => Service[$fr_service],
   }
 }
diff --git a/manifests/statusclient.pp b/manifests/statusclient.pp
index 57a4ead7064c16acce7580e22935601c3434b180..207de330dc8c070cfac4bb3fd7eaeeea67e4f44b 100644
--- a/manifests/statusclient.pp
+++ b/manifests/statusclient.pp
@@ -7,12 +7,17 @@ define freeradius::statusclient (
   $shortname,
   $netmask = undef,
 ) {
-  file { "/etc/raddb/statusclients.d/${name}.conf":
+  $fr_package = $::freeradius::params::fr_package
+  $fr_service = $::freeradius::params::fr_service
+  $fr_basepath = $::freeradius::params::fr_basepath
+  $fr_user = $::freeradius::params::fr_user
+
+  file { "${fr_basepath}/statusclients.d/${name}.conf":
     mode    => '0640',
     owner   => 'root',
     group   => 'radiusd',
     content => template('freeradius/client.conf.erb'),
-    require => File['/etc/raddb/clients.d'],
-    notify  => Service['radiusd'],
+    require => File["${fr_basepath}/clients.d"],
+    notify  => Service[$fr_service],
   }
 }