diff --git a/mediabus.cabal b/mediabus.cabal
--- a/mediabus.cabal
+++ b/mediabus.cabal
@@ -1,5 +1,5 @@
 name: mediabus
-version: 0.3.0.1
+version: 0.3.1.0
 cabal-version: >=1.10
 build-type: Simple
 license: BSD3
@@ -69,6 +69,7 @@
         lens >=4.15.1 && <4.16,
         lifted-async >=0.9.1.1 && <0.10,
         monad-control >=1.0.1.0 && <1.1,
+        monad-logger >=0.3.20.2 && <0.4,
         mtl >=2.2.1 && <2.3,
         network >=2.6.3.1 && <2.7,
         parallel >=3.2.1.0 && <3.3,
@@ -112,7 +113,7 @@
         conduit >=1.2.9 && <1.3,
         conduit-combinators >=1.1.0 && <1.2,
         conduit-extra >=1.1.15 && <1.2,
-        mediabus >=0.3.0.1 && <0.4,
+        mediabus >=0.3.1.0 && <0.4,
         containers >=0.5.7.1 && <0.6,
         data-default >=0.7.1.1 && <0.8,
         deepseq >=1.4.2.0 && <1.5,
diff --git a/src/Data/MediaBus/Basics/Sequence.hs b/src/Data/MediaBus/Basics/Sequence.hs
--- a/src/Data/MediaBus/Basics/Sequence.hs
+++ b/src/Data/MediaBus/Basics/Sequence.hs
@@ -1,53 +1,65 @@
 -- | This modules contains the 'SeqNum' newtype wrapper to indicate that a type
 -- is a sequence number.
 module Data.MediaBus.Basics.Sequence
-    ( SeqNum(..)
-    , fromSeqNum
-    , type SeqNum8
-    , type SeqNum16
-    , type SeqNum32
-    , type SeqNum64
-    , HasSeqNum(..)
-    ) where
+  ( SeqNum(..)
+  , fromSeqNum
+  , type SeqNum8
+  , type SeqNum16
+  , type SeqNum32
+  , type SeqNum64
+  , HasSeqNum(..)
+  ) where
 
-import           Test.QuickCheck            ( Arbitrary(..) )
-import           Data.MediaBus.Basics.Monotone
-import           Data.MediaBus.Basics.Series
-import           Control.Lens
-import           Data.Default
-import           Text.Printf
-import           GHC.Generics               ( Generic )
-import           Control.DeepSeq
-import           System.Random
-import           Data.Word
+import Control.DeepSeq
+import Control.Lens
+import Data.Default
+import Data.MediaBus.Basics.Monotone
+import Data.MediaBus.Basics.Series
+import Data.Word
+import GHC.Generics (Generic)
+import System.Random
+import Test.QuickCheck (Arbitrary(..))
+import Text.Printf
 
 -- | The newtype wrapper that indicates that something is a sequence number.
-newtype SeqNum s = MkSeqNum { _fromSeqNum :: s }
-    deriving (Num, Eq, Bounded, Enum, LocalOrd, Arbitrary, Default, Generic, Random)
+newtype SeqNum s = MkSeqNum
+  { _fromSeqNum :: s
+  } deriving ( Num
+             , Eq
+             , Bounded
+             , Enum
+             , LocalOrd
+             , Arbitrary
+             , Default
+             , Generic
+             , Random
+             )
 
 instance NFData s =>
          NFData (SeqNum s)
 
 instance HasSeqNum (SeqNum s) where
-    type GetSeqNum (SeqNum s) = s
-    type SetSeqNum (SeqNum s) s' = SeqNum s'
-    seqNum = fromSeqNum
+  type GetSeqNum (SeqNum s) = s
+  type SetSeqNum (SeqNum s) s' = SeqNum s'
+  seqNum = fromSeqNum
 
 instance Show s =>
          Show (SeqNum s) where
-    show (MkSeqNum s) = printf "SEQNUM: %10s" (show s)
+  showsPrec d (MkSeqNum s) =
+    showParen (d > 10) (printf "sn: %10s" . showsPrec 11 s)
 
 instance (Eq a, LocalOrd a) =>
          Ord (SeqNum a) where
