diff --git a/src/QBar/Core.hs b/src/QBar/Core.hs
index 49b01a314879e4fbf07716858e6460bd4a7419ac..e0a2867e030fcafa2e0a30aad6cc851e29f09e1a 100644
--- a/src/QBar/Core.hs
+++ b/src/QBar/Core.hs
@@ -5,6 +5,7 @@ module QBar.Core where
 
 import QBar.BlockOutput
 import QBar.Time
+import QBar.Util
 
 import Control.Concurrent.Async
 import Control.Concurrent.Event as Event
@@ -17,6 +18,7 @@ import Control.Monad.Writer (WriterT)
 import Data.Aeson.TH
 import Data.Either (isRight)
 import Data.Int (Int64)
+import Data.Maybe (fromMaybe)
 import qualified Data.Text.Lazy as T
 import Pipes
 import Pipes.Concurrent
@@ -242,14 +244,25 @@ newCache'' = do
 
 -- |Creates a cache from a push block.
 cachePushBlock :: PushBlock -> BlockCache
-cachePushBlock pushBlock = newCache $ () <$ (pushBlock >-> updateBarP)
+cachePushBlock pushBlock = newCache $ () <$ (pushBlock >-> updateBarP >-> fixBlockName >-> PP.map (\a -> [a]))
   where
-    updateBarP :: Pipe BlockUpdate [BlockState] BarIO PushMode
+    updateBarP :: Pipe BlockUpdate BlockState BarIO r
     updateBarP = forever $ do
       (state, reason) <- await
-      yield [state]
+      yield state
       updateBar reason
 
+    -- |Sets 'blockName' to a random (but static) identifier if an event handler is set but the 'blockName' is not set.
+    fixBlockName :: Pipe BlockState BlockState BarIO r
+    fixBlockName = do
+      defaultBlockName <- randomIdentifier
+      forever $ do
+        state <- await
+        yield $ if hasEventHandler state
+          then (_Just . _1 . blockName) %~ (Just . fromMaybe defaultBlockName) $ state
+          else state
+
+
 
 modify :: (BlockOutput -> BlockOutput) -> Pipe BlockUpdate BlockUpdate BarIO r
 modify x = PP.map (over (_1 . _Just . _1) x)
diff --git a/src/QBar/DefaultConfig.hs b/src/QBar/DefaultConfig.hs
index 7c76cc81d2a1dda9059c63c5874c93da4c837c78..a4865e9dea97ceefcbbb4af9bc7ef8e876adb7c7 100644
--- a/src/QBar/DefaultConfig.hs
+++ b/src/QBar/DefaultConfig.hs
@@ -6,16 +6,13 @@ import QBar.Core
 
 import Pipes
 
-import Control.Lens
-
 defaultBarConfig :: BarIO ()
 defaultBarConfig = do
-  let battery = batteryBlock >-> modify (blockName ?~ "battery")
-  let cpuUsage = cpuUsageBlock 1 >-> modify ((blockName ?~ "cpuUsage") . addIcon "💻\xFE0E")
+  let cpuUsage = cpuUsageBlock 1 >-> modify (addIcon "💻\xFE0E")
 
   -- TODO: commented-out blocks should be added as soon as they are implemented in qbar
   addBlock dateBlock
-  addBlock battery
+  addBlock batteryBlock
   --addBlock volumeBlock
   addBlock cpuUsage
   --addBlock ramUsageBlock
@@ -30,11 +27,10 @@ legacyBarConfig = do
   let ram = (scriptBlock $ blockLocation "memory") >-> modify (addIcon "🐏\xFE0E") >-> autoPadding
   let temperature = (scriptBlock $ blockLocation "temperature") >-> autoPadding
   let volumeBlock = persistentScriptBlock $ blockLocation "volume-pulseaudio -S -F3"
-  let battery = batteryBlock >-> modify (blockName ?~ "battery")
-  let cpuUsage = cpuUsageBlock 1 >-> modify ((blockName ?~ "cpuUsage") . addIcon "💻\xFE0E")
+  let cpuUsage = cpuUsageBlock 1 >-> modify (addIcon "💻\xFE0E")
 
   addBlock dateBlock
-  addBlock battery
+  addBlock batteryBlock
   addBlock volumeBlock
   addBlock temperature
   addBlock ram