diff --git a/src/main/java/NTNU/IDATT1002/controllers/Search.java b/src/main/java/NTNU/IDATT1002/controllers/Search.java
index 6a3724066afa4a28d9ae532887745db4fc16297a..edcf4974307c7d16ca7177b0eb7e9a0528f55fe3 100644
--- a/src/main/java/NTNU/IDATT1002/controllers/Search.java
+++ b/src/main/java/NTNU/IDATT1002/controllers/Search.java
@@ -1,6 +1,11 @@
 package NTNU.IDATT1002.controllers;
 
 import NTNU.IDATT1002.App;
+import NTNU.IDATT1002.models.Image;
+import NTNU.IDATT1002.models.Tag;
+import NTNU.IDATT1002.service.ImageService;
+import NTNU.IDATT1002.service.TagService;
+import NTNU.IDATT1002.utils.ImageUtil;
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import javafx.fxml.Initializable;
@@ -10,7 +15,6 @@ import javafx.scene.control.Button;
 import javafx.scene.control.ChoiceBox;
 import javafx.scene.control.ScrollPane;
 import javafx.scene.control.TextField;
-import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.HBox;
@@ -19,10 +23,17 @@ import javafx.scene.layout.VBox;
 import javafx.scene.text.Font;
 import javafx.scene.text.Text;
 
+import javax.persistence.*;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaDelete;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.CriteriaUpdate;
+import javax.persistence.metamodel.Metamodel;
 import java.io.IOException;
 import java.net.URL;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.ResourceBundle;
 import java.util.stream.Collectors;
 
