diff --git a/mail-config.nix b/mail-config.nix
index 7541065..8003d2a 100644
--- a/mail-config.nix
+++ b/mail-config.nix
@@ -46,8 +46,8 @@ let
 in
 {
   services = import ./mail-server/services.nix {
-    inherit mail_dir vmail_user_name vmail_id_start vmail_group_name
-            login_accounts valiases domain enable_imap enable_pop3;
+    inherit mail_dir vmail_user_name vmail_group_name valiases domain
+            enable_imap enable_pop3;
   };
 
   environment = import ./mail-server/environment.nix {
@@ -59,6 +59,11 @@ in
   };
 
   systemd = import ./mail-server/systemd.nix {
-    inherit mail_dir;
+    inherit mail_dir vmail_group_name;
+  };
+
+  users = import ./mail-server/users.nix {
+    inherit vmail_id_start vmail_user_name vmail_group_name domain mail_dir
+            login_accounts;
   };
 }
diff --git a/mail-server/dovecot.nix b/mail-server/dovecot.nix
index 97f5d15..8f9c6b2 100644
--- a/mail-server/dovecot.nix
+++ b/mail-server/dovecot.nix
@@ -14,13 +14,71 @@
 #  You should have received a copy of the GNU General Public License
 #  along with this program. If not, see <http://www.gnu.org/licenses/>
 
-{ vmail_group_name, vmail_user_name, dovecot_maildir, enable_imap, enable_pop3,
+{ vmail_group_name, vmail_user_name, mail_dir, enable_imap, enable_pop3,
 ... }:
+let
+  # maildir in format "/${domain}/${user}/"
+  dovecot_maildir = "maildir:${mail_dir}/%d/%n/";
+in
 {
   enable = true;
   enableImap = enable_imap;
   enablePop3 = enable_pop3;
   mailGroup = vmail_group_name;
   mailUser = vmail_user_name;
-  mailLocation = dovecot_maildir;  # maildir in format "/${domain}/${user}/"
+  mailLocation = dovecot_maildir;
+  #sslServerCert = "/etc/nixos/cert/${cert_file}"; // TODO: Define
+  #sslServerKey = "/etc/nixos/cert/${key_file}";   // TODO: Define
+  enableLmtp = true;
+  extraConfig = ''
+    #Extra Config
+    mail_access_groups = ${vmail_group_name}
+    ssl = required
+
+    service lmtp {
+      unix_listener /var/lib/postfix/queue/private/dovecot-lmtp {
+        group = postfix
+        mode = 0600
+        user = postfix  # TODO: < make variable
+      }
+    }
+
+    service auth {
+      unix_listener /var/lib/postfix/queue/private/auth {
+        mode = 0660
+        user = postfix  # TODO: < make variable
+        group = postfix  # TODO: < make variable
+      }
+    }
+
+    auth_mechanisms = plain login
+
+    namespace inbox {
+
+    #prefix = INBOX.
+    # the namespace prefix isn't added again to the mailbox names.
+    inbox = yes
+    # ... 
+
+    mailbox "Trash" {
+      auto = no
+      special_use = \Trash
+    }
+
+    mailbox "Junk" {
+      auto = subscribe
+      special_use = \Junk
+    }
+
+    mailbox "Drafts" {
+      auto = subscribe
+      special_use = \Drafts
+    }
+
+    mailbox "Sent" {
+      auto = subscribe
+      special_use = \Sent
+      }
+    }
+  '';
 }
diff --git a/mail-server/services.nix b/mail-server/services.nix
index fe848d9..cba29d8 100644
--- a/mail-server/services.nix
+++ b/mail-server/services.nix
@@ -14,30 +14,10 @@
 #  You should have received a copy of the GNU General Public License
 #  along with this program. If not, see <http://www.gnu.org/licenses/>
 
-{ mail_dir, vmail_user_name, vmail_id_start, vmail_group_name, login_accounts,
-valiases, domain, enable_imap, enable_pop3 }:
+{ mail_dir, vmail_user_name, vmail_group_name, valiases, domain, enable_imap,
+enable_pop3 }:
 
 let
-  dovecot_maildir = "maildir:" + mail_dir + "/%d/%n/";
-  vmail_user = [{
-    name = vmail_user_name;
-    isNormalUser = false;
-    uid = vmail_id_start;
-    home = mail_dir;
-    createHome = true;
-    group = vmail_group_name;
-  }];
-
-  # accountsToUser :: String -> UserRecord
-  accountsToUser = x: {
-    name = x + "@" + domain;
-    isNormalUser = false;
-    group = vmail_group_name;
-  };
-
-  # mail_user :: [ UserRecord ]
-  mail_user = map accountsToUser login_accounts;
-
   # valiasToString :: { from = "..."; to = "..." } -> String
   valiasToString = x: x.from + "@" + domain + " " + x.to "@" + domain + "\n";
 
@@ -55,7 +35,7 @@ in
   };
 
   dovecot2 = import ./dovecot.nix {
-    inherit vmail_group_name vmail_user_name dovecot_maildir enable_imap
+    inherit vmail_group_name vmail_user_name mail_dir enable_imap
             enable_pop3;
   };
 }
diff --git a/mail-server/systemd.nix b/mail-server/systemd.nix
index 61767fa..0d2fe23 100644
--- a/mail-server/systemd.nix
+++ b/mail-server/systemd.nix
@@ -14,12 +14,17 @@
 #  You should have received a copy of the GNU General Public License
 #  along with this program. If not, see <http://www.gnu.org/licenses/>
 
-{ mail_dir }:
+{ mail_dir, vmail_group_name }:
 
 {
   # Set the correct permissions for dovecot vmail folder. See
   # <http://wiki2.dovecot.org/SharedMailboxes/Permissions>. We choose
   # to use the systemd service to set the folder permissions whenever
   # dovecot gets started.
-  services.dovecot2.preStart = ("mkdir -p " + mail_dir + "; chmod 02770 " + mail_dir);
+  services.dovecot2.preStart =
+  ''
+    mkdir -p ${mail_dir}
+    chgrp ${vmail_group_name} ${mail_dir}
+    chmod 02770 ${mail_dir}
+  '';
 }
diff --git a/mail-server/users.nix b/mail-server/users.nix
index cb1a090..3697c6f 100644
--- a/mail-server/users.nix
+++ b/mail-server/users.nix
@@ -14,14 +14,36 @@
 #  You should have received a copy of the GNU General Public License
 #  along with this program. If not, see <http://www.gnu.org/licenses/>
 
-{ vmail_id_start, vmail_user, mail_user }:
+{ vmail_id_start, vmail_user_name, vmail_group_name, domain, mail_dir,
+login_accounts }:
 
+let
+  vmail_user = [{
+    name = vmail_user_name;
+    isNormalUser = false;
+    uid = vmail_id_start;
+    home = mail_dir;
+    createHome = true;
+    group = vmail_group_name;
+  }];
+
+  # accountsToUser :: String -> UserRecord
+  accountsToUser = x: {
+    name = x + "@" + domain;
+    isNormalUser = false;
+    group = vmail_group_name;
+  };
+
+  # mail_user :: [ UserRecord ]
+  mail_user = map accountsToUser login_accounts;
+
+in
 {
   # set the vmail gid to a specific value
-  users.groups = {
+  groups = {
     vmail = { gid = vmail_id_start; };
   };
 
   # define all users
-  users.extraUsers = vmail_user ++ mail_user;
+  extraUsers = vmail_user ++ mail_user;
 }