diff --git a/groupChat/GroupChatResourceTest.txt b/groupChat/GroupChatResourceTest.txt
deleted file mode 100644
index 952a99337923da0effffded2f498dae7a0217516..0000000000000000000000000000000000000000
--- a/groupChat/GroupChatResourceTest.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-import data.GroupChat;
-import data.Message;
-import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.TestProperties;
-import org.junit.Test;
-import resources.GroupChatResource;
-
-import javax.ws.rs.client.Entity;
-import javax.ws.rs.core.Application;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class GroupChatResourceTest extends JerseyTest {
-    private final GroupChatResource groupChatResource = new GroupChatResource();
-    private int groupChatId = 1;
-
-    @Override
-    public Application configure() {
-        enable(TestProperties.LOG_TRAFFIC);
-        enable(TestProperties.DUMP_ENTITY);
-        return new ResourceConfig(GroupChatResource.class);
-    }
-
-    @Test
-    public void testGetGroupChat() {
-        Response output = target("groupchat/" + groupChatId).request().get();
-        assertEquals("Should return status 200", 200, output.getStatus());
-        assertEquals("application/json", output.getHeaderString("Content-type"));
-        assertNotNull(output.getEntity());
-    }
-
-    @Test
-    public void testGetGroupChatByUserId() {
-        int userId = 1;
-        Response output = target("groupchat/user/" + userId).request().get();
-        assertEquals("Should return status 200", 200, output.getStatus());
-        assertEquals("application/json", output.getHeaderString("Content-type"));
-        assertNotNull(output.getEntity());
-    }
-
-    @Test
-    public void testGetMessages() {
-        Response output = target("groupchat/" + groupChatId + "/message").request().get();
-        assertEquals("Should return status 200", 200, output.getStatus());
-        assertEquals("application/json", output.getHeaderString("Content-type"));
-        assertNotNull(output.getEntity());
-    }
-
-    @Test
-    public void testPostGroupChat() {
-        GroupChat groupChat = new GroupChat();
-        groupChat.setGroupChatName("testPostGroupChat");
-
-        Response output = target("/groupchat").request().post(Entity.entity(groupChat, MediaType.APPLICATION_JSON));
-        assertEquals("Should return status 200",200,output.getStatus());
-        assertEquals("application/json",output.getHeaderString("Content-type"));
-        assertEquals("testPostGroupChat", groupChatResource.postGroupChat(groupChat).getGroupChatName());
-    }
-
-    @Test
-    public void testPostMessage() {
-        Message groupChatMessage = new Message();
-        groupChatMessage.setUserId1(1);
-        groupChatMessage.setMessageContent("testPostMessage");
-        groupChatMessage.setGroupChatId(groupChatId);
-
-        Response output = target("groupchat/" + groupChatId + "/message").request().post(Entity.entity(groupChatMessage, MediaType.APPLICATION_JSON));
-        assertEquals("Should return status 200",200, output.getStatus());
-        assertEquals("application/json", output.getHeaderString("Content-type"));
-        assertEquals("testPostMessage", groupChatResource.postMessage(groupChatId, groupChatMessage).getMessageContent());
-    }
-}
diff --git a/src/main/java/dao/GroupChatDAO.java b/src/main/java/dao/GroupChatDAO.java
index f2c5f339109a312ab30e990f0d6e3ddb4ae71346..4269d354e1345d2047a2ca8132513dc506c34848 100644
--- a/src/main/java/dao/GroupChatDAO.java
+++ b/src/main/java/dao/GroupChatDAO.java
@@ -1,13 +1,227 @@
 package dao;
 
+import data.GroupChat;
+import data.Message;
 import data.User;
 
+import java.sql.*;
 import java.util.ArrayList;