-    compare !x !y
-        | x == y = EQ
-        | x `succeeds` y = GT
-        | otherwise = LT
+  compare !x !y
+    | x == y = EQ
+    | x `succeeds` y = GT
+    | otherwise = LT
 
-deriving instance (Real a, Num a, Eq a, LocalOrd a) => Real
-         (SeqNum a)
+deriving instance
+         (Real a, Num a, Eq a, LocalOrd a) => Real (SeqNum a)
 
-deriving instance (Integral a, Enum a, Real a, Eq a, LocalOrd a) =>
+deriving instance
+         (Integral a, Enum a, Real a, Eq a, LocalOrd a) =>
          Integral (SeqNum a)
 
 -- | An 'Iso' between a 'SeqNum' and its' value.
@@ -55,7 +67,6 @@
 fromSeqNum = iso _fromSeqNum MkSeqNum
 
 -- * Type aliases
-
 -- | A 'Word8' based sequence number.
 type SeqNum8 = SeqNum Word8
 
@@ -69,18 +80,17 @@
 type SeqNum64 = SeqNum Word64
 
 -- * Lens type classes
-
 -- | A class for types providing a lens to a sequence number.
 class SetSeqNum t (GetSeqNum t) ~ t =>
       HasSeqNum t where
-    type GetSeqNum t
-    type SetSeqNum t s
-    -- | A lens for the sequence number contained in @t@
-    seqNum :: Lens t (SetSeqNum t s) (GetSeqNum t) s
+  type GetSeqNum t
+  type SetSeqNum t s
+  -- | A lens for the sequence number contained in @t@
+  seqNum :: Lens t (SetSeqNum t s) (GetSeqNum t) s
 
 instance (HasSeqNum a, HasSeqNum b, GetSeqNum a ~ GetSeqNum b) =>
          HasSeqNum (Series a b) where
-    type GetSeqNum (Series a b) = GetSeqNum a
-    type SetSeqNum (Series a b) t = Series (SetSeqNum a t) (SetSeqNum b t)
-    seqNum f (Start !a) = Start <$> seqNum f a
-    seqNum f (Next !b) = Next <$> seqNum f b
+  type GetSeqNum (Series a b) = GetSeqNum a
+  type SetSeqNum (Series a b) t = Series (SetSeqNum a t) (SetSeqNum b t)
+  seqNum f (Start !a) = Start <$> seqNum f a
+  seqNum f (Next !b) = Next <$> seqNum f b
diff --git a/src/Data/MediaBus/Basics/Series.hs b/src/Data/MediaBus/Basics/Series.hs
--- a/src/Data/MediaBus/Basics/Series.hs
+++ b/src/Data/MediaBus/Basics/Series.hs
@@ -34,8 +34,9 @@
 instance (Show a, Show b) =>
          Show (Series a b) where
   showsPrec d (Start !x) =
-    showParen (d > 10) $ showString "START: " . showsPrec 11 x
-  showsPrec d (Next !x) = showsPrec d x
+    showParen (d > 10) $ showString "start: " . showsPrec 11 x
+  showsPrec d (Next !x) =
+    showParen (d > 10) $ showString "next: " . showsPrec 11 x
 
 instance (Ord a, Ord b) =>
          Ord (Series a b) where
diff --git a/src/Data/MediaBus/Basics/SourceId.hs b/src/Data/MediaBus/Basics/SourceId.hs
--- a/src/Data/MediaBus/Basics/SourceId.hs
+++ b/src/Data/MediaBus/Basics/SourceId.hs
@@ -4,26 +4,26 @@
 -- 'SourceId' is that every thing that has a certain source id stems from **the
 -- same media source**, e.g. the same microphone, audio file, synthesizer,...
 module Data.MediaBus.Basics.SourceId
-    ( SourceId(..)
-    , sourceIdValue
-    , type SrcId32
-    , type SrcId64
-    , HasSourceId(..)
-    , EachSourceId(..)
-    ) where
+  ( SourceId(..)
+  , sourceIdValue
+  , type SrcId32
+  , type SrcId64
+  , HasSourceId(..)
+  , EachSourceId(..)
+  ) where
 
