diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,10 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
 and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
 
+## 0.6.7
+### Changed
+- Use `>>=` explicitly to avoid problems with the LoggingT monad.
+
 ## 0.6.6
 ### Changed
 - Simplify author name.
diff --git a/nqe.cabal b/nqe.cabal
--- a/nqe.cabal
+++ b/nqe.cabal
@@ -1,13 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.38.0.
+-- This file has been generated from package.yaml by hpack version 0.39.6.
 --
 -- see: https://github.com/sol/hpack
---
--- hash: eccc612cfd9271d97bc20072fbd9bda9b4353231324881cd805cd2cf55df53e1
 
 name:           nqe
-version:        0.6.6
+version:        0.6.7
 synopsis:       Concurrency library in the style of Erlang/OTP
 description:    Please see the README on GitHub at <https://github.com/jprupp/nqe#readme>
 category:       Control
diff --git a/src/Control/Concurrent/NQE/Publisher.hs b/src/Control/Concurrent/NQE/Publisher.hs
--- a/src/Control/Concurrent/NQE/Publisher.hs
+++ b/src/Control/Concurrent/NQE/Publisher.hs
@@ -98,7 +98,10 @@
 publisherProcess :: MonadUnliftIO m => Inbox (PublisherMessage msg) -> m ()
 publisherProcess inbox = newTVarIO [] >>= runReaderT go
   where
-    go = forever $ receive inbox >>= publisherMessage
+    -- Sequenced with (>>=) only: 'forever' uses (*>), which for a monad
+    -- that is only known through its dictionary (LoggingT in particular)
+    -- leaves a continuation frame and two thunks per message, forever.
+    go = receive inbox >>= publisherMessage >>= \_ -> go
 
 -- | Internal function to dispatch a publisher message.
 publisherMessage ::
