diff --git a/lifx-lan.cabal b/lifx-lan.cabal
--- a/lifx-lan.cabal
+++ b/lifx-lan.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               lifx-lan
-version:            0.4.0.1
+version:            0.5.0
 license:            BSD-3-Clause
 license-file:       LICENSE
 author:             George Thomas
diff --git a/src/Lifx/Lan.hs b/src/Lifx/Lan.hs
--- a/src/Lifx/Lan.hs
+++ b/src/Lifx/Lan.hs
@@ -276,8 +276,7 @@
         m (Map Device (NonEmpty b))
     broadcastAndGetResult filter' maybeFinished msg = do
         timeoutDuration <- getTimeout
-        incrementCounter
-        sendMessage' False (tupleToHostAddress (255, 255, 255, 255)) msg
+        broadcast msg
         t0 <- liftIO getCurrentTime
         fmap (Map.mapKeysMonotonic Device) . flip execStateT Map.empty $ untilM do
             t <- liftIO getCurrentTime
@@ -307,7 +306,7 @@
 
 instance MessageResult () where
     getSendResult = const $ pure ()
-    broadcastAndGetResult = const . const . const $ pure Map.empty
+    broadcastAndGetResult = const $ const $ (Map.empty <$) . broadcast
 instance Response StateService where
     expectedPacketType = 3
     messageSize = 5
@@ -657,14 +656,7 @@
         . recvFrom sock
         $ headerSize + size
 
-{-
-post to forum
-    https://community.lifx.com/c/developing-with-lifx/5
-    link to lifx-manager https://community.lifx.com/c/developing-with-lifx/5
-        screenshot
-        explain user-unfriendliness
-    diss Python
-    diss app
-        or maybe just echo in https://community.lifx.com/t/done-with-lifx-such-a-waste-of-time-and-money/7731/9
-
--}
+broadcast :: MonadLifx m => Message r -> m ()
+broadcast msg = do
+    incrementCounter
+    sendMessage' False (tupleToHostAddress (255, 255, 255, 255)) msg