-import           Control.Lens
-import           Test.QuickCheck
-import           Data.Default
-import           GHC.Generics    ( Generic )
-import           Control.DeepSeq
-import           Data.Word
+import Control.DeepSeq
+import Control.Lens
+import Data.Default
+import Data.Word
+import GHC.Generics (Generic)
+import Test.QuickCheck
 
 -- | Things that can be uniquely identified by a looking at a (much simpler)
 -- representation, the 'identity'.
-newtype SourceId i = MkSourceId { _sourceIdValue :: i }
-    deriving (Eq, Arbitrary, Default, Ord, Generic)
-
+newtype SourceId i = MkSourceId
+  { _sourceIdValue :: i
+  } deriving (Eq, Arbitrary, Default, Ord, Generic)
 
 -- | An 'Iso' for the value of a 'SourceId'
 sourceIdValue :: Iso (SourceId a) (SourceId b) a b
@@ -40,19 +40,20 @@
 
 instance Show i =>
          Show (SourceId i) where
-    show (MkSourceId x) = "SOURCE-ID: " ++ show x
+  showsPrec d (MkSourceId x) =
+    showParen (d > 10) $ showString "source-id: " . showsPrec 11 x
 
 -- | Type class for a lens over the contained source id
 class HasSourceId s t where
-    type SourceIdFrom s
-    type SourceIdTo t
-    -- | A lens for the 'SourceId'
-    sourceId :: Lens s t (SourceIdFrom s) (SourceIdTo t)
+  type SourceIdFrom s
+  type SourceIdTo t
+  -- | A lens for the 'SourceId'
+  sourceId :: Lens s t (SourceIdFrom s) (SourceIdTo t)
 
 -- | Type class with a 'Traversal' for types that may or may not contain anctual
 -- source id.
 class EachSourceId s t where
-    type SourceIdsFrom s
-    type SourceIdsTo t
-    -- | A 'Traversal' for the 'SourceId'
-    eachSourceId :: Traversal s t (SourceIdsFrom s) (SourceIdsTo t)
+  type SourceIdsFrom s
+  type SourceIdsTo t
+  -- | A 'Traversal' for the 'SourceId'
+  eachSourceId :: Traversal s t (SourceIdsFrom s) (SourceIdsTo t)
diff --git a/src/Data/MediaBus/Basics/Ticks.hs b/src/Data/MediaBus/Basics/Ticks.hs
--- a/src/Data/MediaBus/Basics/Ticks.hs
+++ b/src/Data/MediaBus/Basics/Ticks.hs
@@ -122,8 +122,7 @@
 -- | Types which contain a rate, but are agnostic of it. The counter example would be
 -- if the rate was a type index of a data family.
 class (HasRate i, GetRate i ~ ri, SetRate i rj ~ j, KnownRate rj) =>
-      CoerceRate i j ri rj
-    where
+      CoerceRate i j ri rj where
   -- | Change the static sample rate, without e.g. resampling
   coerceRate :: proxy rj -> i -> SetRate i rj
 
@@ -283,10 +282,11 @@
 
 instance (CanBeTicks r w, Show w) =>
          Show (Ticks r w) where
-  show tix@(MkTicks x) =
+  showsPrec d (MkTicks x) =
+    showParen (d > 7) $
+    showString $
     printf
-      "%10s (%10d @ %10d Hz)"
-      (show (view nominalDiffTime tix))
+      "%8d / %dHz"
       (toInteger x)
       (rateVal (Proxy :: Proxy r))
 
@@ -400,7 +400,6 @@
   => proxy (ticks :/ rate) -> Ticks rate i
 ticksFromStaticDuration _ =
   MkTicks (fromIntegral (natVal (Proxy :: Proxy ticks)))
-
 
 instance (HasTimestamp a, HasTimestamp b, GetTimestamp a ~ GetTimestamp b) =>
          HasTimestamp (Series a b) where
diff --git a/src/Data/MediaBus/Conduit/Async.hs b/src/Data/MediaBus/Conduit/Async.hs
--- a/src/Data/MediaBus/Conduit/Async.hs
+++ b/src/Data/MediaBus/Conduit/Async.hs
@@ -15,19 +15,20 @@
 import Control.Concurrent.STM
 import Control.Exception (evaluate)
 import Control.Lens
