diff --git a/README.md b/README.md
index 2d91e957d95e9ce876b7e539139da878c7f7c803..7a344376647dac7500bf39e03602a379103ae291 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ Role Variables
 ---
 # certbot settings
 certbot_dns_challenge: false                                                          # default use webserver, true to obtain certificate using dns challenge
-certbot_lego_version: "4.11.0"                                                        # version of LEGO client
+certbot_lego_version: "4.11.0"                                                        # lego version - Let's Encrypt client
 certbot_dns_provider: "designate"                                                     # list of available providers https://go-acme.github.io/lego/dns/
 dns_provider_auth_env_variables:                                                      # variables required to authenticate dns provider
   OS_AUTH_URL: "https://openstack.example.org"
@@ -19,16 +19,17 @@ dns_provider_auth_env_variables:
   OS_APPLICATION_CREDENTIAL_ID: "{{ vault_os_application_credential_id }}"
   OS_APPLICATION_CREDENTIAL_SECRET: "{{ vault_os_application_credential_secret }}"
 
-
 certbot_fqdn:
   - example.de
 certbot_admin_email: "admin@example.de"
 # certbot_webroot: "/var/www/example"                                                 # if undefined use --standalone
 
-# application settings
-# certbot_application: "example"                                                      # if defined copy certs to application dir and setup deploy hooks
-certbot_application_dir: "/etc/{{ certbot_application }}"
-certbot_application_deploy_hook: |
+# LEGO Settings
+lego_extra_flags: []
+
+# renewal settings
+certbot_renewal_hook_file_name: "example"
+certbot_renewal_hook: |
   #!/bin/sh
 
   cp {{ certbot_live_dir }}/fullchain.pem {{ certbot_application_dir }}
