diff --git a/src/freedombone-app-xmpp b/src/freedombone-app-xmpp
index 743615be951918acc96667074d459449088323e4..a6b6fc6d28e261c7aa936cd4c7e7ee4818137b3d 100755
--- a/src/freedombone-app-xmpp
+++ b/src/freedombone-app-xmpp
@@ -309,10 +309,12 @@ function install_xmpp_main {
         return
     fi
 
-    # obtain a cert for the default domain
-    if [[ $(cert_exists ${DEFAULT_DOMAIN_NAME} pem) == "0" ]]; then
-        echo $'Obtaining certificate for the main domain'
-        create_site_certificate ${DEFAULT_DOMAIN_NAME} 'yes'
+    if [[ $ONION_ONLY == 'no' ]]; then
+        # obtain a cert for the default domain
+        if [[ $(cert_exists ${DEFAULT_DOMAIN_NAME} pem) == "0" ]]; then
+            echo $'Obtaining certificate for the main domain'
+            create_site_certificate ${DEFAULT_DOMAIN_NAME} 'yes'
+        fi
     fi
 
     apt-get -yq install lua-sec lua-bitop
@@ -340,29 +342,19 @@ function install_xmpp_main {
 
     # create a certificate
     if [[ $(cert_exists ${DEFAULT_DOMAIN_NAME} pem) == "0" ]]; then
-        if [[ $(cert_exists ${DEFAULT_DOMAIN_NAME} xmpp) == "0" ]]; then
+        if [[ $(cert_exists xmpp) == "0" ]]; then
             ${PROJECT_NAME}-addcert -h xmpp --dhkey ${DH_KEYLENGTH}
             check_certificates xmpp
         fi
     fi
-    if [ -f /etc/ssl/private/xmpp.key ]; then
-        chown prosody:prosody /etc/ssl/private/xmpp.key
-    fi
-    if [ -f /etc/ssl/certs/xmpp.crt ]; then
-        chown prosody:prosody /etc/ssl/certs/xmpp.crt
-    fi
-    if [ -f /etc/ssl/certs/xmpp.dhparam ]; then
-        chown prosody:prosody /etc/ssl/certs/xmpp.dhparam
-    fi
-    if [ -f /etc/ssl/private/${DEFAULT_DOMAIN_NAME}.key ]; then
-        chown prosody:prosody /etc/ssl/private/${DEFAULT_DOMAIN_NAME}.key
-    fi
-    if [ -f /etc/ssl/certs/${DEFAULT_DOMAIN_NAME}.pem ]; then
-        chown prosody:prosody /etc/ssl/certs/${DEFAULT_DOMAIN_NAME}.pem
-    fi
-    if [ -f /etc/ssl/certs/${DEFAULT_DOMAIN_NAME}.dhparam ]; then
-        chown prosody:prosody /etc/ssl/certs/${DEFAULT_DOMAIN_NAME}.dhparam
-    fi
+
+    groupadd default
+    usermod -g default prosody
+
+    chown root:default /etc/ssl/private/xmpp.*
+    chown root:default /etc/ssl/certs/xmpp.*
+    chown root:default /etc/ssl/private/${DEFAULT_DOMAIN_NAME}.*
+    chown root:default /etc/ssl/certs/${DEFAULT_DOMAIN_NAME}.*
 
     cp -a /etc/prosody/conf.avail/example.com.cfg.lua /etc/prosody/conf.avail/xmpp.cfg.lua
 
diff --git a/src/freedombone-base-email b/src/freedombone-base-email
index c03bd1aeb1a6bf9bf509e7fdc278c72074adc101..6dd66967e5d7862ee67e5ec16eed5a353107f6fc 100755
--- a/src/freedombone-base-email
+++ b/src/freedombone-base-email
@@ -1218,24 +1218,44 @@ function configure_imap {
         exit 48
     fi
 
-    if [ ! -f /etc/ssl/certs/dovecot.dhparam ]; then
-        ${PROJECT_NAME}-addcert -h dovecot --dhkey $DH_KEYLENGTH
-        check_certificates dovecot
+    if [[ $ONION_ONLY == 'no' ]]; then
+        # obtain a cert for the default domain
+        if [[ $(cert_exists ${DEFAULT_DOMAIN_NAME} pem) == "0" ]]; then
+            echo $'Obtaining certificate for the main domain'
+            create_site_certificate ${DEFAULT_DOMAIN_NAME} 'yes'
+        fi
+    fi
+
+    if [[ $(cert_exists ${DEFAULT_DOMAIN_NAME} pem) == "0" ]]; then
+        if [[ $(cert_exists dovecot) == "0" ]]; then
+            ${PROJECT_NAME}-addcert -h dovecot --dhkey $DH_KEYLENGTH
+            check_certificates dovecot
+        fi
     fi
-    chown root:dovecot /etc/ssl/certs/dovecot.*
-    chown root:dovecot /etc/ssl/private/dovecot.*
+
+    groupadd default
+    usermod -g default dovecot
+
+    chown root:default /etc/ssl/certs/dovecot.*
+    chown root:default /etc/ssl/private/dovecot.*
+    chown root:default /etc/ssl/certs/${DEFAULT_DOMAIN_NAME}.*
+    chown root:default /etc/ssl/private/${DEFAULT_DOMAIN_NAME}.*
 
     if [ ! -f /etc/dovecot/conf.d/10-ssl.conf ]; then
         echo $'Unable to find /etc/dovecot/conf.d/10-ssl.conf'
         exit 83629
     fi
     sed -i 's|#ssl =.*|ssl = required|g' /etc/dovecot/conf.d/10-ssl.conf
-    sed -i 's|ssl = no|ssl = required|g' /etc/dovecot/conf.d/10-ssl.conf
-    sed -i 's|ssl = yes|ssl = required|g' /etc/dovecot/conf.d/10-ssl.conf
-    sed -i 's|#ssl_cert =.*|ssl_cert = </etc/ssl/certs/dovecot.crt|g' /etc/dovecot/conf.d/10-ssl.conf
-    sed -i 's|ssl_cert =.*|ssl_cert = </etc/ssl/certs/dovecot.crt|g' /etc/dovecot/conf.d/10-ssl.conf
-    sed -i 's|#ssl_key =.*|ssl_key = </etc/ssl/private/dovecot.key|g' /etc/dovecot/conf.d/10-ssl.conf
-    sed -i 's|ssl_key =.*|ssl_key = </etc/ssl/private/dovecot.key|g' /etc/dovecot/conf.d/10-ssl.conf
+    sed -i 's|ssl =.*|ssl = required|g' /etc/dovecot/conf.d/10-ssl.conf
+    if [[ $(cert_exists ${DEFAULT_DOMAIN_NAME} pem) == "1" ]]; then
+        sed -i "s|#ssl_cert =.*|ssl_cert = </etc/ssl/certs/${DEFAULT_DOMAIN_NAME}.pem|g" /etc/dovecot/conf.d/10-ssl.conf
+        sed -i "s|ssl_cert =.*|ssl_cert = </etc/ssl/certs/${DEFAULT_DOMAIN_NAME}.pem|g" /etc/dovecot/conf.d/10-ssl.conf
+    else
+        sed -i "s|#ssl_cert =.*|ssl_cert = </etc/ssl/certs/${DEFAULT_DOMAIN_NAME}.crt|g" /etc/dovecot/conf.d/10-ssl.conf
+        sed -i "s|ssl_cert =.*|ssl_cert = </etc/ssl/certs/${DEFAULT_DOMAIN_NAME}.crt|g" /etc/dovecot/conf.d/10-ssl.conf
+    fi
+    sed -i "s|#ssl_key =.*|ssl_key = </etc/ssl/private/${DEFAULT_DOMAIN_NAME}.key|g" /etc/dovecot/conf.d/10-ssl.conf
+    sed -i "s|ssl_key =.*|ssl_key = </etc/ssl/private/${DEFAULT_DOMAIN_NAME}.key|g" /etc/dovecot/conf.d/10-ssl.conf
     sed -i 's|#ssl_dh_parameters_length.*|ssl_dh_parameters_length = 2048|g' /etc/dovecot/conf.d/10-ssl.conf
     sed -i 's/#ssl_prefer_server_ciphers.*/ssl_prefer_server_ciphers = yes/g' /etc/dovecot/conf.d/10-ssl.conf
     sed -i "s|#ssl_protocols =.*|ssl_protocols = '$SSL_PROTOCOLS'|g" /etc/dovecot/conf.d/10-ssl.conf