diff --git a/src/main/java/Team5/SmartTowns/Data/DatabaseController.java b/src/main/java/Team5/SmartTowns/Data/DatabaseController.java
index b91d7d880368f6cb405e3ed71c38242f612bfae2..646df7b5705c710acbe588209fdf00e6c9c53420 100644
--- a/src/main/java/Team5/SmartTowns/Data/DatabaseController.java
+++ b/src/main/java/Team5/SmartTowns/Data/DatabaseController.java
@@ -1,5 +1,7 @@
 package Team5.SmartTowns.Data;
 
+import Team5.SmartTowns.users.User;
+import Team5.SmartTowns.users.UserRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -9,20 +11,13 @@ import java.util.*;
 @Controller
 public class DatabaseController {
 
-    @Autowired
-    private UserRepository userRepository;
+
     @Autowired
     private locationRepository locationRepository;
     @Autowired
     private trailsRepository trailsRepository;
 
-    @GetMapping("/userList")
-    public ModelAndView userList() {
-        ModelAndView mav = new ModelAndView("towns/userData");
-        List<user> users = userRepository.getAllUsers();
-        mav.addObject("users", users);
-        return mav;
-    }
+
     @GetMapping("/trailList")
     public ModelAndView trailList() {
         ModelAndView mav1 = new ModelAndView("towns/trailsData");
diff --git a/src/main/java/Team5/SmartTowns/Data/user.java b/src/main/java/Team5/SmartTowns/Data/user.java
deleted file mode 100644
index a40350ebc13621da4fb8a89f4e58d2ccb5be2568..0000000000000000000000000000000000000000
--- a/src/main/java/Team5/SmartTowns/Data/user.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//Holds variable data for the users table
-package Team5.SmartTowns.Data;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-@Data
-@AllArgsConstructor
-public class user {
-    private int userId;
-    private String name;
-}
diff --git a/src/main/java/Team5/SmartTowns/rewards/BadgesRepository.java b/src/main/java/Team5/SmartTowns/rewards/BadgesRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..56b1019cbe016a7c687b5ac83973679e8f498eef
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/rewards/BadgesRepository.java
@@ -0,0 +1,9 @@
+//Holds locations data repository
+package Team5.SmartTowns.rewards;
+
+import java.util.List;
+
+public interface BadgesRepository {
+    List<Badge> getAllBadges();
+}
+
diff --git a/src/main/java/Team5/SmartTowns/rewards/BadgesRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/rewards/BadgesRepositoryJDBC.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c22061e894a633bf9c047f69f575daf9366b493
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/rewards/BadgesRepositoryJDBC.java
@@ -0,0 +1,33 @@
+//Implements the locations repository using JDBC
+package Team5.SmartTowns.rewards;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public class BadgesRepositoryJDBC implements BadgesRepository {
+    private JdbcTemplate jdbc;
+    private RowMapper<Badge> badgeMapper;
+
+    public BadgesRepositoryJDBC(JdbcTemplate aJdbc) {
+        this.jdbc = aJdbc;
+        setBadgeMapper();
+    }
+    private void setBadgeMapper(){
+        badgeMapper = (rs, i) -> new Badge(
+                rs.getInt("badgeID"),
+                rs.getString("name"),
+                rs.getString("description"),
+                rs.getInt("difficulty")
+        );
+    }
+
+    @Override
+    public List<Badge> getAllBadges(){
+        String sql= "SELECT * FROM badges";
+        return jdbc.query(sql, badgeMapper);
+    }
+}
diff --git a/src/main/java/Team5/SmartTowns/users/UserController.java b/src/main/java/Team5/SmartTowns/users/UserController.java
index 0df6457070de7a7db2ff33576c569e20120be554..d2cf3b318522ae65fb456ca4a03dd3bbe10376ed 100644
--- a/src/main/java/Team5/SmartTowns/users/UserController.java
+++ b/src/main/java/Team5/SmartTowns/users/UserController.java
@@ -1,7 +1,10 @@
 package Team5.SmartTowns.users;
 
+
 import Team5.SmartTowns.rewards.Badge;
+import Team5.SmartTowns.rewards.BadgesRepository;
 import Team5.SmartTowns.rewards.Sticker;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -12,23 +15,13 @@ import java.util.List;
 @Controller
 public class UserController {
 
-    /* TEMPORARY USER LIST --- TODO REPLACE IT WITH DATABASE LIST*/
-    static List<User> users = List.of(
-            new User(1, "johndoe@gmail.com", "Claire Redfield"),
-            new User(2, "johndoe@gmail.com", "Albert Wesker"),
-            new User(3, "johndoe@gmail.com", "Leon Kennedy"),
-            new User(4, "johndoe@gmail.com", "Jill Valentine")
-    );
-    static List<Badge> badges = List.of(
-            new Badge(1, "Badge1", "Bage One is This", 1),
-            new Badge(2, "Badge1", "Bage One is This", 4),
-            new Badge(3, "Badge1", "Bage One is This", 4),
-            new Badge(4, "Badge1", "Bage One is This", 5),
-            new Badge(5, "Badge1", "Bage One is This", 5),
-            new Badge(46, "Badge1", "Bage One is This", 5),
-            new Badge(7, "Badge1", "Bage One is This", 2)
-    );
+    @Autowired
+    private UserRepository userRepository;
+    @Autowired
+    private BadgesRepository badgesRepository;
+
 
+    /*TODO REPLACE IT WITH DATABASE LIST*/
     static List<Sticker> stickers = List.of(
             new Sticker(1, "Sticker", "Sticker", 1),
             new Sticker(2, "Sticker", "Sticker", 4),
@@ -39,8 +32,18 @@ public class UserController {
             new Sticker(7, "Sticker", "Sticker One is This", 2)
     );
 
+    @GetMapping("/userList")
+    public ModelAndView userList() {
+        ModelAndView mav = new ModelAndView("towns/userData");
+        List<User> users = userRepository.getAllUsers();
+        mav.addObject("users", users);
+        return mav;
+    }
+
     @GetMapping("/user/{id}")
     public ModelAndView getUserPage(@PathVariable int id) {
+        List<Badge> badges = badgesRepository.getAllBadges();
+        List<User> users = userRepository.getAllUsers();
         ModelAndView mav = new ModelAndView("rewards/userProfile");
         users.stream()
                 .filter(user -> user.getId() == id)
@@ -50,8 +53,4 @@ public class UserController {
         mav.addObject("stickers", stickers);
         return mav;
     }
-//    @GetMapping("/userProfile")
-//    public ModelAndView getUserPage(ModelAndView mav) {
-//        return mav;
-//    }
 }
diff --git a/src/main/java/Team5/SmartTowns/Data/UserRepository.java b/src/main/java/Team5/SmartTowns/users/UserRepository.java
similarity index 59%
rename from src/main/java/Team5/SmartTowns/Data/UserRepository.java
rename to src/main/java/Team5/SmartTowns/users/UserRepository.java
index 172591d6500927a341d6534dca6c34728965db06..c994b3dc6a418757f57501a958cb571b542df5cf 100644
--- a/src/main/java/Team5/SmartTowns/Data/UserRepository.java
+++ b/src/main/java/Team5/SmartTowns/users/UserRepository.java
@@ -1,8 +1,8 @@
 //Holds users data repository
-package Team5.SmartTowns.Data;
+package Team5.SmartTowns.users;
 
 import java.util.List;
 
 public interface UserRepository {
-    List<user> getAllUsers();
+    List<User> getAllUsers();
 }
diff --git a/src/main/java/Team5/SmartTowns/Data/UserRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/users/UserRepositoryJDBC.java
similarity index 71%
rename from src/main/java/Team5/SmartTowns/Data/UserRepositoryJDBC.java
rename to src/main/java/Team5/SmartTowns/users/UserRepositoryJDBC.java
index 63e0bad0a8a3abf5f09c435a749066f51f7100fc..ee3a72fb30c5b58291d7caf1ec5242d0df2833b6 100644
--- a/src/main/java/Team5/SmartTowns/Data/UserRepositoryJDBC.java
+++ b/src/main/java/Team5/SmartTowns/users/UserRepositoryJDBC.java
@@ -1,5 +1,5 @@
 //Implements the users repository using JDBC
-package Team5.SmartTowns.Data;
+package Team5.SmartTowns.users;
 
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
@@ -11,17 +11,18 @@ import java.util.List;
 public class UserRepositoryJDBC implements UserRepository{
 
     private JdbcTemplate jdbc;
-    private RowMapper<user> userMapper;
+    private RowMapper<User> userMapper;
 
     public UserRepositoryJDBC(JdbcTemplate aJdbc){
         this.jdbc = aJdbc;
-        setuserMapper();
+        setUserMapper();
     }
 
 
-    private void setuserMapper(){
-        userMapper = (rs, i) -> new user(
+    private void setUserMapper(){
+        userMapper = (rs, i) -> new User(
                 rs.getInt("userID"),
+                rs.getString("email"),
                 rs.getString("name")
         );
     }
@@ -29,7 +30,7 @@ public class UserRepositoryJDBC implements UserRepository{
 
 
     @Override
-    public List<user> getAllUsers(){
+    public List<User> getAllUsers(){
         String sql= "SELECT * FROM users";
         return jdbc.query(sql, userMapper);
     }
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index f7656769c7d1b2afd5e78e3a93c3cd3ed44abe3b..d06aaf78f54db096f2f3da78687cbd0676652421 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -1,6 +1,6 @@
 delete from users;
-insert into users (userID, Name) value ('1', 'Hannah');
-insert into users (userID, Name) value ('2', 'Nigel');
+insert into users (userID, email, name) value ('1', 'hannah@gmail.com', 'Hannah');
+insert into users (userID, email, name) value ('2', 'nigel@gmail.com', 'Nigel');
 
 delete from trails;
 insert into trails (trailID, Name) value ('1', 'Caerphilly Coffee Trail');
@@ -8,4 +8,11 @@ insert into trails (trailID, Name) value ('2', 'Penarth Dragon Trail');
 
 delete from locations;
 insert into locations (locationID, Name) value ('1', 'Caerphilly');
-insert into locations (locationID, Name) value ('2', 'Penarth');
\ No newline at end of file
+insert into locations (locationID, Name) value ('2', 'Penarth');
+
+delete from badges;
+insert into badges (badgeID, name, description, difficulty) value ('1', 'TownConnoisseur', 'You know the town very well!', '2');
+insert into badges (badgeID, name, description, difficulty) value ('2', 'TownRegular', 'You visited the town 3 days in a row!', '1');
+insert into badges (badgeID, name, description, difficulty) value ('3', 'TownMaster', 'You visited the town 7 days in a row!', '1');
+insert into badges (badgeID, name, description, difficulty) value ('4', 'TownRegular', 'You visited the town 3 days in a row!', '1');
+insert into badges (badgeID, name, description, difficulty) value ('5', 'TownRegular', 'You visited the town 3 days in a row!', '1');
\ No newline at end of file
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index 8d9e102d1f6b02b1f864e396f591a4a61aad8b41..4eadc115d284f559d296a7743cf852606a507418 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -14,5 +14,14 @@ drop table if exists users;
 create table if not exists users
 (
     userID bigint auto_increment primary key,
+    email varchar(128),
     name varchar(128)
+) engine=InnoDB;
+drop table if exists badges;
+create table if not exists badges
+(
+    badgeID bigint auto_increment primary key,
+    name varchar(128),
+    description varchar(128),
+    difficulty bigint
 ) engine=InnoDB;
\ No newline at end of file