diff --git a/src/Common.hs b/src/Common.hs
--- a/src/Common.hs
+++ b/src/Common.hs
@@ -32,13 +32,14 @@
 fi = fromIntegral
 
 fitsWhole :: Event b -> [Event b] -> Bool
-fitsWhole (Event whole' _ _) events = not $ any (\Event{..} -> isJust $ subArc whole' whole) events
+fitsWhole event events = not $ any (\event' -> isJust $ subArc (wholeOrPart event) (wholeOrPart event')) events
 
 addEventWhole :: Event b -> [[Event b]] -> [[Event b]]
 addEventWhole e [] = [[e]]
 addEventWhole e (level:ls)
+    | isAnalog e = level:ls
     | fitsWhole e level = (e:level) : ls
-    | otherwise = level : addEvent e ls
+    | otherwise = level : addEventWhole e ls
 
 arrangeEventsWhole :: [Event b] -> [[Event b]]
 arrangeEventsWhole = foldr addEventWhole []
@@ -77,8 +78,7 @@
     b = fromIntegral (i .&. 0x0000FF)
 
 segmentator :: Pattern ColourD -> Pattern [ColourD]
-segmentator p@Pattern{..} = Pattern nature
-    $ \(State arc@Arc{..} _)
+segmentator p@Pattern{..} = Pattern $ \(State arc@Arc{..} _)
     -> filter (\(Event _ (Arc start' stop') _) -> start' < stop && stop' > start)
     $ groupByTime (segment' (queryArc p arc))
 
@@ -128,5 +128,5 @@
     _ -> error "wrong Socket"
 
 toPattern :: [Event ControlMap] -> ControlPattern
-toPattern evs = Pattern Digital $ const evs
+toPattern evs = Pattern $ const evs
 
diff --git a/src/VisGradient.hs b/src/VisGradient.hs
--- a/src/VisGradient.hs
+++ b/src/VisGradient.hs
@@ -48,7 +48,8 @@
     mapM_ drawEvent $ level
     C.restore
   where
-    drawEvent (Event (Arc sWhole eWhole) Arc{..} c) = do
+    drawEvent e@(Event _ Arc{..} c) = do
+        let (Arc sWhole eWhole) = wholeOrPart e
         let (RGB r g b) = toSRGB c
         let x = (fromRational start) * totalWidth
         let y = (fromIntegral num) * levelHeight
diff --git a/src/VisPart.hs b/src/VisPart.hs
--- a/src/VisPart.hs
+++ b/src/VisPart.hs
@@ -49,7 +49,8 @@
     mapM_ drawEvent $ level
     C.restore
   where
-    drawEvent (Event (Arc sWhole eWhole) (Arc sPart ePart) v) = do
+    drawEvent e@(Event _ (Arc sPart ePart) v) = do
+        let (Arc sWhole eWhole) = wholeOrPart e
         let (r, g, b) = (0,0,0)
         let px = (fromRational sPart) * totalWidth
         let wx = (fromRational sWhole) * totalWidth
diff --git a/tidal-vis.cabal b/tidal-vis.cabal
--- a/tidal-vis.cabal
+++ b/tidal-vis.cabal
@@ -1,5 +1,5 @@
 name:                tidal-vis
-version:             1.0.14
+version:             1.0.15
 synopsis:            Visual rendering for Tidal patterns and osc messages
 homepage:            http://yaxu.org/tidal/
 license:             GPL-3
@@ -65,7 +65,7 @@
                   , SDL-ttf
                   , mtl
                   , network
-                  , tidal >= 1.0.15
+                  , tidal >= 1.0.15 && < 1.5
                   , time
                   , unagi-chan
 
