diff --git a/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java b/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java
index 03cab6ae4c587df37ef0e8f10f6b36db6db8ed55..eb7f858d9fffc3fb8d6bd813843963dbcbb3f5c2 100644
--- a/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java
+++ b/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java
@@ -18,6 +18,7 @@ public class DataExchange {
         searchField = "";
     }
     public List<File> getUploadedFiles() {
+        System.out.println("SHITFUCK111");
         return uploadedFiles;
     }
 
diff --git a/src/main/java/NTNU/IDATT1002/controllers/UploadedSingle.java b/src/main/java/NTNU/IDATT1002/controllers/UploadedSingle.java
index 5df00e9b58f37c2c418b25b1f4093aba1d1cab8a..4a951124f1982c764724ee736a1e7a5314e6276c 100644
--- a/src/main/java/NTNU/IDATT1002/controllers/UploadedSingle.java
+++ b/src/main/java/NTNU/IDATT1002/controllers/UploadedSingle.java
@@ -2,13 +2,8 @@ package NTNU.IDATT1002.controllers;
 
 import NTNU.IDATT1002.App;
 import NTNU.IDATT1002.ApplicationState;
-
 import NTNU.IDATT1002.models.Tag;
 import NTNU.IDATT1002.service.ImageService;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
 import javafx.event.ActionEvent;
 import javafx.fxml.Initializable;
 import javafx.scene.control.Button;
@@ -18,9 +13,12 @@ import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 import javafx.scene.input.MouseEvent;
 
-import javax.persistence.Table;
+import java.io.File;
 import java.io.IOException;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.ResourceBundle;
 
 /**
@@ -141,7 +139,8 @@ public class UploadedSingle implements Initializable {
     List<File> list = App.ex.getUploadedFiles();
     File fil = list.get(0);
     ArrayList<Tag> tags = new ArrayList<>();
-    imageService.createImage(applicationState.getCurrentUser(), fil, tags);
+    System.out.println("SHITFUCK");
+    imageService.createImage(ApplicationState.getCurrentUser(), fil, tags);
    /* list.stream().forEach(x -> {
       image = imageService.createImage(applicationState.getCurrentUser(), x).get();
       List tags = tagStringSplit(photo_tag);
diff --git a/src/main/java/NTNU/IDATT1002/models/Histogram.java b/src/main/java/NTNU/IDATT1002/models/Histogram.java
index dc2680fb90a46f9f1869fabbecf55770253c74cd..73a4a83f45b060de189b3bd0edee7b86f07e51fc 100644
--- a/src/main/java/NTNU/IDATT1002/models/Histogram.java
+++ b/src/main/java/NTNU/IDATT1002/models/Histogram.java
@@ -2,7 +2,6 @@ package NTNU.IDATT1002.models;
 
 
 import javax.persistence.*;
-import javax.validation.constraints.NotBlank;
 
 /**
  * Creates histogram table
@@ -27,21 +26,14 @@ public class Histogram {
     @JoinColumn(name = "metadata_id")
     private Metadata metadata;
 
-    @NotBlank (message = "Data may not be blank")
+//    @Column(name="data", length=294967295)
+//    @NotBlank (message = "Data may not be blank")
+    @Lob
     private String data;
 
     public Histogram() {
     }
 
-    /**
-     * Constrtuctor for Histogram, taking in both histogramId and data
-     *
-     * @param data
-     */
-    public Histogram(String data){
-        this.data = data;
-    }
-
     public Long getHistogramId() {
         return histogramId;
     }
diff --git a/src/main/java/NTNU/IDATT1002/service/ImageService.java b/src/main/java/NTNU/IDATT1002/service/ImageService.java
index cec0fdc26cf0214cd5dd17cf13fb5c3a35a0f386..88de5b55d6692bebbef446a7036a2eab2f25f86b 100644
--- a/src/main/java/NTNU/IDATT1002/service/ImageService.java
+++ b/src/main/java/NTNU/IDATT1002/service/ImageService.java
@@ -1,11 +1,6 @@
 package NTNU.IDATT1002.service;
-import NTNU.IDATT1002.models.Image;
-import NTNU.IDATT1002.models.Metadata;
-import NTNU.IDATT1002.models.Tag;
-import NTNU.IDATT1002.models.User;
-import NTNU.IDATT1002.repository.ImageRepository;
-import NTNU.IDATT1002.repository.MetadataRepository;
-import NTNU.IDATT1002.repository.TagRepository;
+import NTNU.IDATT1002.models.*;
+import NTNU.IDATT1002.repository.*;
 import NTNU.IDATT1002.service.filters.ImageFilter;
 import NTNU.IDATT1002.utils.ImageUtil;
 import NTNU.IDATT1002.utils.MetaDataExtractor;
