diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -59,5 +59,10 @@
 
 ## 0.8.1.0 -- 2021-08-24
 
-* Eigth version. Switched to the new version of the phonetic-languages-rhythmicity that fixed the issues with
+* Eigth version revised A. Switched to the new version of the phonetic-languages-rhythmicity that fixed the issues with
 custom user defined new polyrhythmicity choices.
+
+## 0.9.0.0 -- 2021-09-18
+
+* Ninth version. Added the new functions that allows the user to define and use his / her own syllableDurationsD
+functions. They are used with the properties encoding string starting with "H".
diff --git a/Phonetic/Languages/Array/Ukrainian/PropertiesFuncRepG2.hs b/Phonetic/Languages/Array/Ukrainian/PropertiesFuncRepG2.hs
--- a/Phonetic/Languages/Array/Ukrainian/PropertiesFuncRepG2.hs
+++ b/Phonetic/Languages/Array/Ukrainian/PropertiesFuncRepG2.hs
@@ -42,6 +42,8 @@
   , procBoth4InvFF
   -- * Working with rhythmicity
   , procRhythmicity23F
+  -- ** Working with rhythmicity that can be defined by the user
+  , procRhythmicity23FH
 ) where
 
 #ifdef __GLASGOW_HASKELL__
@@ -112,7 +114,7 @@
 {-# INLINE procB2F #-}
 
 procB2FF
-  :: (Ord c) => Double 
+  :: (Ord c) => Double
   -> (Double -> c)
   -> ([[[S.UZPP2]]] -> [[Double]])
   -> Coeffs2
@@ -169,6 +171,25 @@
   -> FuncRep2 String Double c
 procRhythmicity23F k g choice coeffs = procRhythm23F g choice (rhythmicity k) coeffs
 {-# INLINE procRhythmicity23F #-}
+
+procRhythm23FH
+  :: (Ord c) => (Double -> c)
+  -> String
+  -> (String -> Double)
+  -> Coeffs2
+  -> FuncRep2 String Double c
+procRhythm23FH h choice g coeffs = D g h
+{-# INLINE procRhythm23FH #-}
+
+procRhythmicity23FH
+  :: (Ord c) => Double
+  -> (Double -> c)
+  -> [[[[S.UZPP2]]] -> [[Double]]]
+  -> String
+  -> Coeffs2
+  -> FuncRep2 String Double c
+procRhythmicity23FH k g syllableDurationsDs choice coeffs = procRhythm23FH g choice (rhythmicityH k choice syllableDurationsDs coeffs) coeffs
+{-# INLINE procRhythmicity23FH #-}
 
 procBothF
   :: (Ord c) => (Double -> c)
diff --git a/Phonetic/Languages/Array/Ukrainian/PropertiesSyllablesG2.hs b/Phonetic/Languages/Array/Ukrainian/PropertiesSyllablesG2.hs
--- a/Phonetic/Languages/Array/Ukrainian/PropertiesSyllablesG2.hs
+++ b/Phonetic/Languages/Array/Ukrainian/PropertiesSyllablesG2.hs
@@ -24,6 +24,11 @@
   , sndCF
   , readCF
   -- * Rhythmicity properties (semi-empirical)
+  -- ** General ones
+  , rhythmicity0H
+  , rhythmicity0FH
+  , rhythmicityKH
+  , rhythmicityKFH
   -- ** Simple one
   , rhythmicity0
   , rhythmicity0F
@@ -50,7 +55,10 @@
   , rhythmicityKF4
   -- * General
   , rhythmicityG
+  , rhythmicityGH
   , rhythmicity
+  , rhythmicityH
+  , rhythmicityH'
 ) where
 
 #ifdef __GLASGOW_HASKELL__
@@ -116,86 +124,114 @@
 eval23KF k k2 k3 = evalRhythmicity23KF k k2 k3 . mconcat
 {-# INLINE eval23KF #-}
 
-rhythmicityG :: ([[[UZPP2]]] -> [[Double]]) -> ([[Double]] -> Double) -> String -> Double
-rhythmicityG f g xs
+rhythmicityGH :: ([[[UZPP2]]] -> [[Double]]) -> ([[Double]] -> Double) -> String -> Double
+rhythmicityGH f g xs
  | null xs = 0.0
  | otherwise = g . f . createSyllablesUkrS $ xs
-{-# INLINE rhythmicityG #-}
+{-# INLINE rhythmicityGH #-}
 
 -------------------------------------------------------
 
+rhythmicity0H :: ([[[UZPP2]]] -> [[Double]]) -> String -> Double
+rhythmicity0H f = rhythmicityGH f eval23
+{-# INLINE rhythmicity0H #-}
+
 rhythmicity0 :: String -> Double
-rhythmicity0 = rhythmicityG syllableDurationsD eval23
+rhythmicity0 = rhythmicity0H syllableDurationsD
 {-# INLINE rhythmicity0 #-}
 
 rhythmicity02 :: String -> Double
-rhythmicity02 = rhythmicityG syllableDurationsD2 eval23
+rhythmicity02 = rhythmicity0H syllableDurationsD2
 {-# INLINE rhythmicity02 #-}
 
 rhythmicity03 :: String -> Double
-rhythmicity03 = rhythmicityG syllableDurationsD3 eval23
+rhythmicity03 = rhythmicity0H syllableDurationsD3
 {-# INLINE rhythmicity03 #-}
 
 rhythmicity04 :: String -> Double
-rhythmicity04 = rhythmicityG syllableDurationsD4 eval23
+rhythmicity04 = rhythmicity0H syllableDurationsD4
 {-# INLINE rhythmicity04 #-}
 
 -------------------------------------------------------
 
+rhythmicityKH :: ([[[UZPP2]]] -> [[Double]]) -> Double -> Double -> String -> Double
+rhythmicityKH f k2 k3 = rhythmicityGH f (eval23K k2 k3)
+{-# INLINE rhythmicityKH #-}
+
 rhythmicityK :: Double -> Double -> String -> Double
-rhythmicityK k2 k3 = rhythmicityG syllableDurationsD (eval23K k2 k3)
+rhythmicityK k2 k3 = rhythmicityKH syllableDurationsD k2 k3
 {-# INLINE rhythmicityK #-}
 
 rhythmicityK2 :: Double -> Double -> String -> Double
-rhythmicityK2 k2 k3 = rhythmicityG syllableDurationsD2 (eval23K k2 k3)
+rhythmicityK2 k2 k3 = rhythmicityKH syllableDurationsD2 k2 k3
 {-# INLINE rhythmicityK2 #-}
 
 rhythmicityK3 :: Double -> Double -> String -> Double
-rhythmicityK3 k2 k3 = rhythmicityG syllableDurationsD3 (eval23K k2 k3)
+rhythmicityK3 k2 k3 = rhythmicityKH syllableDurationsD3 k2 k3
 {-# INLINE rhythmicityK3 #-}
 
 rhythmicityK4 :: Double -> Double -> String -> Double
-rhythmicityK4 k2 k3 = rhythmicityG syllableDurationsD4 (eval23K k2 k3)
+rhythmicityK4 k2 k3 = rhythmicityKH syllableDurationsD4 k2 k3
 {-# INLINE rhythmicityK4 #-}
 
 --------------------------------------------------------
 
+rhythmicity0FH :: ([[[UZPP2]]] -> [[Double]]) -> Double -> String -> Double
+rhythmicity0FH f k = rhythmicityGH f (eval23F k)
+{-# INLINE rhythmicity0FH #-}
+
 rhythmicity0F :: Double -> String -> Double
-rhythmicity0F k = rhythmicityG syllableDurationsD (eval23F k)
+rhythmicity0F k = rhythmicity0FH syllableDurationsD k
 {-# INLINE rhythmicity0F #-}
 
 rhythmicity02F :: Double -> String -> Double
-rhythmicity02F k = rhythmicityG syllableDurationsD2 (eval23F k)
+rhythmicity02F k = rhythmicity0FH syllableDurationsD2 k
 {-# INLINE rhythmicity02F #-}
 
 rhythmicity03F :: Double -> String -> Double
-rhythmicity03F k = rhythmicityG syllableDurationsD3 (eval23F k)
+rhythmicity03F k = rhythmicity0FH syllableDurationsD3 k
 {-# INLINE rhythmicity03F #-}
 
 rhythmicity04F :: Double -> String -> Double
-rhythmicity04F k = rhythmicityG syllableDurationsD4 (eval23F k)
+rhythmicity04F k = rhythmicity0FH syllableDurationsD4 k
 {-# INLINE rhythmicity04F #-}
 
 --------------------------------------------------------
 
+rhythmicityKFH :: ([[[UZPP2]]] -> [[Double]]) -> Double -> Double -> Double -> String -> Double
+rhythmicityKFH f k k2 k3 = rhythmicityGH f (eval23KF k k2 k3)
+{-# INLINE rhythmicityKFH #-}
+
 rhythmicityKF :: Double -> Double -> Double -> String -> Double
-rhythmicityKF k k2 k3 = rhythmicityG syllableDurationsD (eval23KF k k2 k3)
+rhythmicityKF k k2 k3 = rhythmicityKFH syllableDurationsD k k2 k3
 {-# INLINE rhythmicityKF #-}
 
 rhythmicityKF2 :: Double -> Double -> Double -> String -> Double
-rhythmicityKF2 k k2 k3 = rhythmicityG syllableDurationsD2 (eval23KF k k2 k3)
+rhythmicityKF2 k k2 k3 = rhythmicityKFH syllableDurationsD2 k k2 k3
 {-# INLINE rhythmicityKF2 #-}
 
 rhythmicityKF3 :: Double -> Double -> Double -> String -> Double
-rhythmicityKF3 k k2 k3 = rhythmicityG syllableDurationsD3 (eval23KF k k2 k3)
+rhythmicityKF3 k k2 k3 = rhythmicityKFH syllableDurationsD3 k k2 k3
 {-# INLINE rhythmicityKF3 #-}
 
 rhythmicityKF4 :: Double -> Double -> Double -> String -> Double
-rhythmicityKF4 k k2 k3 = rhythmicityG syllableDurationsD4 (eval23KF k k2 k3)
+rhythmicityKF4 k k2 k3 = rhythmicityKFH syllableDurationsD4 k k2 k3
 {-# INLINE rhythmicityKF4 #-}
 
 --------------------------------------------------------
 
+rhythmicityG
+  :: ([[[UZPP2]]] -> [[Double]])-- ^ A function that specifies the syllables durations, analogue of (or one of) the
+  -- syllableDurationsD functions from the @ukrainian-phonetics-basics-array@ package.
+  -> String
+  -> [Double]
+rhythmicityG f xs
+ | null xs = []
+ | otherwise = mconcat . f . createSyllablesUkrS $ xs
+{-# INLINE rhythmicityG #-}
+
+--------------------------------------------------------
+
 rhythmicity :: Double -> String -> Coeffs2 -> String -> Double
 rhythmicity k choice CF0 = if
  | take 1 choice `elem` ["c","M","N"] || (take 1 choice >= "A" && take 1 choice <= "F") -> let just_probe = readRhythmicity choice in
@@ -239,7 +275,7 @@
               _ -> rhythmicity04
           | otherwise -> rhythmicity04
  | otherwise -> if
-    | take 1 choice == "b" || ((take 1 choice >= "d" && take 1 choice <= "v") || (take 1 choice >= "I" && take 1 choice <= "Z")) && (drop 2 . take 3 $ choice) >= "1" && (drop 2 . take 3 $ choice) <= "4" ->
+    | (take 1 choice == "b" || ((take 1 choice >= "d" && take 1 choice <= "v") || (take 1 choice >= "I" && take 1 choice <= "Z"))) && (drop 2 . take 3 $ choice) >= "1" && (drop 2 . take 3 $ choice) <= "4" ->
         case take 1 choice of
           "b" -> g rhythmicityPolyWeightedLEF3 5 1
           "d" -> g rhythmicityPolyWeightedLEF30 5 1
@@ -367,3 +403,206 @@
 parseChRhEndMaybe (P0 _) = Nothing
 parseChRhEndMaybe (P1 _ _ n) = Just n
 parseChRhEndMaybe (P2 _ _ _ n) = Just n
+
+----------------------------------------------------------------
+
+rhythmicityH
+  :: Double
+  -> String
+  -> [[[[UZPP2]]] -> [[Double]]]
+  -> Coeffs2
+  -> String
+  -> Double
+rhythmicityH k choice syllableDurationsDs coeffs
+  | take 1 choice == "H" = rhythmicityH' k (drop 1 choice) syllableDurationsDs coeffs
+  | otherwise = rhythmicity k choice coeffs
+
+rhythmicityH'
+  :: Double
+  -> String
+  -> [[[[UZPP2]]] -> [[Double]]]
+  -> Coeffs2
+  -> String
+  -> Double
+rhythmicityH' k choice syllableDurationsDs CF0 = if
+ | take 1 choice `elem` ["c","M","N"] || (take 1 choice >= "A" && take 1 choice <= "F") -> let just_probe = readRhythmicity choice in
+           case just_probe of
+             Just (P1 ch rh n) -> rhythmicityABC 1.0 2.0 0.125 ch rh . rhythmicityG (helperHF4 n syllableDurationsDs)
+             Just (P2 ch rh r n) -> case take 1 choice of
+                   "A" -> rhythmicityPolyWeightedLEF2 1.0 r ch rh . rhythmicityG (helperHF4 n syllableDurationsDs)
+                   "D" -> rhythmicityPolyWeightedLF2 1.0 r ch rh . rhythmicityG (helperHF4 n syllableDurationsDs)
+                   "E" -> rhythmicityPolyWeightedLEF3 1.0 r ch rh . rhythmicityG (helperHF4 n syllableDurationsDs)
+                   "F" -> rhythmicityPolyWeightedLF3 1.0 r ch rh . rhythmicityG (helperHF4 n syllableDurationsDs)
+                   "B" -> rhythmicityPolyWeightedEF2 1.0 r ch rh . rhythmicityG (helperHF4 n syllableDurationsDs)
+                   "C" -> rhythmicityPolyWeightedF2 1.0 r ch rh . rhythmicityG (helperHF4 n syllableDurationsDs)
+                   "M" -> rhythmicityPolyWeightedEF3 1.0 r ch rh . rhythmicityG (helperHF4 n syllableDurationsDs)
+                   "N" -> rhythmicityPolyWeightedF3 1.0 r ch rh . rhythmicityG (helperHF4 n syllableDurationsDs)
+                   "c" -> rhythmicityPoly 1.0 r ch rh . rhythmicityG (helperHF4 n syllableDurationsDs)
+             _ -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+ | choice == "0y" -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+ | take 1 choice == "0" && drop 2 (take 3 choice) == "y" ->
+    let n2 = readMaybe (drop 1 . take 2 $ choice)::Maybe Int in
+      case n2 of
+        Just n3 -> rhythmicity0H (helperHF4 n3 syllableDurationsDs)
+        Nothing -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+ | choice == "0z" -> rhythmicity0FH (helperHF4 1 syllableDurationsDs) k
+ | take 1 choice == "0" && drop 2 (take 3 choice) == "z" ->
+    let n2 = readMaybe (drop 1 . take 2 $ choice)::Maybe Int in
+      case n2 of
+        Just n3 -> rhythmicity0FH (helperHF4 n3 syllableDurationsDs) k
+        Nothing -> rhythmicity0FH (helperHF4 1 syllableDurationsDs) k
+ | take 1 choice == "0" -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+ | take 1 choice == "w" -> if
+          | (drop 2 . take 3 $ choice) >= "1" && (drop 2 . take 3 $ choice) <= "4" ->
+             case take 2 choice of
+              "w0" -> wwF (drop 2 . take 3 $ choice) (Ch 1 1 4) (Rhythm 1 1 2)
+              "w1" -> wwF (drop 2 . take 3 $ choice) (Ch 1 0 4) (Rhythm 2 1 1)
+              "w2" -> wwF (drop 2 . take 3 $ choice) (Ch 0 1 4) (Rhythm 1 2 1)
+              "w3" -> wwF (drop 2 . take 3 $ choice) (Ch 0 0 4) (Rhythm 1 1 2)
+              _ -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+          | otherwise -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+ | take 1 choice == "x" -> if
+          | (drop 2 . take 3 $ choice) >= "1" && (drop 2 . take 3 $ choice) <= "4" ->
+             case take 2 choice of
+              "x0" -> xxF (drop 2 . take 3 $ choice) (Ch 1 1 4) (Rhythm 1 1 2)
+              "x1" -> xxF (drop 2 . take 3 $ choice) (Ch 1 0 4) (Rhythm 2 1 1)
+              "x2" -> xxF (drop 2 . take 3 $ choice) (Ch 0 1 4) (Rhythm 1 2 1)
+              "x3" -> xxF (drop 2 . take 3 $ choice) (Ch 0 0 4) (Rhythm 1 1 2)
+              _ -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+          | otherwise -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+ | otherwise -> if
+    | (take 1 choice == "b" || ((take 1 choice >= "d" && take 1 choice <= "v") || (take 1 choice >= "I" && take 1 choice <= "Z"))) && (drop 2 . take 3 $ choice) >= "1" && (drop 2 . take 3 $ choice) <= "9" ->
+        case take 1 choice of
+          "b" -> g rhythmicityPolyWeightedLEF3 5 1
+          "d" -> g rhythmicityPolyWeightedLEF30 5 1
+          "e" -> g rhythmicityPolyWeightedLEF3 6 2
+          "f" -> g rhythmicityPolyWeightedLEF30 6 2
+          "g" -> g rhythmicityPolyWeightedLEF2 5 1
+          "h" -> g rhythmicityPolyWeightedLEF20 5 1
+          "i" -> g rhythmicityPolyWeightedLEF2 6 2
+          "j" -> g rhythmicityPolyWeightedLEF20 6 2
+          "k" -> g rhythmicityPolyWeightedLF3 5 1
+          "l" -> g rhythmicityPolyWeightedLF30 5 1
+          "m" -> g rhythmicityPolyWeightedLF3 6 2
+          "n" -> g rhythmicityPolyWeightedLF30 6 2
+          "o" -> g rhythmicityPolyWeightedLF2 5 1
+          "p" -> g rhythmicityPolyWeightedLF20 5 1
+          "q" -> g rhythmicityPolyWeightedLF2 6 2
+          "r" -> g rhythmicityPolyWeightedLF20 6 2
+          "I" -> g rhythmicityPolyWeightedEF3 5 1
+          "J" -> g rhythmicityPolyWeightedEF30 5 1
+          "K" -> g rhythmicityPolyWeightedEF3 6 2
+          "L" -> g rhythmicityPolyWeightedEF30 6 2
+          "O" -> g rhythmicityPolyWeightedEF2 5 1
+          "P" -> g rhythmicityPolyWeightedEF20 5 1
+          "Q" -> g rhythmicityPolyWeightedEF2 6 2
+          "R" -> g rhythmicityPolyWeightedEF20 6 2
+          "W" -> g rhythmicityPolyWeightedF3 5 1
+          "X" -> g rhythmicityPolyWeightedF30 5 1
+          "Y" -> g rhythmicityPolyWeightedF3 6 2
+          "Z" -> g rhythmicityPolyWeightedF30 6 2
+          "U" -> g rhythmicityPolyWeightedF2 5 1
+          "V" -> g rhythmicityPolyWeightedF20 5 1
+          "S" -> g rhythmicityPolyWeightedF2 6 2
+          "T" -> g rhythmicityPolyWeightedF20 6 2
+          "u" -> g rhythmicityPoly 5 1
+          "v" -> g rhythmicityPoly0 5 1
+          "s" -> g rhythmicityPoly 6 2
+          "t" -> g rhythmicityPoly0 6 2
+    | otherwise -> rhythmicity0H
+       (let ts = drop 2 . take 3 $ choice in
+          case ts of { [] -> syllableDurationsD4 ; ks ->
+            let q = readMaybe ks::Maybe Int in
+              case q of {Just q' -> helperHF4 q' syllableDurationsDs; ~Nothing -> syllableDurationsD4 }})
+        where h1 f ts xs m n = f 1.0 4 (PolyCh xs m) (PolyRhythm [1,2,1,n]) . mconcat .
+                  (case ts of { [] -> syllableDurationsD4 ; ks -> let q = readMaybe ks::Maybe Int in
+                      case q of {Just q' -> helperHF4 q' syllableDurationsDs; ~Nothing -> syllableDurationsD4 }}) .
+                        createSyllablesUkrS
+              h2 f ts xs m n = f 1.0 4 (PolyCh xs m) (PolyRhythm [2,1,1,n]) . mconcat .
+                  (case ts of { [] -> syllableDurationsD4 ; ks -> let q = readMaybe ks::Maybe Int in
+                      case q of {Just q' -> helperHF4 q' syllableDurationsDs; ~Nothing -> syllableDurationsD4 }}) .
+                        createSyllablesUkrS
+              g f m n
+                | drop 1 (take 2 choice) == "0" = h1 f (drop 2 . take 3 $ choice) [True,True,True] m n
+                | drop 1 (take 2 choice) == "1" = h1 f (drop 2 . take 3 $ choice) [True,True,False] m n
+                | drop 1 (take 2 choice) == "2" = h1 f (drop 2 . take 3 $ choice) [True,False,True] m n
+                | drop 1 (take 2 choice) == "3" = h1 f (drop 2 . take 3 $ choice) [True,False,False] m n
+                | drop 1 (take 2 choice) == "4" = h2 f (drop 2 . take 3 $ choice) [True,True,True] m n
+                | drop 1 (take 2 choice) == "5" = h2 f (drop 2 . take 3 $ choice) [True,True,False] m n
+                | drop 1 (take 2 choice) == "6" = h2 f (drop 2 . take 3 $ choice) [True,False,True] m n
+                | drop 1 (take 2 choice) == "7" = h2 f (drop 2 . take 3 $ choice) [True,False,False] m n
+                | otherwise = rhythmicity0H (helperHF4 n syllableDurationsDs)
+              w1F f ch rh = rhythmicityABC 1.0 2.0 0.125 ch rh . mconcat . f . createSyllablesUkrS
+              wwF2 g2 xs =
+                let n1 = readMaybe xs::Maybe Int in
+                   case n1 of
+                     Just n2 -> g2 (helperHF4 n2 syllableDurationsDs)
+                     Nothing -> g2 syllableDurationsD4
+              x1F f ch rh = rhythmicityABC0 1.0 2.0 0.125 ch rh . mconcat . f . createSyllablesUkrS
+              xxF = wwF2 x1F
+              wwF = wwF2 w1F
+              {-# INLINE w1F #-}
+              {-# INLINE wwF2 #-}
+              {-# INLINE x1F #-}
+              {-# INLINE xxF #-}
+              {-# INLINE wwF #-}
+rhythmicityH' k choice syllableDurationsDs (CF2 x y) =
+ case take 1 choice of
+  "0" -> case choice of
+           "0y" -> rhythmicityKH (helperHF4 1 syllableDurationsDs) (fromMaybe 1.0 x) (fromMaybe 1.0 y)
+           "02y" -> rhythmicityKH (helperHF4 2 syllableDurationsDs) (fromMaybe 1.0 x) (fromMaybe 1.0 y)
+           "03y" -> rhythmicityKH (helperHF4 3 syllableDurationsDs) (fromMaybe 1.0 x) (fromMaybe 1.0 y)
+           "0z" -> rhythmicityKFH (helperHF4 1 syllableDurationsDs) k (fromMaybe 1.0 x) (fromMaybe 1.0 y)
+           "02z" -> rhythmicityKFH (helperHF4 2 syllableDurationsDs) k (fromMaybe 1.0 x) (fromMaybe 1.0 y)
+           "03z" -> rhythmicityKFH (helperHF4 3 syllableDurationsDs) k (fromMaybe 1.0 x) (fromMaybe 1.0 y)
+           "04z" -> rhythmicityKFH (helperHF4 4 syllableDurationsDs) k (fromMaybe 1.0 x) (fromMaybe 1.0 y)
+           _ -> rhythmicityKH (helperHF4 1 syllableDurationsDs) (fromMaybe 1.0 x) (fromMaybe 1.0 y)
+  "w" -> if
+          | (drop 2 . take 3 $ choice) >= "1" && (drop 2 . take 3 $ choice) <= "4" ->
+             case take 2 choice of
+              "w0" -> wwF (drop 2 . take 3 $ choice) (Ch 1 1 4) (Rhythm 1 1 2)
+              "w1" -> wwF (drop 2 . take 3 $ choice) (Ch 1 0 4) (Rhythm 2 1 1)
+              "w2" -> wwF (drop 2 . take 3 $ choice) (Ch 0 1 4) (Rhythm 1 2 1)
+              "w3" -> wwF (drop 2 . take 3 $ choice) (Ch 0 0 4) (Rhythm 1 1 2)
+              _ -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+          | otherwise -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+              where w1F f ch rh = rhythmicityABC 1.0 (fromMaybe 2.0 x) (fromMaybe 0.125 y) ch rh . mconcat . f . createSyllablesUkrS
+                    wwF xs =
+                      let n1 = readMaybe xs::Maybe Int in
+                        case n1 of
+                         Just n2 -> w1F (helperHF4 n2 syllableDurationsDs)
+                         Nothing -> w1F syllableDurationsD4
+                    {-# INLINE w1F #-}
+                    {-# INLINE wwF #-}
+  "x" -> if
+          | (drop 2 . take 3 $ choice) >= "1" && (drop 2 . take 3 $ choice) <= "4" ->
+             case take 2 choice of
+              "x0" -> xxF (drop 2 . take 3 $ choice) (Ch 1 1 4) (Rhythm 1 1 2)
+              "x1" -> xxF (drop 2 . take 3 $ choice) (Ch 1 0 4) (Rhythm 2 1 1)
+              "x2" -> xxF (drop 2 . take 3 $ choice) (Ch 0 1 4) (Rhythm 1 2 1)
+              "x3" -> xxF (drop 2 . take 3 $ choice) (Ch 0 0 4) (Rhythm 1 1 2)
+              _ -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+          | otherwise -> rhythmicity0H (helperHF4 1 syllableDurationsDs)
+              where x1F f ch rh = rhythmicityABC0 1.0 (fromMaybe 2.0 x) (fromMaybe 0.125 y) ch rh . mconcat . f . createSyllablesUkrS
+                    xxF xs =
+                      let n1 = readMaybe xs::Maybe Int in
+                        case n1 of
+                         Just n2 -> x1F (helperHF4 n2 syllableDurationsDs)
+                         Nothing -> x1F syllableDurationsD4
+                    {-# INLINE x1F #-}
+                    {-# INLINE xxF #-}
+  _ -> if
+     | ((take 1 choice >= "b" && take 1 choice <= "v") || (take 1 choice >= "A" && take 1 choice <= "Z" && take 1 choice `notElem` ["G","H"])) -> rhythmicityH' k choice syllableDurationsDs CF0
+     | otherwise -> rhythmicityKH
+        (let ts = drop 2 . take 3 $ choice in
+          case ts of { [] -> syllableDurationsD4 ; ks ->
+            let q = readMaybe ks::Maybe Int in
+              case q of {Just q' -> helperHF4 q' syllableDurationsDs; ~Nothing -> syllableDurationsD4 }})
+                (fromMaybe 1.0 x) (fromMaybe 1.0 y)
+
+
+helperHF4 :: Int -> [[[[UZPP2]]] -> [[Double]]] -> [[[UZPP2]]] -> [[Double]]
+helperHF4 n xs
+  | null xs = syllableDurationsD4
+  | (n `rem` length xs) == 0 = head xs
+  | otherwise = xs !! ((n `rem` length xs) - 1)
diff --git a/phonetic-languages-simplified-properties-array.cabal b/phonetic-languages-simplified-properties-array.cabal
--- a/phonetic-languages-simplified-properties-array.cabal
+++ b/phonetic-languages-simplified-properties-array.cabal
@@ -2,7 +2,7 @@
 -- For further documentation, see http://haskell.org/cabal/users-guide/
 
 name:                phonetic-languages-simplified-properties-array
-version:             0.8.1.0
+version:             0.9.0.0
 synopsis:            A generalization of the uniqueness-periods-vector-properties package.
 description:         Is a simplified version of the functionality of the former one. Uses lists and arrays as main processment data types. Uses Double whenever applicable.
 homepage:            https://hackage.haskell.org/package/phonetic-languages-simplified-properties-array
@@ -11,7 +11,7 @@
 author:              OleksandrZhabenko
 maintainer:          olexandr543@yahoo.com
 copyright:           Oleksandr Zhabenko
-category:            Language, Math
+category:            Language, Math, Game
 build-type:          Simple
 extra-source-files:  CHANGELOG.md
 cabal-version:       >=1.10
