diff --git a/themes/dracula/css/style.css b/themes/dracula/css/style.css
index 3c6ca73..1ec2d23 100644
--- a/themes/dracula/css/style.css
+++ b/themes/dracula/css/style.css
@@ -130,6 +130,9 @@ body {
   font-weight: bold;
   cursor: default;
 }
+#cover:focus {
+  outline: 0 !important;
+}
 
 /* Login form */
 
diff --git a/themes/dracula/index.html b/themes/dracula/index.html
index f99c4ea..71839de 100644
--- a/themes/dracula/index.html
+++ b/themes/dracula/index.html
@@ -8,7 +8,7 @@
   
   
 
-  
+  
 
 
 
@@ -18,9 +18,9 @@
      -  
+
   
 
-  
+  
 
   
 
diff --git a/themes/dracula/js/battery.js b/themes/dracula/js/battery.js
index 1668f33..792c64f 100644
--- a/themes/dracula/js/battery.js
+++ b/themes/dracula/js/battery.js
@@ -9,14 +9,15 @@ class Battery {
     this._info = lightdm.batteryData
     var level = this._info.level
     var state = this._info.state
+    var ac = this._info.ac_status
     var icon = 0
     var charging = ""
     var blevel = Math.floor(level / 10) * 10
     icon = `-${blevel}`
-    charging = state == "Charging" ? "-charging" : ""
+    charging = ac == 1 ? "-charging" : ""
 
     if (blevel < 10) icon = "-outline"
-    if (state == "Full" ) { icon = ""; charging = ""}
+    if (level == 100 && ac == 0) {icon = ""}
     if (level >= 0) {
       this._battery.style.visibility = "visible"
       this._battery.innerHTML = ` ${level}%`
diff --git a/themes/dracula/js/layouts.js b/themes/dracula/js/layouts.js
new file mode 100644
index 0000000..cbd1133
--- /dev/null
+++ b/themes/dracula/js/layouts.js
@@ -0,0 +1,77 @@
+class Layouts {
+	constructor() {
+		this._layoutList = document.querySelector("#layouts-list")
+		this._dropdown = document.querySelector("#layouts-dropdown")
+		this._button = document.querySelector("#layouts-button")
+		this._layouts = []
+
+		this.layout = {}
+
+		this._init()
+	}
+
+	_setDefault() {
+		let name = this.layout.name
+		let description = this.layout.description
+		let short = this.layout.short_description
+		this._button.innerHTML = name.toUpperCase() + (short ? ` (${short})` : "")
+		//this._button.name = description
+	}
+
+	_setLayoutList() {
+		let dropdown = this._dropdown
+		dropdown.innerHTML = ""
+		for (let i = 0; i < this._layouts.length; i++) {
+			let name = this._layouts[i].name
+			let description = this._layouts[i].description
+			let short = this._layouts[i].short_description
+			let li = document.createElement("li")
+			let button = document.createElement("button")
+			button.innerHTML = name + (short ? ` (${short})` : "")
+			button.name = description
+			button.addEventListener("click", () => {
+				this.layout = this._layouts[i]
+				this._setDefault()
+				lightdm.layout = this.layout
+			})
+			li.appendChild(button)
+			dropdown.appendChild(li)
+		}
+	}
+
+	_setKeydown() {
+		let dropdown = this._dropdown
+		dropdown.addEventListener("keydown", (ev) => {
+			if (ev.keyCode == 27) {
+				dropdown.classList.add("hide")
+				this._button.focus()
+			}
+		})
+	}
+
+	_setButton() {
+		let dropdown = this._dropdown
+		document.querySelector("#screen").addEventListener("click", (ev) => {
+			if (ev.target == this._button || ev.target.parentElement == this._button) {
+				dropdown.classList.toggle("hide")
+			} else
+			if (ev.target != dropdown && ev.target.closest(".dropdown") == null) {
+				dropdown.classList.add("hide")
+			}
+		})
+		document.querySelector("#screen").addEventListener("focusin", (ev) => {
+			if (!dropdown.contains(document.activeElement) && document.activeElement != this._button) {
+				dropdown.classList.add("hide")
+			}
+		})
+	}
+
+	_init() {
+		this.layout = lightdm.layout
+		this._layouts = greeter_config.layouts
+		this._setDefault()
+		this._setLayoutList()
+		this._setButton()
+		this._setKeydown()
+	}
+}
diff --git a/themes/dracula/js/power.js b/themes/dracula/js/power.js
index 5a2269e..9cc5413 100644
--- a/themes/dracula/js/power.js
+++ b/themes/dracula/js/power.js
@@ -12,6 +12,9 @@ class Power {
   _show_message(text) {
     this._covermsg.innerHTML = text
     this._cover.classList.remove("hide")
+    wait(500).then(() => {
+      this._cover.focus()
+    })
   }
 
   async _do_shutdown() {
@@ -67,6 +70,9 @@ class Power {
     this._cover.addEventListener("click", () => {
       this._cover.classList.add("hide")
     })
+    this._cover.addEventListener("keydown", () => {
+      this._cover.classList.add("hide")
+    })
   }
 
   _setButtons() {
diff --git a/themes/gruvbox/js/battery.js b/themes/gruvbox/js/battery.js
index 1668f33..792c64f 100644
--- a/themes/gruvbox/js/battery.js
+++ b/themes/gruvbox/js/battery.js
@@ -9,14 +9,15 @@ class Battery {
     this._info = lightdm.batteryData
     var level = this._info.level
     var state = this._info.state
+    var ac = this._info.ac_status
     var icon = 0
     var charging = ""
     var blevel = Math.floor(level / 10) * 10
     icon = `-${blevel}`
-    charging = state == "Charging" ? "-charging" : ""
+    charging = ac == 1 ? "-charging" : ""
 
     if (blevel < 10) icon = "-outline"
-    if (state == "Full" ) { icon = ""; charging = ""}
+    if (level == 100 && ac == 0) {icon = ""}
     if (level >= 0) {
       this._battery.style.visibility = "visible"
       this._battery.innerHTML = ` ${level}%`
diff --git a/themes/gruvbox/js/power.js b/themes/gruvbox/js/power.js
index 94074f7..72e77ad 100644
--- a/themes/gruvbox/js/power.js
+++ b/themes/gruvbox/js/power.js
@@ -70,6 +70,9 @@ class Power {
     this._cover.addEventListener("click", () => {
       this._cover.classList.add("hide")
     })
+    this._cover.addEventListener("keydown", () => {
+      this._cover.classList.add("hide")
+    })
   }
 
   _setButtons() {