diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,3 +7,7 @@
 ## 0.2.0.0 -- 2021-02-15
 
 * Second version. Added a function uniquenessPeriodsG to the Phonetic.Languages.Simplified.Lists.UniquenessPeriodsG.Base module.
+
+## 0.3.0.0 -- 2021-10-04
+
+* Third version. Some code improvements. Some minor documentation improvements. Updated the dependencies boundaries.
diff --git a/Phonetic/Languages/Simplified/DataG/Base.hs b/Phonetic/Languages/Simplified/DataG/Base.hs
--- a/Phonetic/Languages/Simplified/DataG/Base.hs
+++ b/Phonetic/Languages/Simplified/DataG/Base.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module      :  Phonetic.Languages.Simplified.DataG.Base
--- Copyright   :  (c) OleksandrZhabenko 2020
+-- Copyright   :  (c) OleksandrZhabenko 2020-2021
 -- License     :  MIT
 -- Stability   :  Experimental
 -- Maintainer  :  olexandr543@yahoo.com
@@ -28,17 +28,13 @@
               !EQ -> compare (line x) (line y)
               !z -> z
        !z0 -> z0
+  {-# INLINE compare #-}
 
-data FuncRep2 a b c = D (a -> b) (b -> c)
+data FuncRep2 a b c = D { getAB :: (a -> b), getBC :: (b -> c) }
 
 getAC :: FuncRep2 a b c -> (a -> c)
 getAC (D f g) = g . f
-
-getAB :: FuncRep2 a b c -> (a -> b)
-getAB (D f _) = f
-
-getBC :: FuncRep2 a b c -> (b -> c)
-getBC (D _ g) = g
+{-# INLINE getAC #-}
 
 maximumEl
   :: (Foldable t2, Ord c) => FuncRep2 (t a) b c
@@ -48,6 +44,7 @@
   let !l = F.maximumBy (\x y -> compare (getAC frep2 x) (getAC frep2 y)) data0
       !m = getAB frep2 l
       !tm = getBC frep2 m in R {line = l, propertiesF = m, transPropertiesF = tm}
+{-# INLINE maximumEl #-}
 
 minMaximumEls
   :: (InsertLeft t2 (t a), Monoid (t2 (t a)), Ord (t a), Ord c) => FuncRep2 (t a) b c
@@ -59,16 +56,19 @@
       !mx = getAB frep2 lx
       !tmn = getBC frep2 mn
       !tmx = getBC frep2 mx in (R {line = ln, propertiesF = mn, transPropertiesF = tmn}, R {line = lx, propertiesF = mx, transPropertiesF = tmx})
+{-# INLINE minMaximumEls #-}
 
 maximumElR
   :: (Foldable t2, Ord c) => t2 (Result t a b c)
   -> Result t a b c
 maximumElR = F.maximumBy (\x y -> compare (transPropertiesF x) (transPropertiesF y))
+{-# INLINE maximumElR #-}
 
 minMaximumElRs
   :: (InsertLeft t2 (Result t a b c), Monoid (t2 (Result t a b c)), Ord (t a), Ord b, Ord c) => t2 (Result t a b c)
   -> (Result t a b c,Result t a b c)
 minMaximumElRs = minMax11ByC (\x y -> compare (transPropertiesF x) (transPropertiesF y))
+{-# INLINE minMaximumElRs #-}
 
 -----------------------------------------------------------------------------------
 
@@ -79,6 +79,7 @@
   -> (t2 (t a), t2 (t a))
 innerPartitioning !frep2 data0 =
   let !l = F.maximum . mapG (toTransPropertiesF' frep2) $ data0 in partitionG ((== l) . getAC frep2) data0
+{-# INLINE innerPartitioning #-}
 
 -- | The second argument must be not empty for the function to work correctly.
 innerPartitioningR
@@ -86,6 +87,7 @@
   -> (t2 (Result t a b c), t2 (Result t a b c))
 innerPartitioningR dataR =
   let !l = F.maximum . mapG transPropertiesF $ dataR in partitionG ((== l) . transPropertiesF) dataR
+{-# INLINE innerPartitioningR #-}
 
 maximumGroupsClassification
   :: (InsertLeft t2 (t a), Monoid (t2 (t a)), Ord c, InsertLeft t2 c, Monoid (t2 c), Integral d) => d
@@ -97,6 +99,7 @@
  | nGroups <= 0 = (dataT,dataF)
  | otherwise = maximumGroupsClassification (nGroups - 1) frep2 (dataT `mappend` partT,partF)
      where (!partT,!partF) = innerPartitioning frep2 dataF
+{-# NOINLINE maximumGroupsClassification #-}
 
 maximumGroupsClassification1
   :: (InsertLeft t2 (t a), Monoid (t2 (t a)), Ord c, InsertLeft t2 c, Monoid (t2 c), Integral d) => d
@@ -107,6 +110,7 @@
  | F.null data0 = (mempty,mempty)
  | nGroups <= 0 = innerPartitioning frep2 data0
  | otherwise = maximumGroupsClassification (nGroups - 1) frep2 . innerPartitioning frep2 $ data0
+{-# NOINLINE maximumGroupsClassification1 #-}
 
 maximumGroupsClassificationR2
   :: (InsertLeft t2 (Result t a b c), Monoid (t2 (Result t a b c)), Ord c, InsertLeft t2 c, Monoid (t2 c), Integral d) => d
@@ -117,6 +121,7 @@
  | nGroups <= 0 = (dataT,dataF)
  | otherwise = maximumGroupsClassificationR2 (nGroups - 1) (dataT `mappend` partT,partF)
      where (!partT,!partF) = innerPartitioningR dataF
+{-# NOINLINE maximumGroupsClassificationR2 #-}
 
 maximumGroupsClassificationR
   :: (InsertLeft t2 (Result t a b c), Monoid (t2 (Result t a b c)), InsertLeft t2 c, Monoid (t2 c), Ord c, Integral d) => d
@@ -126,6 +131,7 @@
  | F.null dataR = (mempty,mempty)
  | nGroups <= 0 = innerPartitioningR dataR
  | otherwise = maximumGroupsClassificationR2 (nGroups - 1) . innerPartitioningR $ dataR
+{-# NOINLINE maximumGroupsClassificationR #-}
 
 toResultR
   :: FuncRep2 (t a) b c
@@ -134,15 +140,18 @@
 toResultR !frep2 !ys = R { line = ys, propertiesF = m, transPropertiesF = tm}
   where !m = getAB frep2 ys
         !tm = getBC frep2 m
+{-# INLINE toResultR #-}
 
 toPropertiesF'
   :: FuncRep2 (t a) b c
   -> t a
   -> b
 toPropertiesF' !frep2 !ys = getAB frep2 ys
+{-# INLINE toPropertiesF' #-}
 
 toTransPropertiesF'
   :: FuncRep2 (t a) b c
   -> t a
   -> c
 toTransPropertiesF' !frep2 !ys = getAC frep2 ys
+{-# INLINE toTransPropertiesF' #-}
diff --git a/Phonetic/Languages/Simplified/Lists/UniquenessPeriodsG/Base.hs b/Phonetic/Languages/Simplified/Lists/UniquenessPeriodsG/Base.hs
--- a/Phonetic/Languages/Simplified/Lists/UniquenessPeriodsG/Base.hs
+++ b/Phonetic/Languages/Simplified/Lists/UniquenessPeriodsG/Base.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module      :  Phonetic.Languages.Simplified.Lists.UniquenessPeriodsG.Base
--- Copyright   :  (c) OleksandrZhabenko 2020
+-- Copyright   :  (c) OleksandrZhabenko 2020-2021
 -- License     :  MIT
 -- Stability   :  Experimental
 -- Maintainer  :  olexandr543@yahoo.com
@@ -27,7 +27,7 @@
 diverse2GL :: Foldable t => String -> t Char -> Int16
 diverse2GL whspss = sum . uniquenessPeriodsG whspss
 {-# INLINE diverse2GL #-}
- 
+
 -- | A generalization of the uniquenessPeriods function of the @uniqueness-periods@ package.
 uniquenessPeriodsG :: Foldable t => String -> t Char -> [Int16]
 uniquenessPeriodsG whspss ws
@@ -39,8 +39,11 @@
             | (`elem` whspss) . snd $ x = Just (fst x)
             | otherwise = Nothing
            {-# INLINE g #-}
-           f !x = if null x then Nothing else let !idX0 = snd . head $ x in Just . (\vws (v2,v3) -> ((helpUPV3 vws [] .
-                    map fst $ v2,snd . head $ v2),v3)) vs . partition (\(_,xs) -> xs == idX0) $ x                    
+           f !x
+             | null x = Nothing
+             | otherwise = let !idX0 = snd . head $ x in Just . (\vws (v2,v3) -> ((helpUPV3 vws [] .
+                    map fst $ v2,snd . head $ v2),v3)) vs . partition (\(_,xs) -> xs == idX0) $ x
+{-# INLINE uniquenessPeriodsG #-}
 
 -- | The first and the third list arguments of numbers (if not empty) must be sorted in the ascending order.
 helpUPV3 :: [Int16] -> [Int16] -> [Int16] -> [Int16]
diff --git a/Phonetic/Languages/Simplified/StrictVG/Base.hs b/Phonetic/Languages/Simplified/StrictVG/Base.hs
--- a/Phonetic/Languages/Simplified/StrictVG/Base.hs
+++ b/Phonetic/Languages/Simplified/StrictVG/Base.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module      :  Phonetic.Languages.Simplified.StrictVG.Base
--- Copyright   :  (c) OleksandrZhabenko 2020
+-- Copyright   :  (c) OleksandrZhabenko 2020-2021
 -- License     :  MIT
 -- Stability   :  Experimental
 -- Maintainer  :  olexandr543@yahoo.com
@@ -43,15 +43,15 @@
   -> (t a -> [a]) -- ^ The function that is used internally to convert to the @[a]@ so that the function can process further the permutations
   -> ((t (t a)) -> [[a]]) -- ^ The function that is used internally to convert to the @[[a]]@ so that the function can process further
   -> ([a] -> t a) -- ^ The function that is used internally to convert to the needed representation that the function can process further
-  -> [Array Int Int] -- ^ The permutations of 'Int' indices starting from 0 and up to n (n is probably less than 7).
+  -> [Array Int Int] -- ^ The permutations of 'Int' indices starting from 0 and up to n (n is probably less than 8).
   -> t (t a) -- ^ Must be obtained as @subG whspss xs@
   -> [t a]
 uniquenessVariants2GNPBL !ts !us !hd f1 f2 f3 perms !subs
   | F.null subs = mempty
-  | otherwise =
-     let !uss = (hd %@ us) %^ mempty
+  | otherwise = map f3 ns
+   where !uss = (hd %@ us) %^ mempty
          !base0 = map (hd %@) . f2 $ subs
          !l = length base0
          !baseArr = listArray (0,l - 1) base0
-         !ns = universalSetGL ts uss f1 f2 perms baseArr in map f3 ns
-
+         !ns = universalSetGL ts uss f1 f2 perms baseArr -- in map f3 ns
+{-# INLINE uniquenessVariants2GNPBL #-}
diff --git a/phonetic-languages-simplified-base.cabal b/phonetic-languages-simplified-base.cabal
--- a/phonetic-languages-simplified-base.cabal
+++ b/phonetic-languages-simplified-base.cabal
@@ -3,9 +3,9 @@
 -- http://haskell.org/cabal/users-guide/
 
 name:                phonetic-languages-simplified-base
-version:             0.2.0.0
-synopsis:            A simplified version of the phonetic-languages functionality common for some different realizations.
-description:         A simplified version of the phonetic-languages functionality. Tries to use only necessary functionality and reduce the other ones.
+version:             0.3.0.0
+synopsis:            A basics of the phonetic-languages functionality.
+description:         The  common for different realizations functionality. Just the necessary one.
 homepage:            https://hackage.haskell.org/package/phonetic-languages-simlified-base
 license:             MIT
 license-file:        LICENSE
@@ -21,6 +21,6 @@
   exposed-modules:     Phonetic.Languages.Simplified.DataG.Base, Phonetic.Languages.Simplified.StrictVG.Base, Phonetic.Languages.Simplified.Lists.UniquenessPeriodsG.Base
   -- other-modules:
   other-extensions:    BangPatterns, FlexibleContexts, MultiParamTypeClasses
-  build-depends:       base >=4.8 && <4.15, subG >=0.4.2 && <1, phonetic-languages-permutations-array >=0.1 && <1
+  build-depends:       base >=4.8 && <4.16, subG >=0.5.2 && <1, phonetic-languages-permutations-array >=0.2 && <1
   -- hs-source-dirs:
   default-language:    Haskell2010
