diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -42,3 +42,8 @@
 
 * Fourth version. Changed the behaviour of the program. Now it uses command line arguments (if any). See README. Added functions and rewrote the complex ones. 
 
+## 0.4.1.0 -- 2020-01-01
+
+* Fourth version revised A. Fixed issues with the null command line arguments and showing precision. Added new functions.
+
+
diff --git a/Main.hs b/Main.hs
--- a/Main.hs
+++ b/Main.hs
@@ -25,7 +25,7 @@
 -- Please, use it carefully. After the execution the program if terminated naturally without interruption 
 -- removes (cleans) all the created sound files in the current directory for security reasons. If it terminates 
 -- by interruption or in general it is a good practice to remove the current directory sound files manually. 
--- The function uses a command line arguments. For their meaning, please, refer to README file.
+-- The function uses command line arguments. For their meaning, please, refer to README file.
 -- 
 main :: IO ()
 main = do
@@ -108,8 +108,12 @@
           "S.wav", "T.wav", "U.wav", "V.wav", "W.wav", "X.wav", "Y.wav", "Z.wav", "a.wav", "b.wav", "c.wav", 
             "d.wav", "e.wav", "f.wav"]
   copiedFs <- mapM getDataFileName ["-.wav", "0.wav", "1.wav"]
-  let a0 = concat . take 1 $ args
-      a1 = concat . drop 1 . take 2 $ args
+  let a0 = if null . take 1 $ args 
+             then []
+             else concat . take 1 $ args
+      a1 = if null . drop 1 . take 2 $ args 
+             then []
+             else concat . drop 1 . take 1 $ args
   mapM_ (produceSound (a0, a1)) paths
   silenceFs <- mapM makeAbsolute ["-.wav", "0.wav", "1.wav"]
   let pairs = zip copiedFs silenceFs
diff --git a/Processing_mmsyn7ukr.hs b/Processing_mmsyn7ukr.hs
--- a/Processing_mmsyn7ukr.hs
+++ b/Processing_mmsyn7ukr.hs
@@ -24,12 +24,12 @@
 import SoXBasics
 import CaseBi (getBFst')
 
--- | Function that being given a tuple of String and a path to the installed by the @mmsyn6ukr@ package file produces the corresponding analogous sound with your created 
--- voicing.. The tuple control the function behaviour. The first @String@ in it specifies the actions that will be performed to produce a sound file and the second one 
+-- | Function that being given a tuple of @String@ and a path to the installed by the @mmsyn6ukr@ package file produces the corresponding analogous sound with your created 
+-- voicing. The tuple controls the function behaviour. The first @String@ in it specifies the actions that will be performed to produce a sound file and the second one 
 -- specifies a maximum absolute amplitude starting from which the sound will not be truncated if the 'alterVadB' and 'alterVabE' functions must be applied (that is specified 
 -- by the first @String@ parameter). 
 produceSound :: (String, String) -> FilePath -> IO ()
-produceSound (actsctrl, noiseLim) file  = do {
+produceSound (actsctrl, noiseLim) file  = onException (do {
 ; let file1 = drop (length file - 5) file 
       soundUkr = getBFst' ("е", V.fromList . zip ["A.wav", "B.wav", "C.wav", "D.wav", "E.wav", "F.wav", "G.wav", "H.wav", 
         "I.wav", "J.wav", "K.wav", "L.wav", "M.wav", "N.wav", "O.wav", "P.wav", "Q.wav", "R.wav", 
@@ -41,7 +41,8 @@
 ; playA file
 ; putStrLn "The sound duration is: "
 ; produceSound2 (file, file1) (actsctrl, noiseLim) soundUkr
-; return () }
+; return () }) (putStrLn "Something went unexpectedly, please, repeat the precedure agein, be attentive to the data you provide as input! " >> cleanTemp >> 
+    produceSound (actsctrl, noiseLim) file)
 
 
 -- | Function 'produceSound3' is used internally in the 'produceSound2' function.
@@ -54,37 +55,31 @@
             then beginProcessing file file1 soundUkr (actsctrl, noiseLim)
             else do 
               resampleA "_8x.wav" (22050::Int)
-              norm "3_8x.wav"
-              volS2 "83_8x.wav" file
-              renameFile "8.3_8x.wav" file1
+              produceSound4 (file, file1)  "3_8x.wav"
     "1" -> 
       do
-          alterVadB "_8x.wav" lim0 noiseMax (duration0*0.1)
+          alterVadB "_8x.wav" lim0 noiseMax (duration0*0.04)
           lim1 <- durationA "_8x.wav"
           if lim1 <= 0.0
             then beginProcessing file file1 soundUkr (actsctrl, noiseLim)
             else do 
-              alterVadE "_8x.wav" lim1 noiseMax (duration0*0.1)
+              alterVadE "_8x.wav" lim1 noiseMax (duration0*0.04)
               resampleA "_8x.wav" (22050::Int)
-              norm "3_8x.wav"
-              volS2 "83_8x.wav" file
-              renameFile "8.3_8x.wav" file1    
+              produceSound4 (file, file1)  "3_8x.wav"
     "2" ->
       do
-          alterVadB "_8x.wav" lim0 noiseMax (duration0*0.1)
+          alterVadB "_8x.wav" lim0 noiseMax (duration0*0.04)
           lim1 <- durationA "_8x.wav"
           if lim1 <= 0.0
             then beginProcessing file file1 soundUkr (actsctrl, noiseLim)
             else do 
-              alterVadE "_8x.wav" lim1 noiseMax (duration0*0.1)
+              alterVadE "_8x.wav" lim1 noiseMax (duration0*0.04)
               sincA "_8x.wav"
               resampleA "4._8x.wav" (22050::Int)
-              norm "34._8x.wav"
-              volS2 "834._8x.wav" file
-              renameFile "8.34._8x.wav" file1  
+              produceSound4 (file, file1) "34._8x.wav"
     _ ->
       do
-          alterVadB "_8x.wav" lim0 noiseMax (duration0*0.1)
+          alterVadB "_8x.wav" lim0 noiseMax (duration0*0.04)
           lim1 <- durationA "_8x.wav"
           if lim1 <= 0.0
             then beginProcessing file file1 soundUkr (actsctrl, noiseLim)
@@ -93,10 +88,18 @@
               sincA "_8x.wav"
               resampleA "4._8x.wav" (22050::Int)
               quarterSinFade "34._8x.wav"
-              norm "434._8x.wav"
-              volS2 "8434._8x.wav" file
-              renameFile "8.434._8x.wav" file1
+              produceSound4 (file, file1) "434._8x.wav"
 
+-- | Function 'produceSound4' is used internally in the 'produceSound3' function for amplification 
+-- up/down to the maximum level of the first @FilePath@ parameter in the tuple. The second one gives 
+-- a name of the resulting file and the third @FilePath@ parameter of the function is the @FilePath@ for 
+-- the input file .
+produceSound4 :: (FilePath, FilePath) -> FilePath -> IO ()
+produceSound4 (file, file1) fileB = do 
+  norm fileB
+  volS2 ("8" ++ fileB) file
+  renameFile ("8." ++ fileB) file1
+
 -- | Function 'produceSound2' is used internally in the 'produceSound' function.
 produceSound2 :: (FilePath, FilePath) -> (String, String) -> String -> IO ()
 produceSound2 (file, file1) (actsctrl, noiseLim) soundUkr = 
@@ -104,7 +107,7 @@
     ; longerK0 <- tempS soundUkr
     ; (_, Just hout, _, _) <- createProcess (proc (fromJust . showE $ "soxi") ["-D", file]) { std_out = CreatePipe }
     ; x3 <- hGetContents hout
-    ; putStrLn $ showFFloat Nothing duration0 $ show 0
+    ; putStrLn $ showCoef (showFFloat (Just 6) duration0 $ show 0)
     ; putStrLn ""
     ; putStrLn "It means that to produce more than 3 seconds of recording, you must specify at least "
     ; putStrLn $ "    ;  " ++ show (3.0/(7*duration0)) ++ " as a next step ratio being prompt "
@@ -143,6 +146,12 @@
     ; let noiseMax = getBFst' (2::Int, V.fromList [("0", 0::Int), ("1", 1::Int), ("2", 2::Int), ("3", 3::Int)]) noiseLim 
     ; produceSound3 (actsctrl, noiseLim) (file, file1) soundUkr (noiseMax, duration0) lim0
     ; cleanTemp }
