diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..dade81e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+Gemfile.lock
+.bundled_gems/
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..d655ec5
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,31 @@
+source 'https://rubygems.org'
+
+group :development, :test do
+  gem 'puppetlabs_spec_helper', :require => false
+
+  gem 'metadata-json-lint'
+  # This is nice and all, but let's not worry about it until we've actually
+  # got puppet 4.x sorted
+  # gem 'puppet-lint-param-docs'
+  gem 'puppet-lint-absolute_classname-check'
+  gem 'puppet-lint-absolute_template_path'
+  gem 'puppet-lint-trailing_newline-check'
+
+  # Puppet 4.x related lint checks
+  gem 'puppet-lint-unquoted_string-check'
+  # This module makes heavy use of empty string defaults, skip this check for now
+  #gem 'puppet-lint-empty_string-check'
+  gem 'puppet-lint-leading_zero-check'
+  gem 'puppet-lint-variable_contains_upcase'
+  gem 'puppet-lint-spaceship_operator_without_tag-check'
+  gem 'puppet-lint-undef_in_function-check'
+
+  if puppetversion = ENV['PUPPET_GEM_VERSION']
+    gem 'puppet', puppetversion, :require => false
+  else
+    gem 'puppet', '~> 3.0', :require => false
+  end
+
+end
+
+# vim:ft=ruby
diff --git a/manifests/apache.pp b/manifests/apache.pp
index d0cd422..d93ca0e 100644
--- a/manifests/apache.pp
+++ b/manifests/apache.pp
@@ -42,12 +42,12 @@ class zanata::apache (
   }
 
   ::httpd::vhost { $vhost_name:
-    port        => 443,
-    docroot     => 'MEANINGLESS ARGUMENT',
-    priority    => '50',
-    template    => 'zanata/zanata.vhost.erb',
-    ssl         => true,
-    subscribe   => File['/opt/wildfly/standalone/configuration/standalone.xml'],
+    port      => 443,
+    docroot   => 'MEANINGLESS ARGUMENT',
+    priority  => '50',
+    template  => 'zanata/zanata.vhost.erb',
+    ssl       => true,
+    subscribe => File['/opt/wildfly/standalone/configuration/standalone.xml'],
   }
 
   if $ssl_cert_file_contents != '' {
diff --git a/manifests/client.pp b/manifests/client.pp
index 9ac6afc..7a90268 100644
--- a/manifests/client.pp
+++ b/manifests/client.pp
@@ -67,11 +67,11 @@ class zanata::client(
   }
 
   java_ks { 'zanata_server:keystore':
-    ensure       => latest,
-    certificate  => "/opt/zanata/${server_id}.crt",
-    target       => '/etc/ssl/certs/java/cacerts',
-    password     => 'changeit',
-    require      => File["/opt/zanata/${server_id}.crt"],
+    ensure      => latest,
+    certificate => "/opt/zanata/${server_id}.crt",
+    target      => '/etc/ssl/certs/java/cacerts',
+    password    => 'changeit',
+    require     => File["/opt/zanata/${server_id}.crt"],
   }
 
   file { '/etc/ssl/certs/java/cacerts':
diff --git a/manifests/init.pp b/manifests/init.pp
index fa8acab..de2dcf6 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -54,7 +54,7 @@ class zanata(
   zanata::validate_listener { $zanata_listeners:
   }
 
-  class { 'zanata::wildfly':
+  class { '::zanata::wildfly':
     wildfly_version        => $zanata_wildfly_version,
     wildfly_install_source => $zanata_wildfly_install_url,
   }
diff --git a/manifests/mysql.pp b/manifests/mysql.pp
index 2e9102b..343737f 100644
--- a/manifests/mysql.pp
+++ b/manifests/mysql.pp
@@ -25,7 +25,7 @@ class zanata::mysql(
 
 ) {
 
-  class { 'mysql::server':
+  class { '::mysql::server':
     config_hash => {
       'root_password'  => $mysql_root_password,
       'default_engine' => 'InnoDB',
@@ -34,7 +34,7 @@ class zanata::mysql(
     }
   }
 
-  include mysql::server::account_security
+  include ::mysql::server::account_security
 
   mysql::db { $db_name:
     user     => $db_username,