@@ -54,6 +55,18 @@ roles:
     - hdacloud.certbot
 ```
 
+### Info when using DNS challenge
+
+In some cases you might need the certificates split up into the cert itself and a separate fullchain certificate
+chain. For this case you need to add the `--no-bundle` option to the `lego_extra_flags` array. Then add the
+following to the `certbot_renewal_hook` script (replacing variables accordingly):
+
+```sh
+rm "/etc/letsencrypt/live/fullchain.pem"
+cat "/etc/letsencrypt/live/certificates/{{ certbot_fqdn_first }}.crt" >> "/etc/letsencrypt/live/fullchain.pem" &&
+cat "/etc/letsencrypt/live/certificates/{{ certbot_fqdn_first }}.issuer.crt" >> "/etc/letsencrypt/live/fullchain.pem"
+```
+
 License
 -------
 
diff --git a/defaults/main.yml b/defaults/main.yml
index 43d75cc8713c356bc6ac167c2017eeb40f026d8e..eea0c5c98de5b73360c6324944a4b551e2566abf 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -1,4 +1,18 @@
 ---
+# Packages / timer names based on Distribution
+certbot_pkg_name:
+  CentOS: "certbot"
+  Debian: "certbot"
+  Ubuntu: "certbot"
+  Fedora: "certbot"
+
+# TODO: Might need to change
+certbot_timer_name:
+  CentOS: "certbot-renew.timer"
+  Debian: "certbot.timer"
+  Ubuntu: "snap.certbot-renew.timer"
+  Fedora: "certbot-renew.timer"
+
 # certbot settings
 certbot_dns_challenge: false                                                          # default use webserver, true to obtain certificate using dns challenge
 certbot_lego_version: "4.11.0"                                                        # lego version - Let's Encrypt client
@@ -10,16 +24,17 @@ dns_provider_auth_env_variables:
   OS_APPLICATION_CREDENTIAL_ID: "{{ vault_os_application_credential_id }}"
   OS_APPLICATION_CREDENTIAL_SECRET: "{{ vault_os_application_credential_secret }}"
 
-
 certbot_fqdn:
   - example.de
 certbot_admin_email: "admin@example.de"
 # certbot_webroot: "/var/www/example"                                                 # if undefined use --standalone
 
-# application settings
-# certbot_application: "example"                                                      # if defined copy certs to application dir and setup deploy hooks
-certbot_application_dir: "/etc/{{ certbot_application }}"
-certbot_application_deploy_hook: |
+# LEGO Settings
+lego_extra_flags: []
+
+# renewal settings
+certbot_renewal_hook_file_name: "example"
+certbot_renewal_hook: |
   #!/bin/sh
 
   cp {{ certbot_live_dir }}/fullchain.pem {{ certbot_application_dir }}
diff --git a/tasks/CentOS-packages-webserver.yml b/tasks/CentOS-packages-webserver.yml
deleted file mode 100644
index 4915865bff78928e93c539c4911dd3565e7d8f54..0000000000000000000000000000000000000000
--- a/tasks/CentOS-packages-webserver.yml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-- name: Install Certbot
-  ansible.builtin.package:
-    name: # sadly doesn't as a list
-      - "{{ item }}"
-    state: present
-  loop:
-    - epel-release
-    - certbot
-  become: true
diff --git a/tasks/CentOS-timer-webserver.yml b/tasks/CentOS-timer-webserver.yml
deleted file mode 100644
index 78b2674c34b706766557eb7528b9510457556136..0000000000000000000000000000000000000000
--- a/tasks/CentOS-timer-webserver.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Enable Letsencrypt Renew Timer
-  ansible.builtin.systemd:
-    name: certbot-renew.timer
-    state: started
-    enabled: true
-  become: true
diff --git a/tasks/Debian-packages-webserver.yml b/tasks/Debian-packages-webserver.yml
deleted file mode 100644
index 42ad8f174eba9e90aba720960a8da0b8f6db0434..0000000000000000000000000000000000000000
--- a/tasks/Debian-packages-webserver.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Install Certbot
-  ansible.builtin.apt:
-    name: certbot
-    state: present
-    update_cache: true
-  become: true
diff --git a/tasks/Debian-timer-webserver.yml b/tasks/Debian-timer-webserver.yml
deleted file mode 100644
index 519207159281893a5774a0892983a368dbedb600..0000000000000000000000000000000000000000
--- a/tasks/Debian-timer-webserver.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Enable Letsencrypt Renew Timer
-  ansible.builtin.systemd:
-    name: certbot.timer
-    state: started
-    enabled: true
-  become: true
diff --git a/tasks/Fedora-packages-webserver.yml b/tasks/Fedora-packages-webserver.yml
deleted file mode 100644
index 5c319309c8e50fa596ada8363c324d5d9a5ae117..0000000000000000000000000000000000000000
--- a/tasks/Fedora-packages-webserver.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- name: Install Certbot
-  ansible.builtin.package:
-    name: certbot
-    state: present
-  become: true
diff --git a/tasks/Fedora-timer-webserver.yml b/tasks/Fedora-timer-webserver.yml
deleted file mode 100644
index 78b2674c34b706766557eb7528b9510457556136..0000000000000000000000000000000000000000
--- a/tasks/Fedora-timer-webserver.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Enable Letsencrypt Renew Timer
-  ansible.builtin.systemd:
-    name: certbot-renew.timer
-    state: started
-    enabled: true
-  become: true
diff --git a/tasks/Ubuntu-packages-webserver.yml b/tasks/Ubuntu-packages-webserver.yml
deleted file mode 100644
index 42ad8f174eba9e90aba720960a8da0b8f6db0434..0000000000000000000000000000000000000000
--- a/tasks/Ubuntu-packages-webserver.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Install Certbot
-  ansible.builtin.apt:
-    name: certbot
-    state: present
-    update_cache: true
-  become: true
diff --git a/tasks/Ubuntu-timer-webserver.yml b/tasks/Ubuntu-timer-webserver.yml
deleted file mode 100644
index 519207159281893a5774a0892983a368dbedb600..0000000000000000000000000000000000000000
--- a/tasks/Ubuntu-timer-webserver.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Enable Letsencrypt Renew Timer
-  ansible.builtin.systemd:
-    name: certbot.timer
-    state: started
-    enabled: true
-  become: true
diff --git a/tasks/application.yml b/tasks/application.yml
deleted file mode 100644
index b9bf4b4841d33071aba2d4ae942bca6c5cdf8036..0000000000000000000000000000000000000000
--- a/tasks/application.yml
+++ /dev/null
@@ -1,34 +0,0 @@
----
-- name: Ensure Application Certificate Directory exists
-  ansible.builtin.file:
-    path: "{{ certbot_application_dir }}"
-    state: directory
-    owner: root
-    group: root
-    mode: "0755"
-  become: true
-
-- name: Check Whether Application Cert Exists
-  ansible.builtin.stat:
-    path: "{{ certbot_application_dir }}/fullchain.pem"
-  register: leoacert
-  become: true
-
-- name: Setup Application Deploy Hook
-  ansible.builtin.copy:
-    dest: "/etc/letsencrypt/renewal-hooks/deploy/{{ certbot_application }}"
-    content: "{{ certbot_application_deploy_hook }}"
-    mode: "0755"
-  become: true
-
-- name: Copy Application Cert If Necessary
-  ansible.builtin.copy:
-    src: "{{ item }}"
-    dest: "{{ certbot_application_dir }}"
-    remote_src: true
-    mode: "0644"
-  loop:
-    - "{{ certbot_live_dir }}/fullchain.pem"
-    - "{{ certbot_live_dir }}/privkey.pem"
-  when: not leoacert.stat.exists
-  become: true
diff --git a/tasks/dns-challenge.yml b/tasks/dns-challenge.yml
index 15b94bb6864c8d917a7617032fa305b00445197f..8916ec2e04cd16dc2b21f127d376f67847b66c15 100644
--- a/tasks/dns-challenge.yml
+++ b/tasks/dns-challenge.yml
@@ -38,13 +38,6 @@
     - /etc/letsencrypt/renewal-hooks/deploy
   become: true
 
-- name: Render deploy hook script
-  ansible.builtin.template:
-    src: templates/renew-hook.sh.j2
-    dest: /etc/letsencrypt/renewal-hooks/deploy/create-fullchain.sh
-    mode: '0755'
-  become: true
-
 - name: Request Cert If Necessary - DNS Challenge
   when: not lecert.stat.exists
   become: true
@@ -60,26 +53,16 @@
       changed_when: lego.rc == 0
 
     - name: Mirror Letsencrypt Structure
-      block:
-        - name: Copy cert and key files
-          ansible.builtin.copy:
-            src: "{{ item.src }}"
-            dest: "{{ item.dest }}"
-            owner: root
-            group: root
-            mode: '0600'
-            remote_src: true
-          loop:
-            - { src: "{{ certbot_live_dir }}/certificates/{{ certbot_fqdn_first }}.crt", dest: "{{ certbot_live_dir }}/cert.pem" }
-            - { src: "{{ certbot_live_dir }}/certificates/{{ certbot_fqdn_first }}.key", dest: "{{ certbot_live_dir }}/privkey.pem" }
-
-        - name: Build fullchain.pem file
-          ansible.builtin.shell:
-            cmd: >-
-              cat "{{ certbot_live_dir }}/certificates/{{ certbot_fqdn_first }}.crt" >> "{{ certbot_live_dir }}/fullchain.pem" &&
-              cat "{{ certbot_live_dir }}/certificates/{{ certbot_fqdn_first }}.issuer.crt" >> "{{ certbot_live_dir }}/fullchain.pem"
-          changed_when: false
-
+      ansible.builtin.copy:
+        src: "{{ item.src }}"
+        dest: "{{ item.dest }}"
+        owner: root
+        group: root
+        mode: '0600'
+        remote_src: true
+      loop:
+        - { src: "{{ certbot_live_dir }}/certificates/{{ certbot_fqdn_first }}.crt", dest: "{{ certbot_live_dir }}/cert.pem" }
+        - { src: "{{ certbot_live_dir }}/certificates/{{ certbot_fqdn_first }}.key", dest: "{{ certbot_live_dir }}/privkey.pem" }
 
 - name: Render Systemd Files
   become: true
@@ -102,9 +85,9 @@
         dest: /lib/systemd/system/dns-challenge.timer
         mode: "0644"
 
-- name: Setup Certbot With Application
-  ansible.builtin.include_tasks: "application.yml"
-  when: certbot_application is defined
+- name: Setup renewal hook
+  ansible.builtin.include_tasks: "renewal-hook.yml"
+  when: certbot_renewal_hook is defined
 
 - name: Enable LEGO Renew Timer
   ansible.builtin.systemd:
diff --git a/tasks/renewal-hook.yml b/tasks/renewal-hook.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a24a31c7a80e31b7ec008a6f7b7e7c1a5c558c3e
--- /dev/null
+++ b/tasks/renewal-hook.yml
@@ -0,0 +1,7 @@
+---
+- name: Setup Renewal Hook
+  ansible.builtin.copy:
+    dest: "/etc/letsencrypt/renewal-hooks/deploy/{{ certbot_renewal_hook_file_name }}"
+    content: "{{ certbot_renewal_hook }}"
+    mode: "0755"
+  become: true
diff --git a/tasks/webserver.yml b/tasks/webserver.yml
index 96e60749ca9688e3a8a7d841435aad74a88a8051..06f4e649f3a990c95b379bb6af3a0c5fbc71a23d 100644
--- a/tasks/webserver.yml
+++ b/tasks/webserver.yml
@@ -1,5 +1,24 @@
+---
 - name: Install Packages Based On Distribution
-  ansible.builtin.include_tasks: "{{ ansible_facts.distribution }}-packages-webserver.yml"
+  become: true
+  block:
+    - name: Install epel-release on CentOS
+      when: ansible_facts.distribution == "CentOS"
+      ansible.builtin.yum:
+        name: epel-release
+        state: present
+
+    - name: Install certbot
+      ansible.builtin.package:
+        name: "{{ certbot_pkg_name[ansible_facts.distribution] }}"
+        state: present
+
+    - name: Disable 'epel' again
+      when: ansible_facts.distribution == "CentOS"
+      ansible.builtin.yum_repository:
+        name: epel
+        state: absent
+
 
 - name: Check Whether Cert Exists
   ansible.builtin.stat:
@@ -46,9 +65,13 @@
   changed_when: cbwebroot.rc == 0
   become: true
 
-- name: Setup Certbot With Application
-  ansible.builtin.include_tasks: "application.yml"
-  when: certbot_application is defined
+- name: Setup Certbot renewal hook
+  ansible.builtin.include_tasks: "renewal-hook.yml"
+  when: certbot_renewal_hook is defined
 
 - name: Enable Letsencrypt Renew Timer Based On Distribution
-  ansible.builtin.include_tasks: "{{ ansible_facts.distribution }}-timer-webserver.yml"
+  become: true
+  ansible.builtin.systemd:
+    name: "{{ certbot_itmer_name[ansible_facts.distribution] }}"
+    state: started
+    enabled: true
diff --git a/templates/dns-challenge.service.j2 b/templates/dns-challenge.service.j2
index 107dbe91e385459eb1ba05a7154e1369882de0b7..695172dbb39851e1faa54b3980912e1b2fd2a7ce 100644
--- a/templates/dns-challenge.service.j2
+++ b/templates/dns-challenge.service.j2
@@ -5,8 +5,7 @@ Description=LEGO DNS challenge
 
 [Service]
 Type=oneshot
-ExecStart=/usr/bin/lego -a --dns {{ certbot_dns_provider }} --email {{ certbot_admin_email }} -d {{ lego_dflag }} --path {{ certbot_live_dir }} renew --no-bundle --renew-hook /etc/letsencrypt/renewal-hooks/deploy/create-fullchain.sh
+ExecStart=/usr/bin/lego -a --dns {{ certbot_dns_provider }} --email {{ certbot_admin_email }} -d {{ lego_dflag }} --path {{ certbot_live_dir }} renew {% for f in lego_extra_flags %}{{ f }} {% endfor %} {{ '--renew-hook /etc/letsencrypt/renewal-hooks/deploy/' + certbot_renewal_hook_file_name if certbot_renewal_hook is defined else ''}}
 ExecStartPost=cp {{ certbot_live_dir }}/certificates/{{ certbot_fqdn_first }}.crt {{ certbot_live_dir }}/cert.pem
 ExecStartPost=cp {{ certbot_live_dir }}/certificates/{{ certbot_fqdn_first }}.key {{ certbot_live_dir }}/privkey.pem
-{{ "ExecStartPost=/etc/letsencrypt/renewal-hooks/deploy/" + certbot_application if certbot_application is defined else "" }}
 EnvironmentFile=/etc/default/dns-challenge.env
diff --git a/templates/renew-hook.sh.j2 b/templates/renew-hook.sh.j2
deleted file mode 100644
index 820e87a1721bd09017a9278c96560789f5f05e0a..0000000000000000000000000000000000000000
--- a/templates/renew-hook.sh.j2
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env bash
-
-cat {{ certbot_live_dir }}/certificates/{{ certbot_fqdn_first }}.crt >> {{ certbot_live_dir }}/fullchain.pem
-cat {{ certbot_live_dir }}/certificates/{{ certbot_fqdn_first }}.issuer.crt >> {{ certbot_live_dir }}/fullchain.pem
\ No newline at end of file