diff --git a/manifests/init.pp b/manifests/init.pp
index a8328bf22d4fb6f6d633acc710d6ec113f27220e..370345ff132e5d047ddbb01eb515c5799246df6c 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -32,7 +32,7 @@
 #
 # [*master_submission*]   - (string)
 #
-# [*mta*]                 - (boolean) Whether to use as MTA
+# [*mta*]                 - (boolean) Configure postfix minimally, as a simple MTA
 #
 # [*mydestination*]       - (string)
 #
@@ -140,10 +140,16 @@ class postfix (
   }
 
   if $mta {
+    if $satellite {
+      fail('enabling both the $mta and $satellite parameters is not supported. Please disable one.')
+    }
     include ::postfix::mta
   }
 
   if $satellite {
+    if $mta {
+      fail('enabling both the $mta and $satellite parameters is not supported. Please disable one.')
+    }
     include ::postfix::satellite
   }
 
diff --git a/manifests/mta.pp b/manifests/mta.pp
index 6a75d3ab4805e2b7d46a3eb0089f16fec37c8421..0c835449e50b7b65b54d647e43668a9f4233795f 100644
--- a/manifests/mta.pp
+++ b/manifests/mta.pp
@@ -25,8 +25,8 @@
 #
 class postfix::mta (
   $mydestination = $postfix::mydestination,
-  $mynetworks = $postfix::mynetworks,
-  $relayhost = $postfix::relayhost,
+  $mynetworks    = $postfix::mynetworks,
+  $relayhost     = $postfix::relayhost,
 ) {
 
   validate_re($relayhost, '^\S+$',
diff --git a/manifests/satellite.pp b/manifests/satellite.pp
index 92c68832d1247d1b09ed3d1a50f200d61ca689fa..e35582786c88c8841999c2fbaefce50a0ba8c415 100644
--- a/manifests/satellite.pp
+++ b/manifests/satellite.pp
@@ -25,7 +25,7 @@
 class postfix::satellite (
   $mydestination = $postfix::mydestination,
   $mynetworks    = $postfix::mynetworks,
-  $relayhost = $postfix::relayhost,
+  $relayhost     = $postfix::relayhost,
 ) {
 
   validate_re($postfix::myorigin, '^\S+$')
diff --git a/spec/classes/postfix_spec.rb b/spec/classes/postfix_spec.rb
index 1d57c241903259924164cf031ac7cd5553b419b7..173b5bdbfeab8c6367c8b46a5bccb1882f5e6d10 100644
--- a/spec/classes/postfix_spec.rb
+++ b/spec/classes/postfix_spec.rb
@@ -137,5 +137,159 @@ describe 'postfix' do
         ) }
       end
     end
+    context 'when on RedHat' do
+      let (:facts) { {
+        :operatingsystem => 'Debian',
+        :osfamily        => 'Debian',
+        :fqdn            => 'fqdn.example.com',
+      } }
+      context 'when specifying inet_interfaces' do
+        let (:params) { {
+          :inet_interfaces => 'localhost2'
+        } }
+        it 'should create a postfix::config defined type with inet_interfaces specified properly' do
+          should contain_postfix__config('inet_interfaces').with_value('localhost2')
+        end
+      end
+      context 'when enabling ldap' do
+        it 'should do stuff' do
+          pending 'need to write this still'
+        end
+      end
+      context 'when a custom mail_user is specified' do
+        let (:params) { {
+          :mail_user => 'bar'
+        } }
+        it 'should adjust the content of /etc/postfix/master.cf specifying the user' do
+          should contain_file('/etc/postfix/master.cf').without('seltype').with_content(/user=bar/)
+        end
+      end
+      context 'when mailman is true' do
+        let (:params) { {
+          :mailman => true
+        } }
+        it 'should do stuff' do
+          pending 'need to write this still'
+        end
+      end
+      context 'when specifying a custom mastercf_source' do
+        let (:params) { {
+          :mastercf_source => 'testy'
+        } }
+        it 'should do stuff' do
+          pending 'need to write this still'
+        end
+      end
+      context 'when specifying a custom master_smtp' do
+        let (:params) { {
+          :master_smtp         => "smtp      inet  n       -       -       -       -       smtpd
+    -o smtpd_client_restrictions=check_client_access,hash:/etc/postfix/access,reject",
+        } }
+        it 'should update master.cf with the specified flags to smtp' do 
+          should contain_file('/etc/postfix/master.cf').without('seltype').with_content(
+            /smtp      inet  n       -       -       -       -       smtpd/).with_content(
+            /^smtp.*\n.*smtpd_client_restrictions=check_client_access,hash:/
+          )
+        end
+      end
+      context 'when specifying a custom master_smtps' do
+        let (:params) { {
+          :master_smtps        => 'smtps     inet  n       -       -       -       -       smtpd'
+        } }
+        it 'should update master.cf with the specified flags to smtps' do
+          should contain_file('/etc/postfix/master.cf').with_content(/^smtps     inet  n/)
+        end
+      end
+      context 'when mta is enabled' do
+        let (:params) { { :mta => true, :mydestination => '1.2.3.4', :relayhost => '2.3.4.5' } }
+        it 'should configure postfix as a minimal MTA, delivering mail to the mydestination param' do
+          should contain_postfix__config('mydestination').with_value('1.2.3.4')
+          should contain_postfix__config('mynetworks').with_value('127.0.0.0/8')
+          should contain_postfix__config('relayhost').with_value('2.3.4.5')
+          should contain_postfix__config('virtual_alias_maps').with_value('hash:/etc/postfix/virtual')
+          should contain_postfix__config('transport_maps').with_value('hash:/etc/postfix/transport')
+        end
+        it { should include_class('postfix::mta') }
+        context 'and satellite is also enabled' do
+          let (:params) { { :mta => true, :satellite => true, :mydestination => '1.2.3.4', :relayhost => '2.3.4.5' } }
+          it 'should fail' do
+            expect {subject}.to raise_error(Puppet::Error, /Please disable one/)
+          end
+        end
+      end
+      context 'when specifying mydesitination' do
+        it 'should do stuff' do
+          pending 'need to write this still'
+        end
+      end
+      context 'when specifying mynetworks' do
+        it 'should do stuff' do
+          pending 'need to write this still'
+        end
+      end
+      context 'when specifying myorigin' do
+        let (:params) { { :myorigin => 'localhost'} }
+        it 'should create a postfix::config defined type with myorigin specified properly' do
+          should contain_postfix__config('myorigin').with_value('localhost')
+        end
+      end
+      context 'when specifying relayhost' do
+        it 'should do stuff' do
+          pending 'need to write this still'
+        end
+      end
+      context 'when specifying a root_mail_recipient' do
+        let (:params) { { :root_mail_recipient => 'foo'} }
+        it 'should contain a Mailalias resource directing roots mail to the required user' do
+          should contain_mailalias('root').with_recipient('foo')
+        end
+      end
+      context 'when specifying satellite' do
+        let (:params) { { :satellite => true, :mydestination => '1.2.3.4', :relayhost => '2.3.4.5' } }
+        it 'should configure all local email to be forwarded to $root_mail_recipient delivered through $relayhost' do
+          should contain_postfix__config('mydestination').with_value('1.2.3.4')
+          should contain_postfix__config('mynetworks').with_value('127.0.0.0/8')
+          should contain_postfix__config('relayhost').with_value('2.3.4.5')
+          should contain_postfix__config('virtual_alias_maps').with_value('hash:/etc/postfix/virtual')
+          should contain_postfix__config('transport_maps').with_value('hash:/etc/postfix/transport')
+        end
+        context 'and mta is also enabled' do
+          let (:params) { { :mta => true, :satellite => true, :mydestination => '1.2.3.4', :relayhost => '2.3.4.5' } }
+          it 'should fail' do
+            expect {subject}.to raise_error(Puppet::Error, /Please disable one/)
+          end
+        end
+      end
+      context 'when specifying smtp_listen' do
+        let (:params) { { :smtp_listen => 'all' } }
+        it 'should do stuff' do
+          pending 'need to write this still'
+        end
+      end
+      context 'when use_amavisd is true' do
+        let (:params) { { :use_amavisd => true } }
+        it 'should update master.cf with the specified flags to amavis' do
+          should contain_file('/etc/postfix/master.cf').with_content(/amavis unix/)
+        end
+      end
+      context 'when use_dovecot_lda is true' do
+        let (:params) { { :use_dovecot_lda => true } }
+        it 'should update master.cf with the specified flags to dovecot' do
+          should contain_file('/etc/postfix/master.cf').with_content(/dovecot.*\n.* user=vmail:vmail /)
+        end
+      end
+      context 'when use_schleuder is true' do
+        let (:params) { { :use_schleuder => true } }
+        it 'should update master.cf with the specified flags to schleuder' do
+          should contain_file('/etc/postfix/master.cf').with_content(/schleuder/)
+        end
+      end
+      context 'when use_sympa is true' do
+        let (:params) { { :use_sympa => true } }
+        it 'should update master.cf to include sympa' do
+          should contain_file('/etc/postfix/master.cf').with_content(/sympa/)
+        end
+      end
+    end
   end
 end