diff --git a/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java b/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java
index 23503fa0c24dbf333f23a9e9e5998dd2b64561fc..74bea24b64a633547663bef3388561a91b791c97 100644
--- a/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java
+++ b/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java
@@ -11,6 +11,7 @@ import org.jetbrains.annotations.Nullable;
 
 import java.io.*;
 import java.util.Optional;
+import java.util.concurrent.TimeUnit;
 
 
 @SuppressWarnings("DuplicatedCode")
@@ -232,7 +233,7 @@ public class ImageDecompressor extends CompressorDecompressorBase {
             return false;
         }
         decompressionStopwatch.stop();
-        final double seconds = decompressionStopwatch.totalElapsedSeconds();
+        final double seconds = decompressionStopwatch.getElapsedInUnit(TimeUnit.SECONDS);
         final double MBSize = ((double) decompressedFileSize / 1000.0) / 1000.0;
         final double MBPerSec = MBSize / seconds;
         reportStatusToListeners("Decompression speed: %.4f MB/s", MBPerSec);
diff --git a/src/main/java/cz/it4i/qcmp/utilities/Stopwatch.java b/src/main/java/cz/it4i/qcmp/utilities/Stopwatch.java
index e09e195e85b95e2c21676822f4164853ce219ed1..1557591352000afa155ab75add3727900af2cdb6 100644
--- a/src/main/java/cz/it4i/qcmp/utilities/Stopwatch.java
+++ b/src/main/java/cz/it4i/qcmp/utilities/Stopwatch.java
@@ -2,14 +2,14 @@ package cz.it4i.qcmp.utilities;
 
 import org.jetbrains.annotations.NotNull;
 
-import java.time.Duration;
-import java.time.Instant;
+import java.util.concurrent.TimeUnit;
 
 public class Stopwatch {
 
     private final String name;
-    private Instant start;
-    Duration elapsed;
+    private boolean isMeasuring = false;
+    private long startTick;
+    private long elapsedTicks;
 
     @NotNull
     public static Stopwatch startNew(final String name) {
@@ -32,36 +32,36 @@ public class Stopwatch {
     }
 
     public void start() {
-        start = Instant.now();
+        isMeasuring = true;
+        startTick = System.nanoTime();
     }
 
     public void stop() {
-        final Instant end = Instant.now();
-        elapsed = Duration.between(start, end);
+        final long endTick = System.nanoTime();
+        isMeasuring = false;
+        elapsedTicks += endTick - startTick;
     }
 
-    public void restart() {
-        elapsed = null;
-        start = Instant.now();
-    }
-
-    public long totalElapsedNanoseconds() {
-        return elapsed.toNanos();
+    public void reset() {
+        isMeasuring = false;
+        elapsedTicks = 0;
     }
 
-    public long totalElapsedMilliseconds() {
-        return elapsed.toMillis();
+    public void restart() {
+        isMeasuring = true;
+        elapsedTicks = 0;
+        startTick = System.nanoTime();
     }
 
-    public double totalElapsedSeconds() {
-        return (elapsed.toNanos() / 1_000_000_000.0);
+    public long getElapsedInUnit(final TimeUnit timeUnit) {
+        return timeUnit.convert(elapsedTicks, TimeUnit.NANOSECONDS);
     }
 
     public String getElapsedTimeString() {
-        if (elapsed == null) {
+        if (isMeasuring || (elapsedTicks == 0)) {
             return "No time measured yet.";
         }
-        double MS = (double) elapsed.toMillis();
+        double MS = (double) getElapsedInUnit(TimeUnit.MILLISECONDS);
         double M = 0;
         double S = 0;
         double H = 0;