+
+-- | Function 'showCoef' is used to represent the duration of the sound file.
+showCoef :: String -> String
+showCoef xs | any (== '.') xs = 
+  let (ts, us) = break (== '.') xs in let ws = showFFloat (Just 6) ((fromIntegral (read (take 6 . drop 1 $ us)::Int) + 1.0) / 1000000.0) $ show 0 in let result = ts ++ drop 1 ws in result
+            | otherwise = xs
       
 -- | Function 'beginProcessing' is used to catch the variant where the sound is fully cut by the SoX because the sound was created in inappropriate time.
 -- It returns the process to the beginning of the sound recording. For the meaning of the tuple of @Sring@ parameters, refer to 'produceSound' documentation.
@@ -155,7 +164,7 @@
 ; playA file
 ; putStrLn "The sound duration is: "
 ; duration0 <- durationA file
-; putStrLn $ showFFloat Nothing duration0 $ show 0
+; putStrLn $ showCoef (showFFloat (Just 6) duration0 $ show 0)
 ; putStrLn ""
 ; putStrLn "It means that to produce more than 3 seconds of recording, you must specify at least "
 ; putStrLn $ ";  " ++ show (3.0/(7*duration0)) ++ " as a next step ratio being prompt "
diff --git a/mmsyn7ukr.cabal b/mmsyn7ukr.cabal
--- a/mmsyn7ukr.cabal
+++ b/mmsyn7ukr.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                mmsyn7ukr
-version:             0.4.0.0
+version:             0.4.1.0
 synopsis:            A simple basic interface to some SoX functionality or to produce a voice that can be used by mmsyn7h
 description:         A program and a library that can be used as a simple basic interface to some SoX functionality or to produce your voice in Ukrainian (if you pronounce the sounds properly) represented by the separate sounds or something special like soft sign.
 homepage:            https://hackage.haskell.org/package/mmsyn7ukr
