diff --git a/Text/Chatty/Channel/Broadcast.hs b/Text/Chatty/Channel/Broadcast.hs
new file mode 100644
--- /dev/null
+++ b/Text/Chatty/Channel/Broadcast.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances #-}
+{-
+  This module is part of Chatty.
+  Copyleft (c) 2014 Marvin Cohrs
+
+  All wrongs reversed. Sharing is an act of love, not crime.
+  Please share Antisplice with everyone you like.
+
+  Chatty is free software: you can redistribute it and/or modify
+  it under the terms of the GNU Affero General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Chatty is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU Affero General Public License for more details.
+
+  You should have received a copy of the GNU Affero General Public License
+  along with Chatty. If not, see <http://www.gnu.org/licenses/>.
+-}
+
+-- | Provides a printer class that may broadcast to all channels that fulfill a condition.
+module Text.Chatty.Channel.Broadcast where
+
+import Control.Arrow
+import Control.Monad
+import Control.Monad.IO.Class
+import Control.Monad.Trans.Class
+import Text.Chatty.Printer
+import Text.Chatty.Channel.Printer
+
+-- | Typeclass for all channel printers that may broadcast to all channels that fulfill a condition.
+class ChannelPrinter c m => Broadcaster c m where
+  -- | Run the function and print to all channels that fulfill the given condition.
+  bbracket :: (c -> m Bool) -> m a -> m a
+  bbracket f m = bstart f >> m >>= \a -> bfin f >> return a
+  -- | From now on use the given condition to determine the channels to print to.
+  bstart :: (c -> m Bool) -> m ()
+  -- | Return to the previous condition. The argument is bogus (just for type inference).
+  bfin :: (c -> m Bool) -> m ()
+  -- | Print the string to all channels that fulfill the current condition.
+  bprint :: (c -> m Bool) -> String -> m ()
+  bprint f str = bbracket f $ mprint str
diff --git a/Text/Chatty/Interactor/Templates.hs b/Text/Chatty/Interactor/Templates.hs
--- a/Text/Chatty/Interactor/Templates.hs
+++ b/Text/Chatty/Interactor/Templates.hs
@@ -31,6 +31,7 @@
 import Text.Chatty.Expansion.Vars
 import Text.Chatty.Expansion.History
 import Text.Chatty.Channel.Printer
+import Text.Chatty.Channel.Broadcast
 import System.Chatty.Spawn
 import Text.Chatty.Extended.Printer
 import Control.Monad
@@ -85,9 +86,25 @@
   where sx = strToType s
         cx = strToType c
 
+{-- | Automatically derives a Broadcaster instance for you.
+mkBroadcaster :: Name -> Name -> Q [Dec]
+mkBroadcaster c s = [d|
+    instance Broadcaster $cx m => Broadcaster $cx ($sx m) where
+      bstart = lift . bstart
+      bfin = lift . bfin
+      bprint b = lift . bprint b
+  |]
+  where sx = strToType s
+        cx = strToType c-}
+
+-- | Automatically derives ChannelPrinter instances for 'Int', 'Bool' and 'Handle' channels.
 mkDefCP :: Name -> Q [Dec]
 mkDefCP s = mkInteractor s (mkChannelPrinter ''Int) (mkChannelPrinter ''Bool) (mkChannelPrinter ''Handle)
 
+{-- | Automatically derives Broadcaster instances for 'Int', 'Bool' and 'Handle' channels
+mkDefBC :: Name -> Q [Dec]
+mkDefBC s = mkInteractor s (mkBroadcaster ''Int) (mkBroadcaster ''Bool) (mkBroadcaster ''Handle)-}
+
 -- | Automatically derives a MonadFinalizer instance for you.
 mkFinalizer :: Name -> Q [Dec]
 mkFinalizer s = [d|
@@ -157,6 +174,7 @@
   mkPrinter mkScanner mkFinalizer mkExpander
   mkSpawn mkRandom mkClock mkExpanderEnv
   mkHistoryEnv mkDefCP mkExtendedPrinter
+--  mkDefBC
 
 -- | Automatically derives all chatty typeclasses that are sensible for an ArchiverT.
 mkArchiver :: Name -> Q [Dec]
diff --git a/chatty.cabal b/chatty.cabal
--- a/chatty.cabal
+++ b/chatty.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.4.0.0
+version:             0.4.1.0
 
 -- A short (one-line) description of the package.
 synopsis:            Some monad transformers and typeclasses to simplify I/O on a transformer stack.
@@ -48,7 +48,7 @@
 
 library
   -- Modules exported by the library.
-  exposed-modules:     Text.Chatty.Expansion, System.Chatty.Commands, System.Chatty.Spawn, Text.Chatty.Printer, Text.Chatty.Finalizer, Text.Chatty.Templates, Text.Chatty.Scanner, Text.Chatty.Interactor, System.Chatty.Spawn.Overlay, System.Chatty.Spawn.Builtins, Text.Chatty.Interactor.Templates, System.Chatty.Misc, Text.Chatty.Extended.Printer, Text.Chatty.Extended.HTML, Text.Chatty.Extended.ANSI, Text.Chatty.Expansion.Vars, Text.Chatty.Expansion.History, Text.Chatty.Channel.Printer
+  exposed-modules:     Text.Chatty.Expansion, System.Chatty.Commands, System.Chatty.Spawn, Text.Chatty.Printer, Text.Chatty.Finalizer, Text.Chatty.Templates, Text.Chatty.Scanner, Text.Chatty.Interactor, System.Chatty.Spawn.Overlay, System.Chatty.Spawn.Builtins, Text.Chatty.Interactor.Templates, System.Chatty.Misc, Text.Chatty.Extended.Printer, Text.Chatty.Extended.HTML, Text.Chatty.Extended.ANSI, Text.Chatty.Expansion.Vars, Text.Chatty.Expansion.History, Text.Chatty.Channel.Printer, Text.Chatty.Channel.Broadcast
   
   -- Modules included in this library but not exported.
   -- other-modules:       
