diff --git a/ad-auth/files/pam/mkhomedir b/ad-auth/files/pam/mkhomedir
new file mode 100644
index 0000000000000000000000000000000000000000..be7b76507a21d177d25c631c12a542cbc41b9ac0
--- /dev/null
+++ b/ad-auth/files/pam/mkhomedir
@@ -0,0 +1,6 @@
+Name: Create home directory during login
+Default: yes
+Priority: 900
+Session-Type: Additional
+Session:
+        required        pam_mkhomedir.so umask=0077 skel=/etc/skel
diff --git a/ad-auth/files/pam/umask b/ad-auth/files/pam/umask
new file mode 100644
index 0000000000000000000000000000000000000000..8eefa2675052ba7c54e09866c8f56da0fc040aee
--- /dev/null
+++ b/ad-auth/files/pam/umask
@@ -0,0 +1,6 @@
+Name: Set our default system-wide umask
+Default: yes
+Priority: 900
+Session-Type: Additional
+Session:
+        optional        pam_umask.so
diff --git a/ad-auth/handlers/main.yml b/ad-auth/handlers/main.yml
index 6c5ef80ade3c71ed81118e392f8fa222e6994124..e37960b0f086c5132a07decf50df1247eec24a03 100644
--- a/ad-auth/handlers/main.yml
+++ b/ad-auth/handlers/main.yml
@@ -1,11 +1,17 @@
 ---
 # file: roles/ad-auth/handlers/main.yml
 
-- name: restart nslcd
-  service: name=nslcd state=restarted
+- name: regenerate pam config
+  shell: DEBIAN_FRONTEND=noninteractive pam-auth-update --force
 
-- name: restart nscd
-  service: name=nscd state=restarted
+- name: clear sssd cache
+  command: sss_cache -E
+  register: result
+  changed_when: "result.rc == 0"
+  failed_when: "result.rc != 0 and current_realms.rc != 2"
 
-- name: clear nscd caches
-  command: nscd -i passwd group
+- name: restart sssd
+  service: name=sssd state=restarted
+
+- name: check sudo config
+  command: visudo -q -c -f /etc/sudoers
diff --git a/ad-auth/tasks/kerberos.yml b/ad-auth/tasks/kerberos.yml
index cb87ae888cc9ebd0f522f30aa64b2abd609d69eb..150827985c74cc67437cecb6e366c33106106800 100644
--- a/ad-auth/tasks/kerberos.yml
+++ b/ad-auth/tasks/kerberos.yml
@@ -1,14 +1,15 @@
 ---
 # file: roles/ad-auth/tasks/kerberos.yml
 
-#- name: ensure kerberos is installed
-#  apt: name=krb5-user,krb5-clients state=latest
-#  tags:
-#    - kerberos
-#    - packages
-#
-#- name: configure kerberos
-#  template: src=krb5.conf.j2 dest=/etc/krb5.conf owner=root group=root mode=0644
-#  tags:
-#    - kerberos
-#    - config
+- name: ensure kerberos is installed
+  apt: name=krb5-user state=installed
+  tags:
+    - kerberos
+    - packages
+
+- name: ensure kerberos is configured
+  template: src=krb5.conf.j2 dest=/etc/krb5.conf owner=root group=root mode=0644
+  tags:
+    - kerberos
+    - config
+
diff --git a/ad-auth/tasks/ldap.yml b/ad-auth/tasks/ldap.yml
index 9d2a6eac0cf36bd037da3e4cf095892a480f9fb1..cb8b166bcf11dd2fc0cbda25d48ee79905985aa3 100644
--- a/ad-auth/tasks/ldap.yml
+++ b/ad-auth/tasks/ldap.yml
@@ -1,15 +1,8 @@
 ---
 # file: roles/ad-auth/tasks/ldap.yml
 
-- name: ensure old libnss-ldap and libnss-pam are not installed
-  apt: name=libnss-ldap,libpam-ldap state=absent
-  tags:
-    - packages
-    - clean
-    - ldap
-  
-- name: ensure ldap NSS and PAM modules are installed
-  apt: name=libnss-ldapd,libpam-ldapd,ldap-utils state=latest
+- name: ensure ldap-utils is installed
+  apt: name=ldap-utils state=installed
   tags:
     - ldap
     - packages
@@ -19,3 +12,4 @@
   tags:
     - ldap
     - config
+
diff --git a/ad-auth/tasks/main.yml b/ad-auth/tasks/main.yml
index b86b98f5612af519f344d00734f2861b253f6a78..6eaefa08828a09a3fa7227f0424ed8a1e54d9302 100644
--- a/ad-auth/tasks/main.yml
+++ b/ad-auth/tasks/main.yml
@@ -3,11 +3,11 @@
 
 - include: ldap.yml
 - meta: flush_handlers
-- include: nslcd.yml
+- include: kerberos.yml
 - meta: flush_handlers
