diff --git a/awesome/battery.lua b/awesome/battery.lua
index d90e824..b3cea08 100644
--- a/awesome/battery.lua
+++ b/awesome/battery.lua
@@ -5,57 +5,65 @@
 local wibox = require("wibox")
 local naughty = require("naughty")
 local beautiful = require("beautiful")
+local awful = require('awful')
+local su = require('su')
 
 local previous_percent = 0
 
-function batteryInfo()
-    local fd = io.popen('acpi | head -n 1 | cut -d ":" -f 2 | cut -d "," -f 2 | tr -d "%"')
-    local percentage = fd:read('*all')
-    fd:close()
-    return tonumber(percentage)
-end
+function batteryInfo(callback)
+    awful.spawn.easy_async('acpi', function(stdout)
+        -- Consider only the first line
+        local line = su.split(stdout, '\n')[1]
 
-function isCharging()
-    local _,_,error = os.execute('acpi | head -n 1 | grep Discharging')
-    return error ~= 0
+        local split = su.split(line, ':')
+
+        -- Extract the percentage from the string
+        local percent = tonumber(su.split(split[2],',')[2]:sub(1, -2))
+
+        -- callback(percent, isCharging)
+        callback(tonumber(percent), not string.find(line, 'Discharging'))
+    end)
 end
 
 function update_battery()
 
-    local percent = batteryInfo()
-    local color
-    local symbol
+    batteryInfo(function(percent, isCharging)
 
-    if percent < 15 then
-        color="red"
-    elseif percent < 30 then
-        color="orange"
-    elseif percent > 90 then
-        color="green"
-    else
-        color="white"
-    end
+        local color
+        local symbol
 
-    if isCharging() then
-        color = 'green'
-        symbol = '⚡'
-    else
-        symbol = '%'
-    end
+        if percent < 15 then
+            color="red"
+        elseif percent < 30 then
+            color="orange"
+        elseif percent > 90 then
+            color="green"
+        else
+            color="white"
+        end
 
-    if previous_percent >= 15 and percent < 15 then
-        naughty.notify({
-            title = "Low battery...",
-            text = "Battery level is lower than 15% !",
-            fg="#000000",
-            bg="#ff0000",
-            timeout=5
-        })
-    end
+        if isCharging then
+            color = 'green'
+            symbol = '⚡'
+        else
+            symbol = '%'
+        end
 
-    battery_widget:set_markup('' .. percent .. ' ' .. symbol .. '')
+        if previous_percent >= 15 and percent < 15 then
+            naughty.notify({
+                title = "Low battery...",
+                text = "Battery level is lower than 15% !",
+                fg="#000000",
+                bg="#ff0000",
+                timeout=5
+            })
+        end
 
-    previous_percent = percent
+        battery_widget:set_markup('' .. percent .. ' ' .. symbol .. '')
+
+        previous_percent = percent
+
+    end)
 
 end
 
diff --git a/awesome/music.lua b/awesome/music.lua
index f5f5388..df09fdf 100644
--- a/awesome/music.lua
+++ b/awesome/music.lua
@@ -1,6 +1,7 @@
 local naughty = require("naughty")
 local wibox = require("wibox")
 local awful = require("awful")
+local su = require('su')
 
 local ret = {}
 ret.text_widget = wibox.widget.textbox()
@@ -18,33 +19,6 @@ local position = 1
 local width = 30
 local dots = 3
 
-local function string_starts_with(String,Start)
-   return string.sub(String,1,string.len(Start))==Start
-end
-
-local function string_split(str, delimiter)
-    if str == nil then
-        return {}
-    end
-    local ret = {''}
-    count = 1
-    for i = 1, string.len(str) do
-        local c = str:sub(i,i)
-        if c == delimiter then
-            count = count + 1
-            ret[count] = ''
-        else
-            ret[count] = ret[count] .. c
-        end
-    end
-    return ret
-end
-
-local function pad(str, len, char)
-    if char == nil then char = ' ' end
-    return str .. string.rep(char, len - #str)
-end
-
 local function set_text(text)
     total_text = text
 
@@ -57,21 +31,21 @@ ret.execute_command = function(command)
 
     awful.spawn.easy_async('music-client ' .. command, function(stdout, stderr, reason, code)
 
-        local text = string_split(stdout, '\n')
+        local text = su.split(stdout, '\n')
         local active_command =
-            string_starts_with(command, 'file') or
-            string_starts_with(command, 'next') or
-            string_starts_with(command, 'previous')
+            su.starts_with(command, 'file') or
+            su.starts_with(command, 'next') or
+            su.starts_with(command, 'previous')
 
         local start_server_command = active_command or
-            string_starts_with(command, 'play') or
-            string_starts_with(command, 'pause')
+            su.starts_with(command, 'play') or
+            su.starts_with(command, 'pause')
 
         if code == 0 then
 
             if active_command then
                 set_text(text[1])
-            elseif string_starts_with(command, 'noop') then
+            elseif su.starts_with(command, 'noop') then
                 total_text = text[1]
                 position = math.floor((width - string.len(total_text)) / 2)
             end
@@ -96,7 +70,7 @@ end
 function update_widget()
     ret.icon_widget:set_text(' ' .. icon .. ' ')
     if string.len(total_text) < width then
-        ret.text_widget:set_text(' ' .. pad(total_text, width + 1, ' '))
+        ret.text_widget:set_text(' ' .. su.pad(total_text, width + 1, ' '))
     else
         local pos = math.min(position, string.len(total_text) - width)
         pos = math.max(1, pos)
diff --git a/awesome/su.lua b/awesome/su.lua
new file mode 100644
index 0000000..319d704
--- /dev/null
+++ b/awesome/su.lua
@@ -0,0 +1,30 @@
+local module = {}
+
+module.starts_with = function(String,Start)
+   return string.sub(String,1,string.len(Start))==Start
+end
+
+module.split = function(str, delimiter)
+    if str == nil then
+        return {}
+    end
+    local ret = {''}
+    count = 1
+    for i = 1, string.len(str) do
+        local c = str:sub(i,i)
+        if c == delimiter then
+            count = count + 1
+            ret[count] = ''
+        else
+            ret[count] = ret[count] .. c
+        end
+    end
+    return ret
+end
+
+module.pad = function(str, len, char)
+    if char == nil then char = ' ' end
+    return str .. string.rep(char, len - #str)
+end
+
+return module