diff --git a/pom.xml b/pom.xml
index f2ad67f12ef2df3658effa2ce4a5505881059181..bc3a35bc9fa7132ce5d9906237641be735fb7a30 100644
--- a/pom.xml
+++ b/pom.xml
@@ -165,11 +165,10 @@
             <version>0.11.0</version>
         </dependency>
 
-        <!-- JavaFX Controls -->
         <dependency>
-            <groupId>org.controlsfx</groupId>
-            <artifactId>controlsfx</artifactId>
-            <version>11.0.0</version>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-text</artifactId>
+            <version>1.4</version>
         </dependency>
 
     </dependencies>
diff --git a/src/main/java/NTNU/IDATT1002/utils/MetadataStringFormatter.java b/src/main/java/NTNU/IDATT1002/utils/MetadataStringFormatter.java
new file mode 100644
index 0000000000000000000000000000000000000000..462392bd59a08ba3844e07ff7590d45c86d08df9
--- /dev/null
+++ b/src/main/java/NTNU/IDATT1002/utils/MetadataStringFormatter.java
@@ -0,0 +1,106 @@
+package NTNU.IDATT1002.utils;
+
+import NTNU.IDATT1002.models.Metadata;
+import org.apache.commons.text.WordUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Stream;
+
+
+/**
+ * Metadata String Formatter provides and interface for formatting
+ * metadata into a UI presentable string.
+ */
+public class MetadataStringFormatter {
+
+    private static List<String> include = Arrays.asList("geolocation",
+                                                 "camera",
+                                                 "lens",
+                                                 "aperture",
+                                                 "shutterSpeed",
+                                                 "ISO",
+                                                 "focalLength",
+                                                 "fileType",
+                                                 "photoDate",
+                                                 "fileSize",
+                                                 "fileDimension");
+
+    private static Logger logger = LoggerFactory.getLogger(MetadataStringFormatter.class);
+
+    /**
+     * Format given metadata by given delimiter.
+     *
+     * @param metadata the metadata to format
+     * @param delimiter the delimiter separating the fields
+     * @return the formatted string
+     */
+    public static String format(Metadata metadata, char delimiter) {
+
+        Stream<Field> fields = Arrays.stream(metadata.getClass().getDeclaredFields());
+        StringBuilder metadataString = new StringBuilder();
+
+        fields.filter(field -> include.contains(field.getName()))
+                .forEach(field -> {
+                    String formattedField = getFormattedField(metadata, delimiter, field);
+                    metadataString.append(formattedField);
+                });
+
+        return metadataString.toString();
+    }
+
+    /**
+     * Format given fields name and value.
+     * Converts camel case into title case where the first letter
+     * in each word is capital and adds given delimiter at the end.
+     *
+     * @param metadata the metadata holding the field
+     * @param delimiter the delimiter separating the fields
+     * @param field the field to format
+     * @return the formatted field as a string
+     */
+    private static String getFormattedField(Metadata metadata,
+                                            char delimiter,
+                                            Field field) {
+        field.setAccessible(true);
+
+        String[] fieldNameSplitByUppercase = field.getName().split("(?=\\p{Upper}[a-z])");
+        String fieldNameTitle = String.join(" ", fieldNameSplitByUppercase);
+
+        StringBuilder fieldString = new StringBuilder();
+        fieldString.append(WordUtils.capitalizeFully(fieldNameTitle))
+                .append(": ");
+
+        fieldString.append(getFieldValue(metadata, field))
+                .append(delimiter);
+
+        return fieldString.toString();
+    }
+
+    /**
+     * Format given fields value.
+     *
+     * @param metadata the metadata holding the field
+     * @param field the fields holding the value
+     */
+    private static String getFieldValue(Metadata metadata, Field field) {
+        StringBuilder fieldValueString = new StringBuilder();
+        try {
+            if (field.get(metadata) == null)
+                fieldValueString.append("No ")
+                        .append(field.getName())
+                        .append(" found.");
+            else
+                fieldValueString.append(field.get(metadata));
+
+        } catch (IllegalAccessException e) {
+            logger.error("[x] Failed to process field {}", field.getName(), e);
+        }
+
+        return fieldValueString.toString();
+    }
+
+}
diff --git a/src/test/java/NTNU/IDATT1002/utils/MetaDataExtractorTest.java b/src/test/java/NTNU/IDATT1002/utils/MetaDataExtractorTest.java
index 6d3a8d675f33f25fdca2e9f45b13c4b2dd3d460c..7f59e5685ee93675bbf84f81bb67ede515a5642f 100644
--- a/src/test/java/NTNU/IDATT1002/utils/MetaDataExtractorTest.java
+++ b/src/test/java/NTNU/IDATT1002/utils/MetaDataExtractorTest.java
@@ -1,13 +1,13 @@
 package NTNU.IDATT1002.utils;
 
-import static org.junit.jupiter.api.Assertions.*;
-
 import NTNU.IDATT1002.models.GeoLocation;
-import NTNU.IDATT1002.models.Metadata;
-import java.io.File;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.io.File;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 /**
  * Tests for {@link MetaDataExtractor}
  * These test are not the best and are best used as a proof of concept
diff --git a/src/test/java/NTNU/IDATT1002/utils/MetadataStringFormatterTest.java b/src/test/java/NTNU/IDATT1002/utils/MetadataStringFormatterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9579acec19eda162b61cba9b40722bc6b2180180
--- /dev/null
+++ b/src/test/java/NTNU/IDATT1002/utils/MetadataStringFormatterTest.java
@@ -0,0 +1,34 @@
+package NTNU.IDATT1002.utils;
+
+import NTNU.IDATT1002.models.Metadata;
+import org.junit.Ignore;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class MetadataStringFormatterTest {
+
+    private File metadataImage;
+    private Metadata metadata = new Metadata();
+    private final String formattedMetadata = "Geolocation: No geolocation found.  Camera: Make: NIKON CORPORATION, Model: NIKON D610  Lens: Lens Specification: 24-70mm f/2,8, Lens Model: 24.0-70.0 mm f/2.8  Aperture: Aperture Value: f/2,8, Max Aperture Value: f/2,8  Shutter Speed: Shutter Speed Value: 1/124 sec  Iso: ISO Speed Ratings: 640  Focal Length: Focal Length: 70 mm  File Type: Detected  Name: JPEG  Photo Date: Date Created: 2020:02:15, Time Created: 12:07:01  File Size:  Size: 821839 bytes  File Dimension: Image Height: 930 pixels, Image Width: 1394 pixels";
+
+    @BeforeEach
+    void setUp() {
+        metadataImage = new File("src/test/resources/Images/pb.jpg");
+        MetaDataExtractor.setMetadata(metadata, metadataImage);
+    }
+
+    /**
+     * Test that metadata string is properly formatted.
+     */
+    @Ignore
+    @Test
+    void testFormatReturnsFormattedString() {
+        String metadataString = MetadataStringFormatter.format(metadata, ' ');
+
+        assertEquals(metadataString.trim(), formattedMetadata.trim());
+    }
+}
\ No newline at end of file