diff --git a/core/js/jquery.ocdialog.js b/core/js/jquery.ocdialog.js
index bafbd0e0e9f9dbe69f9f47e117a6b2aeef9c506f..f1836fd4727f7d09d8ed5c97e80d4d0f62d93149 100644
--- a/core/js/jquery.ocdialog.js
+++ b/core/js/jquery.ocdialog.js
@@ -39,7 +39,8 @@
 					return;
 				}
 				// Escape
-				if(event.keyCode === 27 && self.options.closeOnEscape) {
+				if(event.keyCode === 27 && event.type === 'keydown' && self.options.closeOnEscape) {
+					event.stopImmediatePropagation();
 					self.close();
 					return false;
 				}
@@ -83,20 +84,21 @@
 			var self = this;
 			switch(key) {
 				case 'title':
-					var $title = $('<h3 class="oc-dialog-title">' + this.options.title
-						+ '</h3>'); //<hr class="oc-dialog-separator" />');
 					if(this.$title) {
-						this.$title.replaceWith($title);
+						this.$title.text(value);
 					} else {
+						var $title = $('<h3 class="oc-dialog-title">'
+							+ value
+							+ '</h3>');
 						this.$title = $title.prependTo(this.$dialog);
 					}
 					this._setSizes();
 					break;
 				case 'buttons':
-					var $buttonrow = $('<div class="oc-dialog-buttonrow" />');
 					if(this.$buttonrow) {
-						this.$buttonrow.replaceWith($buttonrow);
+						this.$buttonrow.empty();
 					} else {
+						var $buttonrow = $('<div class="oc-dialog-buttonrow" />');
 						this.$buttonrow = $buttonrow.appendTo(this.$dialog);
 					}
 					$.each(value, function(idx, val) {
@@ -124,6 +126,8 @@
 						$closeButton.on('click', function() {
 							self.close();
 						});
+					} else {
+						this.$dialog.find('.oc-dialog-close').remove();
 					}
 					break;
 				case 'width':