@@ -48,6 +59,7 @@ public class Search implements Initializable {
     public VBox vBox;
 
 
+
     /**
      * Method that writes the word that is searched for.
      * Also generates HBoxes with image title, tags...
@@ -55,28 +67,30 @@ public class Search implements Initializable {
      * @param resources
      */
     public void initialize(URL location, ResourceBundle resources) {
-    if (!App.ex.getSearchField().isEmpty()){
+        if (!App.ex.getSearchField().isEmpty()){
             search_result.setText(App.ex.getSearchField());
         }
-        List<String> urls = Arrays.asList("@../../Images/placeholder-1920x1080.png", "@../../Images/party.jpg", "@../../Images/placeholderLogo.png", "@../../Images/placeholder-1920x1080.png", "@../../Images/placeholder-1920x1080.png");
-        for(int i = 0; i < urls.size(); i++) {
-            HBox h = new HBox();
-            h.setPrefHeight(300);
-            h.setPrefWidth(1920);
-            h.setAlignment(Pos.CENTER);
-            h.setStyle("-fx-background-color: #999999;");
-
-            Pane p = new Pane();
-            p.setPrefWidth(1400);
-            p.setPrefHeight(300);
-
-            ImageView iV = new ImageView();
-            iV.setImage(new Image(urls.get(i)));
-            iV.setFitHeight(300);
-            iV.setFitWidth(500);
-            iV.pickOnBoundsProperty().setValue(true);
-            iV.setPreserveRatio(true);
-            iV.setOnMouseClicked(new EventHandler<MouseEvent>() {
+
+        List<NTNU.IDATT1002.models.Image> images = new ImageService(App.ex.getEntityManager()).searchResult(App.ex.getSearchField());
+
+        for(int i = 0; i < images.size(); i++) {
+            HBox hBox = new HBox();
+            hBox.setPrefHeight(300);
+            hBox.setPrefWidth(1920);
+            hBox.setAlignment(Pos.CENTER);
+            hBox.setStyle("-fx-background-color: #999999;");
+
+            Pane pane = new Pane();
+            pane.setPrefWidth(1400);
+            pane.setPrefHeight(300);
+
+            ImageView imageView = new ImageView();
+            imageView.setImage(ImageUtil.convertToFXImage(images.get(i)));
+            imageView.setFitHeight(300);
+            imageView.setFitWidth(500);
+            imageView.pickOnBoundsProperty().setValue(true);
+            imageView.setPreserveRatio(true);
+            imageView.setOnMouseClicked(new EventHandler<MouseEvent>() {
                 @Override public void handle(MouseEvent e) {
                     try{
                         switchToPicture(e);
@@ -89,31 +103,53 @@ public class Search implements Initializable {
             Text title = setText("TITLE:", 550, 66, 153, "System Bold", 48);
             Text tag = setText("TAG:", 550, 97, 70, "System Bold", 24);
             Text desc = setText("DESCRIPTION:", 550, 126, 129, "System Bold", 18);
-            Text title_Field = setText(urls.get(i), 700, 66, "System Bold", 48);
-            Text tag_Field = setText("####", 700, 97, "System Bold", 24);
-            Text desc_Field = setText("####", 700, 126, "System Bold", 18);
-
-            p.getChildren().addAll(iV, title, tag, desc, title_Field, tag_Field, desc_Field);
-            h.getChildren().add(p);
-            vBox.getChildren().add(h);
+            Text title_Field = setText("SKAL BILDENE HA TITTEL?", 700, 66, "System Bold", 48);
+            String tagsString = TagService.getTagsAsString(images.get(i).getTags());
+            Text tag_Field = setText(tagsString, 700, 97, "System Bold", 24);
+            Text metadata_Field = setText(images.get(i).getMetadata().toString(), 700, 126, "System Bold", 18);
+
+            pane.getChildren().addAll(imageView, title, tag, desc, title_Field, tag_Field, metadata_Field);
+            hBox.getChildren().add(pane);
+            vBox.getChildren().add(hBox);
         }
     }
 
-    public Text setText(String text, int layoutX, int layoutY, double wrappingWidth, String fontName, double fontSize){
-        Text t = new Text(text);
-        t.setLayoutX(layoutX);
-        t.setLayoutY(layoutY);
-        t.setWrappingWidth(wrappingWidth);
-        t.setFont(Font.font(fontName, fontSize));
-        return t;
+    /**
+     * Method that takes in a string of text and returns a text object
+     * @param textIn
+     * @param layoutX
+     * @param layoutY
+     * @param wrappingWidth
+     * @param fontName
+     * @param fontSize
+     * @return
+     */
+
+    public Text setText(String textIn, int layoutX, int layoutY, double wrappingWidth, String fontName, double fontSize){
+        Text text = new Text(textIn);
+        text.setLayoutX(layoutX);
+        text.setLayoutY(layoutY);
+        text.setWrappingWidth(wrappingWidth);
+        text.setFont(Font.font(fontName, fontSize));
+        return text;
     }
 
-    public Text setText(String text, int layoutX, int layoutY, String fontName, double fontSize){
-        Text t = new Text(text);
-        t.setLayoutX(layoutX);
-        t.setLayoutY(layoutY);
-        t.setFont(Font.font(fontName, fontSize));
-        return t;
+    /**
+     * Alternative setText method without wrappingWidth
+     * @param textIn
+     * @param layoutX
+     * @param layoutY
+     * @param fontName
+     * @param fontSize
+     * @return
+     */
+
+    public Text setText(String textIn, int layoutX, int layoutY, String fontName, double fontSize){
+        Text text = new Text(textIn);
+        text.setLayoutX(layoutX);
+        text.setLayoutY(layoutY);
+        text.setFont(Font.font(fontName, fontSize));
+        return text;
     }
 
     /**
diff --git a/src/main/java/NTNU/IDATT1002/models/Album.java b/src/main/java/NTNU/IDATT1002/models/Album.java
index 5e4ef33ec67685057e1be160ad37e3863aeea0d6..c4bedb9edb4a3d221e9752b9015cd617e321abe5 100644
--- a/src/main/java/NTNU/IDATT1002/models/Album.java
+++ b/src/main/java/NTNU/IDATT1002/models/Album.java
@@ -22,7 +22,13 @@ import java.util.stream.Collectors;
 @Table(name = "album")
 @NamedQueries({
         @NamedQuery(name="Album.findAllByUsername",
-                query = "SELECT ia from Album ia WHERE ia.user.username = :username")
+                query = "SELECT ia from Album ia WHERE ia.user.username = :username"),
+        @NamedQuery(name="Album.findByTags",
+                query = "SELECT ia from Album ia "
+                        + "join ia.tags tg "
+                        + "where tg.name = :name"),
+        @NamedQuery(name="Image.findByTitle",
+                query = "SELECT ia from Album ia WHERE ia.title = :title")
 })
 public class Album {
 
diff --git a/src/main/java/NTNU/IDATT1002/models/Image.java b/src/main/java/NTNU/IDATT1002/models/Image.java
index c038a21f67ed5f0a3105b57a70b1351e82b1ba8d..bdad3e7d89b8a23da6bf4f82ca76f69149b3d3b2 100644
--- a/src/main/java/NTNU/IDATT1002/models/Image.java
+++ b/src/main/java/NTNU/IDATT1002/models/Image.java
@@ -17,7 +17,11 @@ import java.util.stream.Collectors;
 @Table(name = "image")
 @NamedQueries({
         @NamedQuery(name="Image.findAllByUsername",
-                query = "SELECT ia from Image ia WHERE ia.user.username = :username")
+                query = "SELECT ia from Image ia WHERE ia.user.username = :username"),
+        @NamedQuery(name="Image.findByTags",
+                query = "SELECT im from Image im "
+                        + "join im.tags tg "
+                        + "where tg.name = :name")
 })
 public class Image {
 
diff --git a/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java b/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java
index e432488be4c9b032935e159c77b4f611d8f2c202..857ab938b69df531317aa45c85e663e1abd10cad 100644
--- a/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java
+++ b/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java
@@ -1,9 +1,11 @@
 package NTNU.IDATT1002.repository;
 
+import NTNU.IDATT1002.App;
 import NTNU.IDATT1002.models.Image;
 
 
 import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
 import java.util.List;
 
 
@@ -23,6 +25,7 @@ public class ImageRepository extends AbstractRepository<Image, Long> {
      * Mapping to @NamedQuery 'find all albums by users username' defined in {@link  Image}
      */
     public static final String IMAGE_FIND_BY_USERNAME = "Image.findAllByUsername";
+    public static final String IMAGE_FIND_BY_TAG = "Image.findByTags";
 
     /**
      * Constructor to inject {@link EntityManager} dependency.
@@ -45,6 +48,13 @@ public class ImageRepository extends AbstractRepository<Image, Long> {
                 .setParameter("username", username)
                 .getResultList();
     }
+
+    public List<Image> findAllByTags(String tag){
+        return entityManager.createNamedQuery(IMAGE_FIND_BY_TAG, Image.class)
+                .setParameter("name",tag)
+                .getResultList();
+    }
+
 }
 
 
diff --git a/src/main/java/NTNU/IDATT1002/service/ImageService.java b/src/main/java/NTNU/IDATT1002/service/ImageService.java
index ca328babb21ab4ba13fff3e9c6da2bcb15f47cb8..54f2db5731cc7bbaa5a395800e7076c2203f107e 100644
--- a/src/main/java/NTNU/IDATT1002/service/ImageService.java
+++ b/src/main/java/NTNU/IDATT1002/service/ImageService.java
@@ -98,4 +98,30 @@ public class ImageService {
                 .collect(Collectors.toList());
     }
 
+    /**
+     * Searches images by tags and username, and merges the two list into one with all images
+     * uses removeDuplicates list to return a list with no duplicate images
+     * @param query
+     * @return a list with no duplicate images
+     */
+
+    public List<Image> searchResult(String query){
+        List<Image> allFound = new ArrayList<>();
+        List<Image> byTags = imageRepository.findAllByTags(query);
+        List<Image> byUsername = imageRepository.findAllByUsername(query);
+        allFound.addAll(byTags);
+        allFound.addAll(byUsername);
+        return removeDuplicates(allFound);
+    }
+    
+
+    /**
+     * takes a list and removes all duplicate elements
+     * @param images
+     * @return list without duplicates
+     */
+
+    public List<Image> removeDuplicates(List<Image> images){
+        return images.stream().distinct().collect(Collectors.toList());
+    }
 }