diff --git a/.version b/.version
index e70b452..6a6a3d8 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-2.6.0
+2.6.1
diff --git a/README.md b/README.md
index b94dbcd..c798a6f 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 <p align="center">
 	<img src="https://nginxproxymanager.com/github.png">
 	<br><br>
-	<img src="https://img.shields.io/badge/version-2.6.0-green.svg?style=for-the-badge">
+	<img src="https://img.shields.io/badge/version-2.6.1-green.svg?style=for-the-badge">
 	<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
 		<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
 	</a>
diff --git a/backend/templates/proxy_host.conf b/backend/templates/proxy_host.conf
index 1c2c0e7..17a5210 100644
--- a/backend/templates/proxy_host.conf
+++ b/backend/templates/proxy_host.conf
@@ -37,7 +37,9 @@ server {
     {% endfor %}deny all;
 
     # Access checks must...
+    {% if access_list.satisfy %}
     {{ access_list.satisfy }};
+    {% endif %}
 
     {% endif %}
 
diff --git a/frontend/js/app/api.js b/frontend/js/app/api.js
index baa5cb1..9d11d26 100644
--- a/frontend/js/app/api.js
+++ b/frontend/js/app/api.js
@@ -139,7 +139,11 @@ function FileUpload(path, fd) {
         xhr.onreadystatechange = function () {
             if (this.readyState === XMLHttpRequest.DONE) {
                 if (xhr.status !== 200 && xhr.status !== 201) {
-                    reject(new Error('Upload failed: ' + xhr.status));
+                    try {
+                        reject(new Error('Upload failed: ' + JSON.parse(xhr.responseText).error.message));
+                    } catch (err) {
+                        reject(new Error('Upload failed: ' + xhr.status));
+                    }  
                 } else {
                     resolve(xhr.responseText);
                 }
@@ -587,7 +591,8 @@ module.exports = {
              * @param {Object}  data
              */
             create: function (data) {
-                const timeout = 180000 + (data.meta.propagation_seconds ? Number(data.meta.propagation_seconds) * 1000 : 0);
+
+                const timeout = 180000 + (data && data.meta && data.meta.propagation_seconds ? Number(data.meta.propagation_seconds) * 1000 : 0);
                 return fetch('post', 'nginx/certificates', data, {timeout});
             },
 
diff --git a/frontend/js/app/nginx/certificates/form.ejs b/frontend/js/app/nginx/certificates/form.ejs
index 270ab71..4e40e0b 100644
--- a/frontend/js/app/nginx/certificates/form.ejs
+++ b/frontend/js/app/nginx/certificates/form.ejs
@@ -4,17 +4,14 @@
         <button type="button" class="close cancel non-loader-content" aria-label="Close" data-dismiss="modal">&nbsp;</button>
     </div>
     <div class="modal-body">
+        <div class="alert alert-danger mb-0 rounded-0" id="le-error-info" role="alert"></div>
         <div class="text-center loader-content">
             <div class="loader mx-auto my-6"></div>
-            <p><%- i18n('ssl', 'obtaining-certificate-info') %></p>
+            <p><%- i18n('ssl', 'processing-info') %></p>
         </div>
         <form class="non-loader-content">
             <div class="row">
                 <% if (provider === 'letsencrypt') { %>
-                    <div class="col-sm-12 col-md-12">
-                        <div class="alert alert-danger" id="le-error-info" role="alert"></div>
-                    </div>
-
                     <div class="col-sm-12 col-md-12">
                         <div class="form-group">
                             <label class="form-label"><%- i18n('all-hosts', 'domain-names') %> <span class="form-required">*</span></label>
diff --git a/frontend/js/app/nginx/certificates/form.js b/frontend/js/app/nginx/certificates/form.js
index 677ba9a..ff488cb 100644
--- a/frontend/js/app/nginx/certificates/form.js
+++ b/frontend/js/app/nginx/certificates/form.js
@@ -76,47 +76,44 @@ module.exports = Mn.View.extend({
                 return;
             }
 
-            let view      = this;
             let data      = this.ui.form.serializeJSON();
             data.provider = this.model.get('provider');
-
-
-
-            let domain_err = false;
-            if (!data.meta.dns_challenge) {                
-                data.domain_names.split(',').map(function (name) {
-                    if (name.match(/\*/im)) {
-                        domain_err = true;
-                    }
-                });
-            }
-
-            if (domain_err) {
-                alert(i18n('ssl', 'no-wildcard-without-dns'));
-                return;
-            }
-
-            // Manipulate
-            if (typeof data.meta === 'undefined') data.meta = {};
-            data.meta.letsencrypt_agree = data.meta.letsencrypt_agree == 1;
-            data.meta.dns_challenge = data.meta.dns_challenge == 1;
-
-            if(!data.meta.dns_challenge){
-                data.meta.dns_provider = undefined;
-                data.meta.dns_provider_credentials = undefined;
-                data.meta.propagation_seconds = undefined;
-            } else {
-                if(data.meta.propagation_seconds === '') data.meta.propagation_seconds = undefined; 
-            }
-
-            if (typeof data.domain_names === 'string' && data.domain_names) {
-                data.domain_names = data.domain_names.split(',');
-            }
-
             let ssl_files = [];
 
-            // check files are attached
-            if (this.model.get('provider') === 'other' && !this.model.hasSslFiles()) {
+            if (data.provider === 'letsencrypt') {
+                if (typeof data.meta === 'undefined') data.meta = {};
+
+                let domain_err = false;
+                if (!data.meta.dns_challenge) {                
+                    data.domain_names.split(',').map(function (name) {
+                        if (name.match(/\*/im)) {
+                            domain_err = true;
+                        }
+                    });
+                }
+
+                if (domain_err) {
+                    alert(i18n('ssl', 'no-wildcard-without-dns'));
+                    return;
+                }
+
+                // Manipulate
+                data.meta.letsencrypt_agree = data.meta.letsencrypt_agree == 1;
+                data.meta.dns_challenge = data.meta.dns_challenge == 1;
+
+                if(!data.meta.dns_challenge){
+                    data.meta.dns_provider = undefined;
+                    data.meta.dns_provider_credentials = undefined;
+                    data.meta.propagation_seconds = undefined;
+                } else {
+                    if(data.meta.propagation_seconds === '') data.meta.propagation_seconds = undefined; 
+                }
+
+                if (typeof data.domain_names === 'string' && data.domain_names) {
+                    data.domain_names = data.domain_names.split(',');
+                }
+            } else if (data.provider === 'other' && !this.model.hasSslFiles()) {
+                // check files are attached
                 if (!this.ui.other_certificate[0].files.length || !this.ui.other_certificate[0].files[0].size) {
                     alert('Certificate file is not attached');
                     return;
@@ -153,14 +150,14 @@ module.exports = Mn.View.extend({
 
             // compile file data
             let form_data = new FormData();
-            if (view.model.get('provider') && ssl_files.length) {
+            if (data.provider === 'other' && ssl_files.length) {
                 ssl_files.map(function (file) {
                     form_data.append(file.name, file.file);
                 });
             }
 
             new Promise(resolve => {
-                if (view.model.get('provider') === 'other') {
+                if (data.provider === 'other') {
                     resolve(App.Api.Nginx.Certificates.validate(form_data));
                 } else {
                     resolve();
@@ -170,13 +167,13 @@ module.exports = Mn.View.extend({
                     return App.Api.Nginx.Certificates.create(data);
                 })
                 .then(result => {
-                    view.model.set(result);
+                    this.model.set(result);
 
                     // Now upload the certs if we need to
-                    if (view.model.get('provider') === 'other') {
-                        return App.Api.Nginx.Certificates.upload(view.model.get('id'), form_data)
+                    if (data.provider === 'other') {
+                        return App.Api.Nginx.Certificates.upload(this.model.get('id'), form_data)
                             .then(result => {
-                                view.model.set('meta', _.assign({}, view.model.get('meta'), result));
+                                this.model.set('meta', _.assign({}, this.model.get('meta'), result));
                             });
                     }
                 })
@@ -187,7 +184,7 @@ module.exports = Mn.View.extend({
                 })
                 .catch(err => {
                     let more_info = '';
-                    if(err.code === 500 && err.debug){
+                    if (err.code === 500 && err.debug) {
                         try{
                             more_info = JSON.parse(err.debug).debug.stack.join("\n");
                         } catch(e) {}
diff --git a/frontend/js/i18n/messages.json b/frontend/js/i18n/messages.json
index 4bfb190..8ce201a 100644
--- a/frontend/js/i18n/messages.json
+++ b/frontend/js/i18n/messages.json
@@ -112,7 +112,7 @@
       "stored-as-plaintext-info": "This data will be stored as plaintext in the database!",
       "propagation-seconds": "Propagation Seconds",
       "propagation-seconds-info": "Leave empty to use the plugins default value. Number of seconds to wait for DNS propagation.",
-      "obtaining-certificate-info": "Obtaining certificate... This might take a few minutes."
+      "processing-info": "Processing... This might take a few minutes."
     },
     "proxy-hosts": {
       "title": "Proxy Hosts",