-- include: nscd.yml
+- include: sssd.yml
 - meta: flush_handlers
-- include: kerberos.yml
+- include: pam.yml
 - meta: flush_handlers
 - include: sudo.yml
 - meta: flush_handlers
diff --git a/ad-auth/tasks/nscd.yml b/ad-auth/tasks/nscd.yml
deleted file mode 100644
index 32d43d4ca49a4dd457f27d23a8a24f23f5595b60..0000000000000000000000000000000000000000
--- a/ad-auth/tasks/nscd.yml
+++ /dev/null
@@ -1,32 +0,0 @@
----
-# file: roles/ad-auth/tasks/nscd.yml
-
-- name: ensure nscd is installed
-  apt: name=nscd state=latest
-  tags:
-    - nscd
-    - packages
-
-- name: ensure proper nscd configuration
-  copy: src=nsswitch.conf dest=/etc/nsswitch.conf owner=root group=root mode=0644
-  notify:
-    - restart nscd
-    - clear nscd caches
-  tags:
-    - nscd
-    - config
-
-- name: ensure a happy nscd
-  file: path=/etc/netgroup state=touch
-  notify:
-    - restart nscd
-    - clear nscd caches
-  tags:
-    - nscd
-    - config
-
-- name: ensure nscd is running
-  service: name=nscd state=running enabled=yes
-  tags:
-    - nscd
-    - service
diff --git a/ad-auth/tasks/nslcd.yml b/ad-auth/tasks/nslcd.yml
deleted file mode 100644
index f8d15be3fac5880c37df3fd990edb3a76b906804..0000000000000000000000000000000000000000
--- a/ad-auth/tasks/nslcd.yml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-# file: roles/ad-auth/tasks/nslcd.yml
-
-- name: ensure nslcd is installed
-  apt: name=nslcd state=latest
-  tags:
-    - nslcd
-    - packages
-
-- name: ensure proper nslcd configuration
-  template: src=nslcd.conf.j2 dest=/etc/nslcd.conf owner=root group=nslcd mode=0640
-  notify:
-    - restart nslcd
-  tags:
-    - nslcd
-    - config
-
-- name: ensure nslcd is running and enabled
-  service: name=nslcd state=running enabled=yes
-  tags:
-    - nslcd
-    - service
diff --git a/ad-auth/tasks/pam.yml b/ad-auth/tasks/pam.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c51e6efdb4ef1a3571187ce7fdaad4beb29331b8
--- /dev/null
+++ b/ad-auth/tasks/pam.yml
@@ -0,0 +1,14 @@
+---
+# file: roles/ad-auth/tasks/pam.yml
+
+- name: ensure our pam-configs are deployed
+  copy: src=pam/{{ item }} dest=/usr/share/pam-configs/{{ item }} owner=root group=root mode=0644
+  with_items:
+    - mkhomedir
+    - umask
+  notify:
+    - regenerate pam config
+  tags:
+    - pam 
+    - config
+
diff --git a/ad-auth/tasks/sssd.yml b/ad-auth/tasks/sssd.yml
new file mode 100644
index 0000000000000000000000000000000000000000..dacd5de6c0228c67a976f73a9373f1d4df885120
--- /dev/null
+++ b/ad-auth/tasks/sssd.yml
@@ -0,0 +1,59 @@
+---
+# file: roles/ad-auth/tasks/sssd.yml
+
+- name: ensure sssd is installed
+  apt: name="{{ item }}" state=installed
+  with_items:
+    - sssd
+    - libpam-sss
+    - libnss-sss
+    - sssd-tools
+    - realmd
+  notify:
+    - clear sssd cache
+  tags:
+    - sssd
+    - packages
+
+- name: check if our realm is configured
+  shell: realm list | grep "{{ domain }}"
+  register: current_realms
+  changed_when: "current_realms.rc != 0"
+  failed_when: "current_realms.rc != 0 and current_realms.rc != 1"
+
+- block:
+    - name: discover our realm
+      command: realm discover -v "{{ domain }}"
+    - name: get a kerberos ticket
+      shell: echo "{{ lookup('passwordstore', 'samba-admin') }}" | kinit Administrator
+    - name: leave any other realm
+      command: realm leave
+      register: result
+      until: "result.rc != 0"
+      retries: 9001
+      delay: 0
+      failed_when: "result.rc != 0 and result.rc != 1"
+    - name: join our realm
+      command: realm join -v "{{ domain }}"
+      notify:
+        - clear sssd cache
+        - restart sssd
+    - name: destroy kerberos ticket
+      command: kdestroy
+  when: "current_realms.rc != 0"
+
+- name: ensure sssd is configured
+  template: src=sssd.conf.j2 dest=/etc/sssd/sssd.conf owner=root group=root mode=0600
+  notify:
+    - restart sssd
+    - clear sssd cache
+  tags:
+    - sssd
+    - config
+
+- name: ensure sssd is enabled and running
+  service: name=sssd state=running enabled=yes
+  tags:
+    - sssd
+    - service
+
diff --git a/ad-auth/tasks/sudo.yml b/ad-auth/tasks/sudo.yml
index d6fa4518c66c6cfb6f015ab6f028c1a81404183d..1698aae656256d3b66cf3a7f4f4a1dd166905558 100644
--- a/ad-auth/tasks/sudo.yml
+++ b/ad-auth/tasks/sudo.yml
@@ -3,12 +3,9 @@
 
 - name: ensure users of group admin are in the sudoers
   copy: src=sudo/admin dest=/etc/sudoers.d/admin owner=root group=root mode=0440