@@ -30,6 +25,8 @@ public class ImageService {
     private ImageRepository imageRepository;
     private MetadataRepository metadataRepository;
     private TagRepository tagRepository;
+    private HistorgramRepository historgramRepository;
+    private GeoLocatioRepository geoLocatioRepository;
     private MetaDataExtractor metaDataExtractor;
 
     /**
@@ -42,6 +39,8 @@ public class ImageService {
         this.imageRepository = new ImageRepository(entityManager);
         this.metadataRepository = new MetadataRepository(entityManager);
         this.tagRepository = new TagRepository(entityManager);
+        this.historgramRepository = new HistorgramRepository(entityManager);
+        this.geoLocatioRepository = new GeoLocatioRepository(entityManager);
         this.metaDataExtractor = new MetaDataExtractor();
 
     }
@@ -54,21 +53,32 @@ public class ImageService {
      * @return Optional containing the saved image
      */
     public Optional<Image> createImage(User user, File file, ArrayList<Tag> tags) {
+
+        GeoLocation geoLocation = metaDataExtractor.getGeoLocation(file);
+        Histogram histogram = metaDataExtractor.getHistogram(file);
+
+        geoLocation = geoLocatioRepository.save(geoLocation).orElse(null);
+        histogram = historgramRepository.save(histogram).orElse(null);
+
         Image image = new Image();
-        Metadata metadata = metaDataExtractor.assembleMetaData(file, image);
+        Metadata metadata = new Metadata();
+        metadata.setImage(image);
+        metadata.setGeoLocation(geoLocation);
+        metadata.setHistogram(histogram);
+
         System.out.println(metadata.getGeoLocation().getLatitude());
         System.out.println(metadata.getHistogram().getData());
 
+        metadata = metadataRepository.save(metadata).orElse(null);
 
         byte[] bFile = ImageUtil.convertToBytes(file.getPath());
-        metadata = metadataRepository.save(metadata).get();
 
         //TODO: Unsure what to do with imageAlbum
         image.setRawImage(bFile);
         image.setUser(user);
         image.setMetadata(metadata);
         image.setPath(file.getPath());
-        //image.addTags(tags);
+//        image.addTags(tags);
         return imageRepository.save(image);
     }
 
diff --git a/src/main/java/NTNU/IDATT1002/utils/MetaDataExtractor.java b/src/main/java/NTNU/IDATT1002/utils/MetaDataExtractor.java
index 63af4bcbb28d287c23bb202dcd2b94f678852ad9..6ebe07b15e091fe3258e3ddcfb71eb19f4a09514 100644
--- a/src/main/java/NTNU/IDATT1002/utils/MetaDataExtractor.java
+++ b/src/main/java/NTNU/IDATT1002/utils/MetaDataExtractor.java
@@ -5,25 +5,19 @@ import NTNU.IDATT1002.models.Histogram;
 import NTNU.IDATT1002.models.Image;
 import NTNU.IDATT1002.repository.GeoLocatioRepository;
 import NTNU.IDATT1002.repository.HistorgramRepository;
-import NTNU.IDATT1002.repository.MetadataRepository;
 import com.drew.imaging.ImageMetadataReader;
 import com.drew.imaging.ImageProcessingException;
 import com.drew.metadata.Directory;
 import com.drew.metadata.Metadata;
 import com.drew.metadata.MetadataException;
 import com.drew.metadata.Tag;
-import com.drew.metadata.exif.*;
-import com.drew.metadata.jpeg.JpegDirectory;
+import com.drew.metadata.exif.GpsDirectory;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.Persistence;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
 
 
 public class MetaDataExtractor {
@@ -47,7 +41,7 @@ public class MetaDataExtractor {
      * @throws IOException
      * @throws MetadataException
      */
-    private GeoLocation getGPS(File file) throws ImageProcessingException, IOException, MetadataException {
+    public GeoLocation getGeoLocation(File file) {
         String gps = "";
         String latitude = "";
         String longitude = "";
@@ -64,26 +58,32 @@ public class MetaDataExtractor {
 
             geoLocation.setLatitude(latitude);
             geoLocation.setLongitude(longitude);
-            geoLocationRepository.save(geoLocation);
         }
-        catch (NullPointerException e) {
+        catch (NullPointerException | ImageProcessingException | IOException e) {
             e.printStackTrace();
         }
         return geoLocation;
     }
 
-    public Histogram getHistorgram(File file) throws ImageProcessingException, IOException {
-        String text = "";
-        Metadata metadata = ImageMetadataReader.readMetadata(file);
-        Histogram histogram = new Histogram();
+    public Histogram getHistogram(File file) {
+        Metadata metadata = null;
 
+        try {
+            metadata = ImageMetadataReader.readMetadata(file);
+        } catch (IOException | ImageProcessingException e) {
+            e.printStackTrace();
+        }
+
+        StringBuilder data = new StringBuilder();
+        assert metadata != null;
         for(Directory d : metadata.getDirectories()) {
             for (Tag t : d.getTags()) {
-                text += t.toString() + " | ";
+                data.append(t.toString()).append(" | ");
             }
         }
-        histogram.setData(text);
-        historgramRepository.save(histogram);
+        Histogram histogram = new Histogram();
+        histogram.setData(data.toString());
+
         return histogram;
     }
 
@@ -92,8 +92,8 @@ public class MetaDataExtractor {
         NTNU.IDATT1002.models.Metadata metadata = new NTNU.IDATT1002.models.Metadata();
         try {
             metadata.setImage(image);
-            metadata.setGeoLocation(getGPS(file));
-            metadata.setHistogram(getHistorgram(file));
+            metadata.setGeoLocation(getGeoLocation(file));
+            metadata.setHistogram(getHistogram(file));
 
         }
         catch (Exception e) {