diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -16,3 +16,8 @@
 ## 0.2.1.0 -- 2020-06-09
 
 * Second version. Added a README.markdown file. 
+
+## 0.3.0.0 -- 2020-06-09
+
+* Third version. Added a new data type to the DobutokO.Sound.Presentation module (IntervalMG), some changes to the data types already present. 
+Added more instances. Some minor documentation improvements.
diff --git a/DobutokO/Sound/Faded.hs b/DobutokO/Sound/Faded.hs
--- a/DobutokO/Sound/Faded.hs
+++ b/DobutokO/Sound/Faded.hs
@@ -76,7 +76,7 @@
 overChangeVolG :: String -> String -> Int -> Double -> Double -> Double -> Double -> ((Double,Double), (Double,Double)) -> IO ()
 overChangeVolG = overChangeVolGN "test"
  
--- | A generalized version of the 'overChangeVolGN' with a possibility to specify the name of the resulting file (by default it is \"test\" based).
+-- | A generalized version of the 'overChangeVolG' with a possibility to specify the name of the resulting file (by default it is \"test\" based).
 overChangeVolGN :: FilePath -> String -> String -> Int -> Double -> Double -> Double -> Double -> ((Double,Double), (Double,Double)) -> IO ()
 overChangeVolGN filestart ys cs j freq1 freq2 x0 xdelta ((t0,v0), (t1,v1)) 
  | x0 /= 0 && compare (abs x0) 1.0 /= GT && compare freq1 16 == GT && compare freq1 20000 == LT = 
diff --git a/DobutokO/Sound/Presentation.hs b/DobutokO/Sound/Presentation.hs
--- a/DobutokO/Sound/Presentation.hs
+++ b/DobutokO/Sound/Presentation.hs
@@ -22,6 +22,7 @@
   , IntervalTim (..)
   , IntervalTimI (..)
   , IntervalG (..)
+  , IntervalMG (..)
 ) where
 
 #ifdef __GLASGOW_HASKELL__
@@ -38,7 +39,7 @@
 import Data.Semigroup
 #endif
 #endif
-
+import Data.Monoid
 
 -- | An 'Int' parameter is an index of the 'SoundI' sound file in the sorted in the ascending order 'V.Vector' of them (the corresponding files or their 
 -- names) representing the whole composition.
@@ -109,22 +110,33 @@
 #endif
 
 -- | 'Double' interval representation with no order of the arguments preserved.
-data IntervalTim = I Double Double
+data IntervalTim = Empty | I Double Double | UniversalI
 
 instance Eq IntervalTim where
   (==) (I x1 x2) (I y1 y2) 
     | x1 /= y1 = if x1 == y2 then x2 == y1 else False
     | otherwise = x2 == y2
+  (==) UniversalI UniversalI = True
+  (==) Empty Empty = True
+  (==) _ _ = False
 
 instance Ord IntervalTim where 
   compare (I x01 x02) (I x11 x12) 
     | min x01 x02 == min x11 x12 = compare (max x01 x02) (max x11 x12)
     | otherwise = compare (min x01 x02) (min x11 x12)
+  compare UniversalI UniversalI = EQ
+  compare Empty Empty = EQ
+  compare _ UniversalI = LT
+  compare _ Empty = GT
+  compare UniversalI _ = GT
+  compare _ _ = LT
 
 instance Show IntervalTim where
+  show Empty = "()"
   show (I x1 x2) 
     | compare x1 x2 /= GT = "[" ++ showFFloat Nothing x1 ", " ++ showFFloat Nothing x2 "]"
     | otherwise = "[" ++ showFFloat Nothing x2 ", " ++ showFFloat Nothing x1 "]"
+  show UniversalI = "(-Infinity..+Infinity)"
 
 #ifdef __GLASGOW_HASKELL__
 #if __GLASGOW_HASKELL__>=804
@@ -132,37 +144,85 @@
 -- | Since base-4.9.0.0. Idempotent semigroup (x <> x == x) -- band. 
 instance Semigroup IntervalTim where
   (<>) (I x01 x02) (I x11 x12) = I (minimum [x01,x02,x11,x12]) (maximum [x01,x02,x11,x12])
+  (<>) Empty x = x
+  (<>) x Empty = x
+  (<>) _ _ = UniversalI
 #endif
 #endif
+
+instance Monoid IntervalTim where
+  mempty = Empty
+#ifdef __GLASGOW_HASKELL__
+#if __GLASGOW_HASKELL__<=802
+/* code that applies only to GHC 8.2.* and lower versions */
+  mappend Empty x = x
+  mappend x Empty = x
+  mappend (I x01 x02) (I x11 x12) = I (minimum [x01,x02,x11,x12]) (maximum [x01,x02,x11,x12])
+  mappend _ _ = UniversalI
+#endif
+#endif
   
 -- | Another 'Double' interval representation with no order of the arguments preserved. Since base-4.9.0.0 has different instance of 'Semigroup' 
 -- than 'IntervalTim'.
-data IntervalTimI = II Double Double 
+data IntervalTimI = Empty2 | II Double Double | UniversalII
   
 instance Eq IntervalTimI where
   (==) (II x1 x2) (II y1 y2) 
     | x1 /= y1 = if x1 == y2 then x2 == y1 else False
     | otherwise = x2 == y2
+  (==) Empty2 Empty2 = True
+  (==) UniversalII UniversalII = True
+  (==) _ _ = False
 
 instance Ord IntervalTimI where 
   compare (II x01 x02) (II x11 x12) 
     | min x01 x02 == min x11 x12 = compare (max x01 x02) (max x11 x12)
     | otherwise = compare (min x01 x02) (min x11 x12)
+  compare Empty2 Empty2 = EQ
+  compare Empty2 _ = LT
+  compare UniversalII UniversalII = EQ
+  compare UniversalII _ = GT
+  compare _ Empty2 = GT
+  compare _ _ = LT
 
 instance Show IntervalTimI where
+  show Empty2 = "()"
   show (II x1 x2) 
     | compare x1 x2 /= GT = "[" ++ showFFloat Nothing x1 ", " ++ showFFloat Nothing x2 "]"
     | otherwise = "[" ++ showFFloat Nothing x2 ", " ++ showFFloat Nothing x1 "]"
+  show UniversalII = "(-Infinity..+Infinity)"
 
 #ifdef __GLASGOW_HASKELL__
 #if __GLASGOW_HASKELL__>=804
 /* code that applies only to GHC 8.4.* and higher versions */
--- | Since base-4.9.0.0. Idempotent semigroup (x <> x == x) -- band. 
+-- | Since base-4.9.0.0. Idempotent semigroup (x <> x == x) -- band. (<>) can be understood as a intersection of the sets.
 instance Semigroup IntervalTimI where
-  (<>) (II x01 x02) (II x11 x12) = II (max (min x01 x02) (min x11 x12)) (min (max x01 x02) (max x11 x12))  
+  (<>) Empty2 x = Empty2
+  (<>) x Empty2 = Empty2
+  (<>) (II x01 x02) (II x11 x12) = if compare (max (min x01 x02) (min x11 x12)) (min (max x01 x02) (max x11 x12)) /= GT 
+    then II (max (min x01 x02) (min x11 x12)) (min (max x01 x02) (max x11 x12)) 
+    else Empty2
+  (<>) (II x y) _ = II x y
+  (<>) _ (II x y) = II x y
+  (<>) _ _ = UniversalII
 #endif
 #endif  
-  
+
+-- | Can be understood as intersection of the sets.
+instance Monoid IntervalTimI where
+  mempty = Empty2
+#ifdef __GLASGOW_HASKELL__
+#if __GLASGOW_HASKELL__<=802
+/* code that applies only to GHC 8.2.* and lower versions */
+  mappend Empty2 x = x
+  mappend x Empty2 = x
+  mappend (II x01 x02) (II x11 x12) = if compare (max (min x01 x02) (min x11 x12)) (min (max x01 x02) (max x11 x12)) /= GT 
+    then II (max (min x01 x02) (min x11 x12)) (min (max x01 x02) (max x11 x12)) 
+    else Empty2
+  mappend _ _ = UniversalII
+#endif
+#endif
+    
 -- | The first 'Double' parameter is some adjustment parameter for the playing sound being represented by 'OvertonesO'.
 data SoundTim = StOm Timity Double OvertonesO | SAtOm Timity Double Double OvertonesO | SAbtOm Timity Double Double OvertonesO
   deriving (Eq, Ord, Show)
@@ -170,17 +230,7 @@
 ----------------------------------------------------------------------------------
 
 -- | Generalized interval representation.
-data IntervalG a b = IG a b 
-
-instance (Eq a, Eq b) => Eq (IntervalG a b) where
-  (==) (IG a0 b0) (IG a1 b1) 
-    | a0 /= a1 = False
-    | otherwise = b0 == b1
-
-instance (Ord a, Ord b) => Ord (IntervalG a b) where
-  compare (IG a0 b0) (IG a1 b1) 
-    | a0 /= a1 = compare a0 a1
-    | otherwise = compare b0 b1
+data IntervalG a b = IG a b deriving (Eq, Ord)
 
 instance (Show a, Show b) => Show (IntervalG a b) where
   show (IG x y) = "[|" ++ show x ++ " __ " ++ show y ++ "|]"
@@ -206,3 +256,34 @@
   bimap f g (IG x y) = IG (f x) (g y)
 #endif
 #endif  
+
+-- | Generalized interval representation which is a Monoid instance.
+data IntervalMG a = IMG a a | UniversalG deriving (Eq, Ord)
+
+instance (Show a) => Show (IntervalMG a) where
+  show (IMG x y) = "[|" ++ show x ++ " __ " ++ show y ++ "|]"
+  show UniversalG = "(-InfinityMG..+InfinityMG)"
+
+#ifdef __GLASGOW_HASKELL__
+#if __GLASGOW_HASKELL__>=804
+/* code that applies only to GHC 8.4.* and higher versions */
+-- | Since base-4.9.0.0. Idempotent semigroup (x <> x == x) and rectangular band (x <> y <> z == x <> z)
+-- For more information, please, refer to: https://en.wikipedia.org/wiki/Band_(mathematics)
+instance Semigroup (IntervalMG a) where
+  (<>) (IMG x0 _) (IMG _ w1) = IMG x0 w1
+  (<>) (IMG x y) _ = IMG x y
+  (<>) _ (IMG x y) = IMG x y
+  (<>) _ _ = UniversalG
+#endif
+#endif  
+
+instance Monoid (IntervalMG a) where
+  mempty = UniversalG
+#ifdef __GLASGOW_HASKELL__
+#if __GLASGOW_HASKELL__<=802
+/* code that applies only to GHC 8.2.* and lower versions */
+  mappend UniversalG x = x
+  mappend x UniversalG = x
+  mappend (IMG a1 a2) (IMG a3 a4) = IMG a1 a4
+#endif
+#endif
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -1,10 +1,10 @@
-                     Model Explanation for DobutokO.Sound.Faded
-                     ==========================================
+Model Explanation for DobutokO.Sound.Faded
+==========================================
 
 [![Model Explanation](https://drive.google.com/file/d/1DUXtj-2YMMxc6wAmTcQS8Ub2czDFSOro)]
 (https://drive.google.com/file/d/1DUXtj-2YMMxc6wAmTcQS8Ub2czDFSOro)
 
 The line with dashes and dots for the different variants can be changed to the other 
 types of lines (not the linear ones), but if there is a t_{2} point as on the right 
-plot then its coordinates is preserved.
+plot then its coordinates are preserved.
 
diff --git a/dobutokO4.cabal b/dobutokO4.cabal
--- a/dobutokO4.cabal
+++ b/dobutokO4.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                dobutokO4
-version:             0.2.1.0
+version:             0.3.0.0
 synopsis:            Helps to create experimental music. Uses SoX inside.
 description:         Uses SoX fade (in a special 2D way) and frequency modulation. Provides a special representation for the composition.
 homepage:            https://hackage.haskell.org/package/dobutokO4