+  notify:
+    - check sudo config
   tags:
     - sudo
     - config
 
-- name: check whole sudo config
-  command: visudo -q -c -f /etc/sudoers
-  tags:
-    - sudo
-    - test
diff --git a/ad-auth/templates/krb5.conf.j2 b/ad-auth/templates/krb5.conf.j2
index a2c8de0e656dbbbd64e990152bd9c1450e26a36a..8644b560f850a13ae40afaa61585c4e0c6010fe8 100644
--- a/ad-auth/templates/krb5.conf.j2
+++ b/ad-auth/templates/krb5.conf.j2
@@ -1,11 +1,10 @@
-## TODO
 [libdefaults]
-default_realm = FSMPI.RWTH-AACHEN.DE
+default_realm = {{ domain.upper() }}
 dns_lookup_realm = false
 dns_lookup_kdc = true
 forwardable = true
 
 [domain_realm]
-.fsmpi.rwth-aachen.de = FSMPI.RWTH-AACHEN.DE
-fsmpi.rwth-aachen.de = FSMPI.RWTH-AACHEN.DE
+.{{ domain }} = {{ domain.upper() }}
+{{ domain }} = {{ domain.upper() }}
 
diff --git a/ad-auth/templates/ldap.conf.j2 b/ad-auth/templates/ldap.conf.j2
index 3ac0530739ade88aaa796ce4924cb85e3f472fdc..dc7505aad0b7f682a6c1a82ec5991ff667bf8edb 100644
--- a/ad-auth/templates/ldap.conf.j2
+++ b/ad-auth/templates/ldap.conf.j2
@@ -6,10 +6,14 @@
 # This file should be world readable but not world writable.
 
 BASE	{{ authbase }}
-URI	ldaps://{{ authserver }}
+URI	{{ authservers | join(" ") }}
 
 #SIZELIMIT	12
 #TIMELIMIT	15
 #DEREF		never
 
 TLS_CACERT	{{ authcacert }}
+
+SASL_MECH GSSAPI
+GSSAPI_SIGN on
+GSSAPI_ENCRYPT on
diff --git a/ad-auth/templates/nslcd.conf.j2 b/ad-auth/templates/nslcd.conf.j2
deleted file mode 100644
index 5675aebabdcd8b71df552b1dee930ef3fe49bd3c..0000000000000000000000000000000000000000
--- a/ad-auth/templates/nslcd.conf.j2
+++ /dev/null
@@ -1,32 +0,0 @@
-# /etc/nslcd.conf
-# nslcd configuration file. See nslcd.conf(5)
-# for details.
-
-# The user and group nslcd should run as.
-uid nslcd
-gid nslcd
-
-# The location at which the LDAP server(s) should be reachable.
-uri ldaps://{{ authserver }}
-
-# The search base that will be used for all queries.
-base {{ authbase }}
-
-# The LDAP protocol version to use.
-#ldap_version 3
-
-# The DN to bind with for normal lookups.
-#binddn cn=annonymous,dc=example,dc=net
-#bindpw secret
-
-# The DN used for password modifications by root.
-#rootpwmoddn cn=admin,dc=example,dc=com
-
-# SSL options
-#ssl off
-tls_cacertfile {{ authcacert }}
-tls_reqcert demand
-
-# The search scope.
-#scope sub
-
diff --git a/ad-auth/templates/sssd.conf.j2 b/ad-auth/templates/sssd.conf.j2
new file mode 100644
index 0000000000000000000000000000000000000000..6b3d9b1f96f18966008ce3a47d2515bb597ab898
--- /dev/null
+++ b/ad-auth/templates/sssd.conf.j2
@@ -0,0 +1,19 @@
+[sssd]
+domains = {{ domain }}
+config_file_version = 2
+services = nss, pam
+
+[domain/{{ domain }}]
+ad_domain = {{ domain }}
+krb5_realm = {{ domain.upper() }}
+realmd_tags = manages-system joined-with-adcli 
+cache_credentials = True
+id_provider = ad
+krb5_store_password_if_offline = True
+default_shell = /bin/bash
+ldap_id_mapping = False
+use_fully_qualified_names = False
+fallback_homedir = /home/%u
+access_provider = ad
+enumerate = true
+ldap_user_fullname = displayName