+import java.util.List;
+
+import static dao.Database.close;
 
 public class GroupChatDAO {
 
+    private GroupChat getGroupChatFromResultSet(ResultSet resultSet){
+        GroupChat groupChat = null;
+        try{
+            if(resultSet.next()){
+                groupChat = new GroupChat();
+                groupChat.setGroupChatId(resultSet.getInt("groupChatId"));
+                groupChat.setGroupChatName(resultSet.getString("groupChatName"));
+            }
+        }catch (SQLException e){
+            e.printStackTrace();
+        } finally {
+            close(null, null, resultSet);
+        }
+        return groupChat;
+    }
+
+    private ArrayList<Message> getMesagesFromResultSet(ResultSet resultSet) {
+        ArrayList<Message> messages = new ArrayList<>();
+        try{
+            while (resultSet.next()) {
+                Message message = new Message();
+                message.setGroupChatId(resultSet.getInt("groupChatId"));
+                message.setMessageContent(resultSet.getString("messageContent"));
+                message.setTimestamp(resultSet.getTimestamp("timestamp"));
+                message.setUserId1(resultSet.getInt("userId1"));
+                message.setMessageId(resultSet.getInt("messageId"));
+                messages.add(message);
+            }
+        }catch (SQLException e){
+            e.printStackTrace();
+        } finally {
+            close(null, null, resultSet);
+        }
+        return messages;
+    }
+
+    private ArrayList<User> getUsersFromResultSet(ResultSet resultSet) {
+        ArrayList<User> users = new ArrayList<>();
+        UserDAO userDao = new UserDAO();
+        try{
+            while (resultSet.next()) {
+                User user = userDao.getUserById(resultSet.getInt("userId"));
+                users.add(user);
+            }
+        }catch (SQLException e){
+            e.printStackTrace();
+        } finally {
+            close(null, null, resultSet);
+        }
+        return users;
+    }
+
+    private ArrayList<GroupChat> getGroupChatsFromUserIdResultSet(ResultSet resultSet) {
+        ArrayList<GroupChat> groupChats = new ArrayList<>();
+
+        try{
+            while (resultSet.next()) {
+                int groupChatId = resultSet.getInt("groupChatId");
+                GroupChat groupChat = getGroupChat(groupChatId);
+                groupChats.add(groupChat);
+            }
+        }catch (SQLException e){
+            e.printStackTrace();
+        } finally {
+            close(null, null, resultSet);
+        }
+        return groupChats;
+    }
+
     //Made so that the rest of the application runs without group chats implemented.
     public ArrayList<User> getGroupChatUsers(int groupChatId){
-        return null;
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        ArrayList<User> users = null;
+        try {
+            connection = Database.instance().getConnection();
+            preparedStatement = connection.prepareStatement("SELECT * FROM user_groupChat WHERE groupChatId=?");
+            preparedStatement.setInt(1, groupChatId);
+            resultSet = preparedStatement.executeQuery();
+            users = getUsersFromResultSet(resultSet);
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }finally {
+            close(connection, preparedStatement, resultSet);
+        }
+        return users;
+
+    }
+
+
+
+    public void addGroupChat(GroupChat groupChat) {
+
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+
+        try {
+            connection = Database.instance().getConnection();
+            preparedStatement = connection.prepareStatement(
+                    "INSERT INTO groupChat (groupChatName) VALUES (?)", Statement.RETURN_GENERATED_KEYS);
+
+            preparedStatement.setString(1, groupChat.getGroupChatName());
+            int result = preparedStatement.executeUpdate();
+
+            if (result == 1) {
+                resultSet = preparedStatement.getGeneratedKeys();
+                if (resultSet.next()) groupChat.setGroupChatId(resultSet.getInt(1));
+            }
+        }catch (SQLIntegrityConstraintViolationException e){
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }finally{
+            close(connection, preparedStatement, resultSet);
+        }
+    }
+
+
+    public GroupChat getGroupChat(int groupChatId) {
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        GroupChat groupChat = null;
+        try {
+            connection = Database.instance().getConnection();
+            preparedStatement = connection.prepareStatement("SELECT * FROM groupChat WHERE groupChatId=?");
+            preparedStatement.setInt(1, groupChatId);
+            resultSet = preparedStatement.executeQuery();
+            groupChat = getGroupChatFromResultSet(resultSet);
+
+            groupChat.setMessageList(getGroupChatMessages(groupChatId));
+            groupChat.setUserList(getGroupChatUsers(groupChatId));
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }finally {
+            close(connection, preparedStatement, resultSet);
+        }
+        return groupChat;
+
+    }
+
+
+    public ArrayList<GroupChat> getGroupChatByUserId(int userId) {
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        ArrayList<GroupChat> groupChats = null;
+        try {
+            connection = Database.instance().getConnection();
+            preparedStatement = connection.prepareStatement("SELECT * FROM user_groupChat WHERE userId=?");
+            preparedStatement.setInt(1, userId);
+            resultSet = preparedStatement.executeQuery();
+            groupChats = getGroupChatsFromUserIdResultSet(resultSet);
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }finally {
+            close(connection, preparedStatement, resultSet);
+        }
+        return groupChats;
+    }
+
+    public ArrayList<Message> getGroupChatMessages(int groupChatId) {
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        ArrayList<Message> messages = null;
+        try {
+            connection = Database.instance().getConnection();
+            preparedStatement = connection.prepareStatement("SELECT * FROM message WHERE groupChatId=?");
+            preparedStatement.setInt(1, groupChatId);
+            resultSet = preparedStatement.executeQuery();
+            messages = getMesagesFromResultSet(resultSet);
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }finally {
+            close(connection, preparedStatement, resultSet);
+        }
+        return messages;
+    }
+
+
+
+    public void addMessage(Message message) {
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+
+        try {
+            connection = Database.instance().getConnection();
+            preparedStatement = connection.prepareStatement(
+                    "INSERT INTO message (userId1, groupChatId, timestamp, messageContent) VALUES (?, ?, NOW(), ?)", Statement.RETURN_GENERATED_KEYS);
+
+            preparedStatement.setInt(1, message.getUserId1());
+            preparedStatement.setInt(2, message.getGroupChatId());
+            preparedStatement.setString(3, message.getMessageContent());
+
+            int result = preparedStatement.executeUpdate();
+
+            if (result == 1) {
+                resultSet = preparedStatement.getGeneratedKeys();
+                if (resultSet.next()) message.setMessageId(resultSet.getInt(1));
+            }
+        }catch (SQLIntegrityConstraintViolationException e){
+            message = new Message();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }finally{
+            close(connection, preparedStatement, resultSet);
+        }
     }
 }
