diff --git a/src/main/java/team5/smartTowns/rewards/Badge.java b/src/main/java/team5/smartTowns/rewards/Badge.java
index d1ecc486cda13e68c4f8b977c664a48c4d31276f..871cfbf3656d58d09e410fb7354465f528db5555 100644
--- a/src/main/java/team5/smartTowns/rewards/Badge.java
+++ b/src/main/java/team5/smartTowns/rewards/Badge.java
@@ -1,51 +1,27 @@
 /*AUTHOR: Gabriel Copat*/
 package team5.smartTowns.rewards;
 
-import lombok.Data;
+import lombok.Getter;
 
 import java.io.File;
-import java.util.Objects;
 
-@Data
-public class Badge {
+@Getter
+public class Badge extends Reward {
     /* Badges can be earned by completing certain goals.
      * They are displayed in the user profile page
      *
      * For example, one might earn a badge after visiting 20 locations */
+    static final String DEFAULT_IMAGE = "0.png";
 
-    int id;
-    String name;
-    String description;
-    String imgPath;
     int difficulty; //1-5
 
     public Badge(int id, String name, String description, int difficulty) {
-        this.id = id;
-        this.name = name;
-        this.description = description;
+        super(id, name, description);
         this.difficulty = difficulty;
-        imgPath = findImagePath();
-    }
-
-    private String findImagePath(){
-        /* Finds the image in the Path folder, if image is not found assigns default image */
-        String imgPath = "images/rewards/badges/" + id + ".jpg";
-        String notFoundPath = "/images/rewards/badges/0.png";
-
-        File imgFile = new File("src/main/resources/static/" + imgPath);
-        return imgFile.exists() ? imgPath : notFoundPath;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        Badge badge = (Badge) o;
-        return id == badge.id && Objects.equals(name, badge.name);
     }
 
     @Override
-    public int hashCode() {
-        return Objects.hash(id, name);
+    public String getImgFolder() {
+        return "badges";
     }
 }
diff --git a/src/main/java/team5/smartTowns/rewards/Reward.java b/src/main/java/team5/smartTowns/rewards/Reward.java
new file mode 100644
index 0000000000000000000000000000000000000000..215c1e42ed8db50dfba9edab0490ca4ee0a1ad4d
--- /dev/null
+++ b/src/main/java/team5/smartTowns/rewards/Reward.java
@@ -0,0 +1,39 @@
+package team5.smartTowns.rewards;
+
+import lombok.Getter;
+
+import java.io.File;
+
+@Getter
+public abstract class Reward {
+    /* Abstract class for all rewards */
+
+    int id;
+    String displayImg; //Path to the image file
+    String name;
+    String description;
+
+    public Reward(int id, String name, String description) {
+        //Default constructor
+        this.id = id;
+        this.name = name;
+        this.description = description;
+        displayImg = findImagePath();
+    }
+
+    public abstract String getImgFolder();
+    /*Returns folder in which images are located*/
+
+    public String getDefaultImg(){
+        /*Returns the name of the default image to be used in case no image is found*/
+        return "0.png";
+    };
+    public String findImagePath(){
+        /* Finds the image in the Path folder, if image is not found assigns default image */
+        String imgPath = "images/rewards/" + getImgFolder() + "/" + id + ".jpg";
+        String notFoundPath = "images/rewards/" + getImgFolder() + "/" + getDefaultImg();
+
+        File imgFile = new File("src/main/resources/static/" + imgPath);
+        return imgFile.exists() ? imgPath : notFoundPath;
+    }
+}
diff --git a/src/main/java/team5/smartTowns/rewards/RewardsController.java b/src/main/java/team5/smartTowns/rewards/RewardsController.java
deleted file mode 100644
index b8e81b56823effa22da3e433144933fe8e469b62..0000000000000000000000000000000000000000
--- a/src/main/java/team5/smartTowns/rewards/RewardsController.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package team5.smartTowns.rewards;
-
-import org.springframework.stereotype.Controller;
-
-@Controller
-public class RewardsController {
-}
diff --git a/src/main/java/team5/smartTowns/rewards/Sticker.java b/src/main/java/team5/smartTowns/rewards/Sticker.java
index fe067dbfeea38c6c6b13174a253d1af5846ffd2c..a80a02de4c2df53f75120828d5aeff371aa8dd7a 100644
--- a/src/main/java/team5/smartTowns/rewards/Sticker.java
+++ b/src/main/java/team5/smartTowns/rewards/Sticker.java
@@ -2,36 +2,27 @@
 package team5.smartTowns.rewards;
 
 import lombok.Data;
+import lombok.Getter;
 
 import java.io.File;
 import java.util.Objects;
 
-@Data
-public class Sticker {
-    /* Stickers are trade-able rewards, they vary in rarity and are earned at random */
+@Getter
+public class Sticker extends Reward{
+    /* Stickers are randomly earned rewards from a specific pack */
 
-    int id;
-    String name;
-    String description;
-    String imgPath;
     int rarity; //1-5
     boolean hasSticker;
+    String pack;
 
-    public Sticker(int id, String name, String description, int rarity) {
-        this.id = id;
-        this.name = name;
-        this.description = description;
+    public Sticker(int id, String name, String description, int rarity, String pack) {
+        super(id, name, description);
         this.rarity = rarity;
-        imgPath = findImagePath();
     }
 
-    private String findImagePath(){
-        /* Finds the image in the Path folder, if image is not found assigns default image */
-        String imgPath = "images/rewards/stickers/" + id + ".jpg";
-        String notFoundPath = "images/rewards/stickers/0.png";
-
-        File imgFile = new File("src/main/resources/static/" + imgPath);
-        return imgFile.exists() ? imgPath : notFoundPath;
+    @Override
+    public String getImgFolder() {
+        return "stickers";
     }
 
     public boolean hasSticker(){
@@ -43,19 +34,5 @@ public class Sticker {
     public String getVisibility(){
         return hasSticker? "" : "grayedOut";
     }
-
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        Sticker sticker = (Sticker) o;
-        return id == sticker.id && Objects.equals(name, sticker.name);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(id, name);
-    }
 }
 
diff --git a/src/main/java/team5/smartTowns/rewards/BadgesRepository.java b/src/main/java/team5/smartTowns/rewards/data/BadgesRepository.java
similarity index 62%
rename from src/main/java/team5/smartTowns/rewards/BadgesRepository.java
rename to src/main/java/team5/smartTowns/rewards/data/BadgesRepository.java
index f3dcccdefbba85e6a568c41865df00ce98d01faf..5b83f8ca9a9eb1544f6c52de79366100d0c05174 100644
--- a/src/main/java/team5/smartTowns/rewards/BadgesRepository.java
+++ b/src/main/java/team5/smartTowns/rewards/data/BadgesRepository.java
@@ -1,5 +1,7 @@
 //Holds locations data repository
-package team5.smartTowns.rewards;
+package Team5.SmartTowns.rewards.data;
+
+import Team5.SmartTowns.rewards.Badge;
 
 import java.util.List;
 
diff --git a/src/main/java/team5/smartTowns/rewards/BadgesRepositoryJDBC.java b/src/main/java/team5/smartTowns/rewards/data/BadgesRepositoryJDBC.java
similarity index 91%
rename from src/main/java/team5/smartTowns/rewards/BadgesRepositoryJDBC.java
rename to src/main/java/team5/smartTowns/rewards/data/BadgesRepositoryJDBC.java
index a0f62669c1826465b0f6f9d544734edd78bdaf8a..107e6b70ee08adb4634110906f7a9c6fa6a79c42 100644
--- a/src/main/java/team5/smartTowns/rewards/BadgesRepositoryJDBC.java
+++ b/src/main/java/team5/smartTowns/rewards/data/BadgesRepositoryJDBC.java
@@ -1,6 +1,7 @@
 //Implements the locations repository using JDBC
-package team5.smartTowns.rewards;
+package Team5.SmartTowns.rewards.data;
 
+import Team5.SmartTowns.rewards.Badge;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
 import org.springframework.stereotype.Repository;
diff --git a/src/main/java/team5/smartTowns/rewards/StickersRepository.java b/src/main/java/team5/smartTowns/rewards/data/StickersRepository.java
similarity index 62%
rename from src/main/java/team5/smartTowns/rewards/StickersRepository.java
rename to src/main/java/team5/smartTowns/rewards/data/StickersRepository.java
index 41e12aefbed04545fc6860db291f30421712f410..5aeda42b6685ddc474c29093966eb29b8f3fec4a 100644
--- a/src/main/java/team5/smartTowns/rewards/StickersRepository.java
+++ b/src/main/java/team5/smartTowns/rewards/data/StickersRepository.java
@@ -1,5 +1,7 @@
 //Holds locations data repository
-package team5.smartTowns.rewards;
+package Team5.SmartTowns.rewards.data;
+
+import Team5.SmartTowns.rewards.Sticker;
 
 import java.util.List;
 
diff --git a/src/main/java/team5/smartTowns/rewards/StickersRepositoryJDBC.java b/src/main/java/team5/smartTowns/rewards/data/StickersRepositoryJDBC.java
similarity index 85%
rename from src/main/java/team5/smartTowns/rewards/StickersRepositoryJDBC.java
rename to src/main/java/team5/smartTowns/rewards/data/StickersRepositoryJDBC.java
index 8789c6db38840cefc1a9029154428ecd2858b9af..9e014ec20750d35ae8dd158270b32018e22412fe 100644
--- a/src/main/java/team5/smartTowns/rewards/StickersRepositoryJDBC.java
+++ b/src/main/java/team5/smartTowns/rewards/data/StickersRepositoryJDBC.java
@@ -1,6 +1,7 @@
 //Implements the locations repository using JDBC
-package team5.smartTowns.rewards;
+package Team5.SmartTowns.rewards.data;
 
+import Team5.SmartTowns.rewards.Sticker;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
 import org.springframework.stereotype.Repository;
@@ -21,7 +22,8 @@ public class StickersRepositoryJDBC implements StickersRepository {
                 rs.getInt("stickerID"),
                 rs.getString("name"),
                 rs.getString("description"),
-                rs.getInt("rarity")
+                rs.getInt("rarity"),
+                rs.getString("pack")
         );
     }