diff --git a/src/Temporal/Class.hs b/src/Temporal/Class.hs
--- a/src/Temporal/Class.hs
+++ b/src/Temporal/Class.hs
@@ -1,6 +1,7 @@
 {-# Language TypeFamilies #-}
 module Temporal.Class(
-	DurOf, Duration(..), Compose(..), loopBy, melMap, harMap, 
+	DurOf, Duration(..), Melody(..), Harmony(..), Compose(..), 
+	loopBy, melMap, harMap, 
 	Delay(..), (+|),
 	Rest(..), Stretch(..), (*|), Limit(..), 
 	Loop(..)
@@ -13,27 +14,30 @@
 -- | Duration for the given type.
 type family DurOf a :: *
 
-class Compose a where
+class Melody a where
 	-- | Sequent composition for a list of values (melody). 
 	mel :: [a] -> a
+	-- | Sequent composition. Play first track then second.
+	(+:+) :: a -> a -> a
 
+	a +:+ b = mel [a, b]
+	mel = foldl1 (+:+)
+
+class Harmony a where
 	-- | Parallel composition for a list of values (harmony). 
 	har :: [a] -> a
-	
-	-- | Sequent composition. Play first track then second.
-	(+:+) :: a -> a -> a
 
 	-- | Parallel composition. Play two tracks simultaneously.
 	(=:=) :: a -> a -> a
 
 	a =:= b = har [a, b]
-	a +:+ b = mel [a, b]
-
 	har = foldl1 (=:=)
-	mel = foldl1 (+:+)
 
+
+class (Melody a, Harmony a) => Compose a where
+
 -- | Repeats the given audio segment several times.
-loopBy :: Compose a => Int -> a -> a
+loopBy :: Melody a => Int -> a -> a
 loopBy n = mel . replicate n
 
 class Delay a where
@@ -52,7 +56,7 @@
 (*|) :: Stretch a => DurOf a -> a -> a
 (*|) = str
 
-class Compose a => Rest a where
+class Rest a where
 	rest :: DurOf a -> a
 
 class Limit a where
@@ -63,11 +67,10 @@
 	-- | Loops over the sound
 	loop :: a -> a
 
-
 -- | Transforms a sequence and then applies a mel.
-melMap :: (Compose b) => (a -> b) -> [a] -> b
+melMap :: (Melody b) => (a -> b) -> [a] -> b
 melMap f xs = mel $ fmap f xs
 
 -- | Transforms a sequence and then applies a har.
-harMap :: (Compose b) => (a -> b) -> [a] -> b
+harMap :: (Harmony b) => (a -> b) -> [a] -> b
 harMap f xs = har $ fmap f xs
diff --git a/src/Temporal/Media.hs b/src/Temporal/Media.hs
--- a/src/Temporal/Media.hs
+++ b/src/Temporal/Media.hs
@@ -98,13 +98,15 @@
 (=:/) :: (Real t, IfB t, OrdB t) => Track t a -> Track t a -> Track t a
 a =:/ b = slice 0 (dur a `minB` dur b) $ a <> b
 
--- | Parallel composition on list of tracks (short for harmony).
-instance (Num t, IfB t, OrdB t) => Compose (Track t a) where
-    har = mconcat
+instance (Num t, IfB t, OrdB t) => Melody (Track t a) where
     mel = foldr (+:+) nil
-
-    a =:= b = a <> b
     a +:+ b = a <> del (dur a) b
+
+instance (Num t, IfB t, OrdB t) => Harmony (Track t a) where
+    har = mconcat
+    a =:= b = a <> b   
+
+instance (Num t, IfB t, OrdB t) => Compose (Track t a) where 
 
 -- | Turncating parallel composition on list of tracks.
 harT :: (Real t, IfB t, OrdB t) => [Track t a] -> Track t a
diff --git a/temporal-media.cabal b/temporal-media.cabal
--- a/temporal-media.cabal
+++ b/temporal-media.cabal
@@ -1,5 +1,5 @@
 Name:          temporal-media
-Version:       0.5.0
+Version:       0.6.0
 License-file:  LICENSE
 Cabal-Version: >= 1.6
 License:       BSD3