diff --git a/src/main/java/dao/UserDAO.java b/src/main/java/dao/UserDAO.java
index 2d9134acb22b76128ebbbff5b814ea5479183ff2..88ec688539f2f3bbf6b0b25adce54196ba22dcdd 100644
--- a/src/main/java/dao/UserDAO.java
+++ b/src/main/java/dao/UserDAO.java
@@ -76,7 +76,7 @@ public class UserDAO {
      * @param userId userId as int
      * @return requested user object if found, null if not found
      */
-    private User getUserById(int userId) {
+    protected User getUserById(int userId) {
         Connection connection = null;
         PreparedStatement preparedStatement = null;
         ResultSet resultSet = null;
diff --git a/src/main/java/data/GroupChat.java b/src/main/java/data/GroupChat.java
index 085d9b1526f36ee477dc6d3beb8bc9916d209e2f..97cf84f6713332e8ad517dbd3b9d041486746474 100644
--- a/src/main/java/data/GroupChat.java
+++ b/src/main/java/data/GroupChat.java
@@ -1,6 +1,55 @@
 package data;
 
+import java.util.ArrayList;
+
 /**
  * Class for the GroupChat object as saved in database
  */
-public class GroupChat {}
+public class GroupChat {
+    private int groupChatId;
+    private String groupChatName;
+    private ArrayList<Message> messageList = new ArrayList<>();
+    private ArrayList<User> userList = new ArrayList<>();
+
+    public GroupChat() {
+
+    }
+
+    public GroupChat(int groupChatId, String groupChatName) {
+        this.groupChatId = groupChatId;
+        this.groupChatName = groupChatName;
+    }
+
+    public int getGroupChatId() {
+        return groupChatId;
+    }
+
+    public void setGroupChatId(int groupChatId) {
+        this.groupChatId = groupChatId;
+    }
+
+    public String getGroupChatName() {
+        return groupChatName;
+    }
+
+    public void setGroupChatName(String groupChatName) {
+        this.groupChatName = groupChatName;
+    }
+
+    public ArrayList<Message> getMessageList() {
+        return messageList;
+    }
+
+    public void setMessageList(ArrayList<Message> messageList) {
+        this.messageList = messageList;
+    }
+
+    public ArrayList<User> getUserList() {
+        return userList;
+    }
+
+    public void setUserList(ArrayList<User> userList) {
+        this.userList = userList;
+    }
+
+}
diff --git a/groupChat/GroupChatDAOTest.txt b/src/test/java/GroupChatDAOTest.java
similarity index 97%
rename from groupChat/GroupChatDAOTest.txt
rename to src/test/java/GroupChatDAOTest.java
index d18bc05392566541e4265d92d7dd0f5c08b248d9..acf10ee5e5324beddbfec5756df2a8a1f2b04388 100644
--- a/groupChat/GroupChatDAOTest.txt
+++ b/src/test/java/GroupChatDAOTest.java
@@ -17,6 +17,7 @@ import java.sql.Statement;
 import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
@@ -207,7 +208,7 @@ public class GroupChatDAOTest extends JerseyTest {
         message.setGroupChatId(groupChatId);
 
         ArrayList<Message> beforeAddMessage = groupChatDAO.getGroupChatMessages(groupChatId);
-        groupChatDAO.addMessage(groupChatId, message);
+        groupChatDAO.addMessage(message);
         ArrayList<Message> afterAddMessage = groupChatDAO.getGroupChatMessages(groupChatId);
 
         assertNotEquals(beforeAddMessage.size(), afterAddMessage.size());
@@ -216,14 +217,13 @@ public class GroupChatDAOTest extends JerseyTest {
     @Test
     public void testGetGroupChatUsers() {
         final int groupChatId = 1;
-        ArrayList<String> expected = new ArrayList<>();
+        List<String> expected = new ArrayList<>();
         expected.add("username");
 
         final ArrayList<User> result = groupChatDAO.getGroupChatUsers(groupChatId);
-        ArrayList<String> resultUsernames = new ArrayList<>();
-
-        for (User user : result) resultUsernames.add(user.getUsername());
+        List<String> resultUsernames = result.stream().map(User::getUsername).collect(Collectors.toList());
 
         assertEquals(expected, resultUsernames);
     }
 }
+
diff --git a/src/test/java/GroupChatResourceTest.java b/src/test/java/GroupChatResourceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..da8bb3bff69a436bd06b21d55f121fef7a434682
--- /dev/null
+++ b/src/test/java/GroupChatResourceTest.java
@@ -0,0 +1,2 @@
+public class GroupChatResourceTest {
+}