+import Control.Monad.Logger
 import Control.Monad.State
 import Control.Parallel.Strategies (NFData, rdeepseq, withStrategy)
 import Data.Default
 import Data.MediaBus.Basics.Clock
 import Data.MediaBus.Basics.Ticks
+import Data.MediaBus.Conduit.Stream
 import Data.MediaBus.Media.Discontinous
 import Data.MediaBus.Media.Stream
-import Data.MediaBus.Conduit.Stream
 import Data.Proxy
 import Data.Time.Clock
-import Debug.Trace
 import System.Random
 import Text.Printf
+import Data.String
 
 data PollFrameContentSourceSt s t = MkPollFrameContentSourceSt
   { _ppSeqNum :: !s
@@ -41,6 +42,7 @@
 -- generating a 'Discontinous' output.
 withAsyncPolledSource
   :: ( MonadResource m
+     , MonadLogger m
      , MonadBaseControl IO m
      , KnownRate r
      , Integral t
@@ -91,7 +93,7 @@
 -- 'FrameContentQ'. When the queue is full, **drop the oldest element** and push
 -- in the new element, anyway.
 frameContentQSink
-  :: (NFData a, MonadBaseControl IO m, Show a)
+  :: (NFData a, MonadBaseControl IO m, Show a, MonadLogger m)
   => FrameContentQ a -> Sink (Stream i s t p a) m ()
 frameContentQSink (MkFrameContentQ _ _ !ringRef) = awaitForever go
   where
@@ -99,13 +101,16 @@
       maybe (return ()) pushInRing (x ^? eachFrameContent)
       return ()
       where
-        pushInRing !buf' =
-          liftBase $ do
-            !buf <- evaluate $ withStrategy rdeepseq buf'
-            atomically $ do
-              isFull <- isFullTBQueue ringRef
-              when isFull (void $ readTBQueue ringRef)
-              writeTBQueue ringRef buf
+        pushInRing !buf' = do
+          isFull <-
+            liftBase $ do
+              !buf <- evaluate $ withStrategy rdeepseq buf'
+              atomically $ do
+                isFull <- isFullTBQueue ringRef
+                when isFull (void $ readTBQueue ringRef)
+                writeTBQueue ringRef buf
+                return isFull
+          when isFull $ $logInfo "queue full"
 
 -- | Periodically poll a 'FrameContentQ' and yield the content as frames with
 -- newly generated timestamp and sequence number values.
@@ -117,6 +122,7 @@
      , HasStaticDuration c
      , HasDuration c
      , MonadBaseControl IO m
+     , MonadLogger m
      , KnownRate r
      , Integral t
      , Integral s
@@ -141,7 +147,9 @@
             !t1 <- now
             return (diffTime t1 t0 ^. utcClockTimeDiff))
     yieldMissing !dt !wasMissing = do
-      unless wasMissing (traceM (printf "*** UNDERFLOW: Missing %s" (show dt))) -- TODO replace by proper logging
+      unless
+        wasMissing
+        ($logDebug (fromString (printf "underflow: %s" (show dt))))
       replicateM_ (floor (dt / pTime)) (yieldNextBuffer Missing)
     yieldStart =
       (MkFrameCtx <$> liftBase randomIO <*> use ppTicks <*> use ppSeqNum <*>
diff --git a/src/Data/MediaBus/Media/Audio.hs b/src/Data/MediaBus/Media/Audio.hs
--- a/src/Data/MediaBus/Media/Audio.hs
+++ b/src/Data/MediaBus/Media/Audio.hs
@@ -10,8 +10,8 @@
 import Data.MediaBus.Basics.Ticks
 import Control.Lens
 
--- | Family of audio media types, indexed by the sampleRate, the channel layout
---   and a /codec/ parameter. This class is intended as a basis for all audio
+-- | Family of audio media types, indexed by a sampleRate, a channel layout
+--   and a /codec/ parameter. This type family is intended as a basis for all audio
 --   media, raw as well as encoded audio.
 data family Audio (sampleRate :: Rate) channelLayout encoding
 
diff --git a/src/Data/MediaBus/Media/Audio/Raw.hs b/src/Data/MediaBus/Media/Audio/Raw.hs
--- a/src/Data/MediaBus/Media/Audio/Raw.hs
+++ b/src/Data/MediaBus/Media/Audio/Raw.hs
@@ -81,7 +81,7 @@
        showsPrec 11 (MkRateProxy :: RateProxy r) .
        showString " " . showsPrec 11 (MkRateProxy :: RateProxy r))
 
-instance (Typeable t, KnownRate r, KnownChannelLayout c, CanBeSample (Pcm c t)) =>
+instance (Typeable t, KnownRate r, KnownChannelLayout c, CanBeSample (Pcm c t), Show (Pcm c t)) =>
          Show (Audio r c (Raw t)) where
   showsPrec d (MkPcm !c) =
     showParen (d > 10) $
diff --git a/src/Data/MediaBus/Media/Audio/Raw/Signed16bit.hs b/src/Data/MediaBus/Media/Audio/Raw/Signed16bit.hs
--- a/src/Data/MediaBus/Media/Audio/Raw/Signed16bit.hs
+++ b/src/Data/MediaBus/Media/Audio/Raw/Signed16bit.hs
@@ -35,7 +35,7 @@
 s16Sample = iso _s16Sample MkS16
 
 instance Show S16 where
-  show (MkS16 !x) = printf "S16: %6d" x
+  showsPrec d (MkS16 !x) = showParen (d > 10) $ showString (printf "S16: %6d" x)
 
 instance CanBeBlank S16 where
   blank = 0
diff --git a/src/Data/MediaBus/Media/Audio/Raw/Stereo.hs b/src/Data/MediaBus/Media/Audio/Raw/Stereo.hs
--- a/src/Data/MediaBus/Media/Audio/Raw/Stereo.hs
+++ b/src/Data/MediaBus/Media/Audio/Raw/Stereo.hs
@@ -35,6 +35,13 @@
   type ChannelsTo (Pcm Stereo b) = b
   eachChannel f (MkStereo !l !r) = MkStereo <$> f l <*> f r
 
+instance Show a =>
+         Show (Pcm Stereo a) where
+  showsPrec d (MkStereo l r) =
+    showParen
+      (d > 10)
+      (showChar 'L' . showsPrec 11 l . showString " R" . showsPrec 11 r)
+
 instance IsPcmValue a =>
          IsPcmValue (Pcm Stereo a) where
   pcmAverage (MkStereo !l0 !r0) (MkStereo !l1 !r1) =
@@ -50,7 +57,7 @@
 
 instance Storable s =>
          Storable (Pcm Stereo s) where
-  sizeOf s = 2 * sizeOf s
+  sizeOf _ = 2 * sizeOf (undefined :: s)
   alignment = alignment
   peekByteOff ptr off = do
     l <- peekByteOff ptr off
diff --git a/src/Data/MediaBus/Media/Buffer.hs b/src/Data/MediaBus/Media/Buffer.hs
--- a/src/Data/MediaBus/Media/Buffer.hs
+++ b/src/Data/MediaBus/Media/Buffer.hs
@@ -44,7 +44,9 @@
 type HasMediaBuffer' s = (HasMediaBuffer s s, MediaBufferFrom s ~ MediaBufferTo s)
 
 -- | Like 'mediaBuffer' but with @s ~ t@ and @MediaBufferFrom s ~ MediaBufferTo t@
-mediaBuffer' :: HasMediaBuffer' s => Lens' s (MediaBufferFrom s)
+mediaBuffer'
+  :: HasMediaBuffer' s
+  => Lens' s (MediaBufferFrom s)
 mediaBuffer' = mediaBuffer
 
 -- | Like 'HasMediaBuffer' but with the typical lens type parameters @s t a b@
@@ -75,11 +77,13 @@
   fromList = mediaBufferFromList
   toList = mediaBufferToList
 
-instance (CanBeSample a) =>
+instance (Show a, CanBeSample a) =>
          Show (MediaBuffer a) where
-  show m =
-    "MediaBuffer: " ++
-    show (mediaBufferLength m) ++ " x " ++ show (typeRep (Proxy :: Proxy a))
+  showsPrec d m =
+    showParen (d > 10) $
+    showString "media buffer: " .
+    showsPrec 8 (mediaBufferLength m) .
+    showString " * " . showsPrec 8 (typeRep (Proxy :: Proxy a))
 
 instance CanBeSample sampleType =>
          Default (MediaBuffer sampleType) where
@@ -93,7 +97,6 @@
 
 -- ** Conversion
 -- *** List Conversion
-
 -- | Convert the media buffer vector contents to a list in O(n).
 mediaBufferToList
   :: CanBeSample s
@@ -107,7 +110,6 @@
 mediaBufferFromList = MkMediaBuffer . V.fromList
 
 -- *** 'ByteString' Conversion
-
 -- | An efficient conversion of a 'ByteString' to a 'MediaBuffer'
 mediaBufferFromByteString
   :: CanBeSample a
diff --git a/src/Data/MediaBus/Media/Segment.hs b/src/Data/MediaBus/Media/Segment.hs
--- a/src/Data/MediaBus/Media/Segment.hs
+++ b/src/Data/MediaBus/Media/Segment.hs
@@ -53,8 +53,7 @@
 
 instance (HasStaticDuration d, Show c) =>
          Show (Segment d c) where
-    showsPrec d (MkSegment c) =
-      showParen (d > 10) $
+    showsPrec _d (MkSegment c) =
           showString "[| "
           . shows c
           . showString (printf " |%10s]" (show (getStaticDuration (Proxy :: Proxy d))))
diff --git a/src/Data/MediaBus/Media/Stream.hs b/src/Data/MediaBus/Media/Stream.hs
--- a/src/Data/MediaBus/Media/Stream.hs
+++ b/src/Data/MediaBus/Media/Stream.hs
@@ -26,11 +26,10 @@
 import Data.MediaBus.Basics.Sequence
 import Data.MediaBus.Basics.Series
 import Data.MediaBus.Basics.Ticks
-import Data.MediaBus.Media.Media
 import Data.MediaBus.Media.Channels
+import Data.MediaBus.Media.Media
 import GHC.Generics (Generic)
 import Test.QuickCheck
-import Text.Printf
 
 -- | Meta information about a media stream.
 data FrameCtx i s t p = MkFrameCtx
@@ -81,13 +80,13 @@
 
 instance (Show i, Show s, Show t, Show p) =>
          Show (FrameCtx i s t p) where
-  show (MkFrameCtx sid tsr snr spr) =
-    printf
-      "FRAME-CTX: %15s | %15s | %15s | %s"
-      (show sid)
-      (show snr)
-      (show tsr)
-      (show spr)
+  showsPrec d (MkFrameCtx sid tsr snr spr) =
+    showParen (d > 10) $
+    showString "frame context: " .
+    showsPrec 11 sid .
+    showChar ' ' .
+    showsPrec 11 snr .
+    showChar ' ' . showsPrec 11 tsr . showChar ' ' . showsPrec 11 spr
 
 -- | A 'Frame' can be anything that has a start time and is exactly one time
 -- unit long, it can respresent anything ranging from an audio buffer with 20ms
@@ -157,8 +156,11 @@
 
 instance (Show s, Show t, Show v) =>
          Show (Frame s t v) where
-  show (MkFrame ts sn v) =
-    printf "FRAME: %15s | %15s | %s" (show sn) (show ts) (show v)
+  showsPrec d (MkFrame ts sn v) =
+    showParen (d > 10) $
+    showString "frame: " .
+    showsPrec 11 sn .
+    showChar ' ' . showsPrec 11 ts . showChar ' ' . showsPrec 11 v
 
 -- | A type for values that belong to a 'Series' of 'Frame's started by a
 -- 'FrameCtx'. This combines the sum type 'Series' which has either 'Start' or
@@ -207,4 +209,4 @@
 
 instance (Show i, Show s, Show t, Show c, Show p) =>
          Show (Stream i s t p c) where
-  show (MkStream s) = show s
+  showsPrec d (MkStream s) = showsPrec d s
