diff --git a/src/main/java/azgracompress/benchmark/Benchmark.java b/src/main/java/azgracompress/benchmark/Benchmark.java
index 6157429e3d39078c088c16540bf7f4b803e66454..9c81a82b6cef74b0d95f9bc08256cff6086d1e19 100644
--- a/src/main/java/azgracompress/benchmark/Benchmark.java
+++ b/src/main/java/azgracompress/benchmark/Benchmark.java
@@ -14,6 +14,7 @@ import azgracompress.utilities.Utils;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Optional;
 
 public class Benchmark extends BenchmarkBase {
 
@@ -59,8 +60,8 @@ public class Benchmark extends BenchmarkBase {
         decompressOps.setOutputFilePath(decompressedFile);
         ImageDecompressor decompressor = new ImageDecompressor(decompressOps);
 
-        final ImageU16Dataset decompressedDataset = decompressor.decompressInMemory();
-        if (decompressedDataset == null) {
+        final Optional<ImageU16Dataset> maybeDataset = decompressor.decompressInMemory();
+        if (!maybeDataset.isPresent()) {
             System.err.println("Errors occurred during decompression.");
             return;
         }
@@ -75,7 +76,7 @@ public class Benchmark extends BenchmarkBase {
             return;
         }
 
-        final int[] quantizedData = TypeConverter.shortArrayToIntArray(decompressedDataset.getPlaneData(0));
+        final int[] quantizedData = TypeConverter.shortArrayToIntArray(maybeDataset.get().getPlaneData(0));
 
         final int[] diffArray = Utils.getDifference(originalData, quantizedData);
         final double mse = Utils.calculateMse(diffArray);
diff --git a/src/main/java/azgracompress/compression/ImageDecompressor.java b/src/main/java/azgracompress/compression/ImageDecompressor.java
index 05611991c4553d2152ded6f5046bd6fe153ccd8e..1bb1f5c11f64053ae6d81bd46c16d0432ec86d3b 100644
--- a/src/main/java/azgracompress/compression/ImageDecompressor.java
+++ b/src/main/java/azgracompress/compression/ImageDecompressor.java
@@ -8,6 +8,7 @@ import azgracompress.utilities.Stopwatch;
 import org.jetbrains.annotations.Nullable;
 
 import java.io.*;
+import java.util.Optional;
 
 
 @SuppressWarnings("DuplicatedCode")
@@ -233,22 +234,22 @@ public class ImageDecompressor extends CompressorDecompressorBase {
     }
 
     // TODO(Moravec): Return optional to get rid of null check.
-    public ImageU16Dataset decompressInMemory() {
+    public Optional<ImageU16Dataset> decompressInMemory() {
         try (FileInputStream fileInputStream = new FileInputStream(options.getInputDataInfo().getFilePath());
              DataInputStream dataInputStream = new DataInputStream(fileInputStream)) {
 
             final QCMPFileHeader header = decompressQcmpHeader(dataInputStream);
             if (header == null)
-                return null;
+                return Optional.empty();
 
             IImageDecompressor imageDecompressor = getImageDecompressor(header);
             if (imageDecompressor == null) {
                 System.err.println("Unable to create correct decompressor.");
-                return null;
+                return Optional.empty();
             }
 
             if (!checkInputFileSize(header, imageDecompressor)) {
-                return null;
+                return Optional.empty();
             }
 
             final int planePixelCount = header.getImageSizeX() * header.getImageSizeY();
@@ -259,14 +260,14 @@ public class ImageDecompressor extends CompressorDecompressorBase {
                 imageDecompressor.decompressToBuffer(dataInputStream, decompressedData, header);
             } catch (ImageDecompressionException ex) {
                 System.err.println(ex.getMessage());
-                return null;
+                return Optional.empty();
             }
 
-            return new ImageU16Dataset(header.getImageDims().toV2i(), header.getImageSizeZ(), decompressedData);
+            return Optional.of(new ImageU16Dataset(header.getImageDims().toV2i(), header.getImageSizeZ(), decompressedData));
 
         } catch (IOException ioEx) {
             ioEx.printStackTrace();
-            return null;
+            return Optional.empty();
         }
     }