diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/util/ProductUtil.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/util/ProductUtil.java
index c77016523dfd1161343e576eb1ff5493963f951e..40ba1f50447d72116d2e8def8b1051b41006fcf4 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/util/ProductUtil.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/util/ProductUtil.java
@@ -4,7 +4,9 @@ import ntnu.idatt2016.v233.SmartMat.entity.product.Product;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
@@ -16,52 +18,33 @@ import java.util.regex.Pattern;
 public class ProductUtil {
 
 
-    private static final String[] VOLUME_UNITS = {"ml", "cl", "dl", "l", "g", "kg"};
+    private static final String VOLUME_REGEX = "(\\d+(\\.\\d+)?)\\s*(mls?|centiliters?|deciliters?|liters?|grams?|kilograms?)";
+    private static final Map<String, List<String>> VOLUME_UNIT_VARIATIONS = Map.of(
+            "ml", List.of("ml", "milliliters", "millilitres"),
+            "cl", List.of("cl", "centiliters", "centilitres"),
+            "dl", List.of("dl", "deciliters", "decilitres"),
+            "l", List.of("l", "liters", "litres"),
+            "g", List.of("g", "grams"),
+            "kg", List.of("kg", "kilograms")
+    );
 
-    /**
-     * Gets the volume of a product, if it exists
-     * By looking at the name and description of the product
-     * it will try to first find the volume in the name, and then in the description
-     * It uses pre defined volume units to find the volume
-     * Todo: Make it be able to find volume if the size is definde by count
-     * @param product The product to get the volume from
-     * @return The volume of the product, if it exists
-     */
     public static Optional<List<String>> getVolumeFromProduct(Product product) {
-        for (String desc : Arrays.asList(product.getName(), product.getDescription())) {
-            List<String> words = List.of(desc.split(" "));
-            if (words.size() > 1) {
-                String volume = "";
-                for (String unit : VOLUME_UNITS) {
-                    int i = words.indexOf(unit);
-                    if (i != -1) {
-                        return Optional.of(List.of(words.get(i - 1), unit));
-                    }
-                }
-
-                volume = words.stream().map(word -> Arrays.stream(VOLUME_UNITS).map(unit -> {
-                                    int index = word.indexOf(unit);
-                                    if (index == -1) {
-                                        if (!Pattern.matches("[a-zA-Z]+", word) && ProductUtil.hasNumbers(word)) {
-                                            return word;
-                                        }
-                                        return "";
-                                    }
-                                    return word.substring(0, index) + " " + word.substring(index);
-                                }).findAny().orElse(""))
-                        .filter(ProductUtil::hasNumbers)
-                        .findAny()
-                        .orElse("");
-                if (!volume.equals("")){
-                    return Optional.of(List.of(volume.split(" ")));
+        String desc = product.getName() + " " + product.getDescription();
+        Matcher matcher = Pattern.compile(VOLUME_REGEX).matcher(desc);
+        if (matcher.find()) {
+            String volumeString = matcher.group(1);
+            double volume = Double.parseDouble(volumeString);
+            String unitString = matcher.group(3);
+            for (Map.Entry<String, List<String>> entry : VOLUME_UNIT_VARIATIONS.entrySet()) {
+                if (entry.getValue().contains(unitString)) {
+                    return Optional.of(List.of(String.valueOf(volume), entry.getKey()));
                 }
             }
         }
-
-
         return Optional.empty();
     }
 
+
     /**
      * Checks if a string contains any numbers
      * @param s The string to check
diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/util/StatisticUtil.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/util/StatisticUtil.java
index a05b097bdbf468b08e4ff719eb7a40541a8a0345..9bc24cb424e394e59165ffb9351771a74a0f4fd4 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/util/StatisticUtil.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/util/StatisticUtil.java
@@ -113,7 +113,7 @@ public class StatisticUtil {
                 case "ml" -> sum += waste.getAmount() * 0.000998;
                 case "cl" -> sum += waste.getAmount() * 0.00998;
                 case "dl" -> sum += waste.getAmount() * 0.0998;
-                default -> sum += 0.1;
+                default -> sum += 0.1 * waste.getAmount();
             }
         }
         return sum;
diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/service/product/ProductServiceTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/product/ProductServiceTest.java
index 3e63f644f1131ff2d1d222386beaa6398b00a65c..42595c72ca2cd9065873429645914e5d5c1b9810 100644
--- a/src/test/java/ntnu/idatt2016/v233/SmartMat/service/product/ProductServiceTest.java
+++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/product/ProductServiceTest.java
@@ -134,7 +134,7 @@ public class ProductServiceTest {
         // Verify that the service returns the correct volume
         Optional<List<String>> returnedVolume = productService.getProductVolume(productId);
         assertTrue(returnedVolume.isPresent());
-        assertEquals(List.of("500", "ml"), returnedVolume.get());
+        assertEquals(List.of("500.0", "ml"), returnedVolume.get());
     }
 
     @Test
diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/util/ProductUtilTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/util/ProductUtilTest.java
index 0164ae29d869b4a85b47dab4cdd82d95c78d8b1e..2ee4467a78d2727454b1cd6a497527973dca9bac 100644
--- a/src/test/java/ntnu/idatt2016/v233/SmartMat/util/ProductUtilTest.java
+++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/util/ProductUtilTest.java
@@ -22,7 +22,7 @@ class ProductUtilTest {
 
     @Test
     void getVolumeFromProduct() {
-        assertEquals(List.of("24x500", "ml"), ProductUtil.getVolumeFromProduct(product).get());
+        assertEquals(List.of("500.0", "ml"), ProductUtil.getVolumeFromProduct(product).get());
 
         this.product = Product.builder()
                 .ean(123456789)
@@ -30,7 +30,7 @@ class ProductUtilTest {
                 .description("Pepsi Original 24x500 ml")
                 .build();
 
-        assertEquals(List.of("24x500", "ml"), ProductUtil.getVolumeFromProduct(product).get());
+        assertEquals(List.of("500.0", "ml"), ProductUtil.getVolumeFromProduct(product).get());
 
         this.product = Product.builder()
                 .ean(123456789)
@@ -39,7 +39,7 @@ class ProductUtilTest {
                 .build();
 
 
-        assertEquals(List.of("24x500", "ml"), ProductUtil.getVolumeFromProduct(product).get());
+        assertEquals(List.of("500.0", "ml"), ProductUtil.getVolumeFromProduct(product).get());
 
         this.product = Product.builder()
                 .ean(123456789)
@@ -48,6 +48,6 @@ class ProductUtilTest {
                 .build();
 
 
-        assertEquals(List.of("24x500", "ml"), ProductUtil.getVolumeFromProduct(product).get());
+        assertEquals(List.of("500.0", "ml"), ProductUtil.getVolumeFromProduct(product).get());
     }
 }
\ No newline at end of file