diff --git a/build.gradle b/build.gradle
index 73893fa83c57fc92870ba2b25919711f7071e446..6e5533219adc12e9249818bc920f3b5c75869ad3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -27,6 +27,7 @@ dependencies {
     implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
     implementation 'org.springframework.boot:spring-boot-starter-validation'
     testImplementation 'org.springframework.boot:spring-boot-starter-test'
+    implementation 'org.json:org.json:chargebee-1.0'
     testImplementation 'org.jetbrains.kotlin:kotlin-test-junit5'
     developmentOnly 'org.springframework.boot:spring-boot-devtools'
     runtimeOnly 'com.h2database:h2'
diff --git a/src/main/kotlin/de/thk/gm/websocketsdemo/configs/WebSocketsConfig.kt b/src/main/kotlin/de/thk/gm/websocketsdemo/configs/WebSocketsConfig.kt
index 7ef2d66f6660a7a1ce676ee2599266fbee4949d8..b12c62efa4256b025554df16425ea127d6100509 100644
--- a/src/main/kotlin/de/thk/gm/websocketsdemo/configs/WebSocketsConfig.kt
+++ b/src/main/kotlin/de/thk/gm/websocketsdemo/configs/WebSocketsConfig.kt
@@ -3,6 +3,8 @@ package de.thk.gm.websocketsdemo.configs
 import de.thk.gm.websocketsdemo.handlers.ChatRoomsHandler
 import de.thk.gm.websocketsdemo.handlers.EchoHandler
 import de.thk.gm.websocketsdemo.handlers.SimpleChatHandler
+import de.thk.gm.websocketsdemo.services.ChatMessageService
+import de.thk.gm.websocketsdemo.services.ChatRoomsService
 import org.springframework.context.annotation.Configuration
 import org.springframework.web.socket.WebSocketHandler
 import org.springframework.web.socket.config.annotation.EnableWebSocket
@@ -11,10 +13,10 @@ import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry
 
 @Configuration
 @EnableWebSocket
-class WebSocketsConfig(): WebSocketConfigurer {
+class WebSocketsConfig(private val chatMessageService: ChatMessageService, private val chatRoomsService: ChatRoomsService): WebSocketConfigurer {
     override fun registerWebSocketHandlers(registry: WebSocketHandlerRegistry) {
         registry.addHandler(EchoHandler(), "/echo").setAllowedOrigins("*")
         registry.addHandler(SimpleChatHandler(), "/chat")
-        registry.addHandler(ChatRoomsHandler(),"/rooms")
+        registry.addHandler(ChatRoomsHandler(chatRoomsService, chatMessageService),"/rooms")
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/de/thk/gm/websocketsdemo/controllers/ChatRoomsController.kt b/src/main/kotlin/de/thk/gm/websocketsdemo/controllers/ChatRoomsController.kt
index 36fdf8c044b4095146c63d2c081dc05807b63c89..da08a7ae30f5a2d1f72647a9fdcb291362fcc2bd 100644
--- a/src/main/kotlin/de/thk/gm/websocketsdemo/controllers/ChatRoomsController.kt
+++ b/src/main/kotlin/de/thk/gm/websocketsdemo/controllers/ChatRoomsController.kt
@@ -2,6 +2,7 @@ package de.thk.gm.websocketsdemo.controllers
 
 import de.thk.gm.websocketsdemo.dtos.ChatRoomDto
 import de.thk.gm.websocketsdemo.models.ChatRoom
+import de.thk.gm.websocketsdemo.services.ChatMessageService
 import de.thk.gm.websocketsdemo.services.ChatRoomsService
 import org.springframework.stereotype.Controller
 import org.springframework.ui.Model
@@ -10,7 +11,7 @@ import java.util.*
 
 @Controller
 @RequestMapping("/chatrooms")
-class ChatRoomsController (private val chatRoomsService: ChatRoomsService) {
+class ChatRoomsController (private val chatRoomsService: ChatRoomsService, private val chatMessageService: ChatMessageService) {
 
     @GetMapping
     fun getChatRooms(model: Model): String {
@@ -28,8 +29,11 @@ class ChatRoomsController (private val chatRoomsService: ChatRoomsService) {
 
     @GetMapping("/{id}")
     fun getChatRoom(@PathVariable("id") id: UUID, model: Model): String {
+
         var chatRoom = chatRoomsService.getChatRoomById(id)
+        var chatMessages = chatMessageService.getChatMessagesByChatRoomId(id)
         model.addAttribute("chatRoom", chatRoom)
+        model.addAttribute("chatMessages", chatMessages)
         return "chatRooms/showChatRoom"
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/de/thk/gm/websocketsdemo/handlers/ChatRoomsHandler.kt b/src/main/kotlin/de/thk/gm/websocketsdemo/handlers/ChatRoomsHandler.kt
index 9d80ede0d367e539e7d17a78dd80fe5ca9b97ddf..f6f25e55d41facbd072ffe804a51e60675e10a0f 100644
--- a/src/main/kotlin/de/thk/gm/websocketsdemo/handlers/ChatRoomsHandler.kt
+++ b/src/main/kotlin/de/thk/gm/websocketsdemo/handlers/ChatRoomsHandler.kt
@@ -1,13 +1,20 @@
 package de.thk.gm.websocketsdemo.handlers
 
+import de.thk.gm.websocketsdemo.models.ChatMessage
+import de.thk.gm.websocketsdemo.services.ChatMessageService
+import de.thk.gm.websocketsdemo.services.ChatRoomsService
+import org.json.JSONObject
 import org.springframework.web.socket.CloseStatus
 import org.springframework.web.socket.TextMessage
 import org.springframework.web.socket.WebSocketSession
 import org.springframework.web.socket.handler.TextWebSocketHandler
 import org.springframework.web.util.UriComponents
 import org.springframework.web.util.UriComponentsBuilder
+import java.util.*
+import kotlin.collections.ArrayList
+import kotlin.collections.HashMap
 
-class ChatRoomsHandler : TextWebSocketHandler() {
+class ChatRoomsHandler (private val chatRoomsService: ChatRoomsService, private val chatMessageService: ChatMessageService) : TextWebSocketHandler() {
     private val hashMapOfSessions : HashMap<String, ArrayList<WebSocketSession>> = HashMap()
     override fun afterConnectionEstablished(session: WebSocketSession) {
         var uri : UriComponents = UriComponentsBuilder.fromUri(session.uri!!).build()
@@ -24,8 +31,17 @@ class ChatRoomsHandler : TextWebSocketHandler() {
 
     override fun handleTextMessage(session: WebSocketSession, message: TextMessage) {
         var uri : UriComponents = UriComponentsBuilder.fromUri(session.uri!!).build()
-        var id = uri.queryParams.getFirst("id")
+        var id  = uri.queryParams.getFirst("id")
         var sessions = hashMapOfSessions[id]
+        val chatMessageJSONObject = JSONObject(message.payload)
+
+        val chatRoom = chatRoomsService.getChatRoomById(UUID.fromString(id));
+        val chatMessage = ChatMessage()
+        chatMessage.chatRoom = chatRoom
+        chatMessage.text = chatMessageJSONObject.getString("text")
+        chatMessage.username = chatMessageJSONObject.getString("username")
+        chatMessageService.save(chatMessage)
+
         if(sessions != null) {
             for (chatSession in sessions) {
                 chatSession.sendMessage(message)
diff --git a/src/main/kotlin/de/thk/gm/websocketsdemo/models/ChatMessage.kt b/src/main/kotlin/de/thk/gm/websocketsdemo/models/ChatMessage.kt
new file mode 100644
index 0000000000000000000000000000000000000000..1d55057075eabc0db25579e7c8cc3b8392f38d68
--- /dev/null
+++ b/src/main/kotlin/de/thk/gm/websocketsdemo/models/ChatMessage.kt
@@ -0,0 +1,19 @@
+package de.thk.gm.websocketsdemo.models
+
+import jakarta.persistence.Entity
+import jakarta.persistence.Id
+import jakarta.persistence.ManyToOne
+import java.util.*
+
+@Entity
+class ChatMessage {
+    @Id
+    val id: UUID = UUID.randomUUID()
+
+    var username: String? = null
+    var text: String? = null
+    var createdAt: Date = Date()
+
+    @ManyToOne
+    var chatRoom: ChatRoom? = null
+}
\ No newline at end of file
diff --git a/src/main/kotlin/de/thk/gm/websocketsdemo/repositories/ChatMessageRepository.kt b/src/main/kotlin/de/thk/gm/websocketsdemo/repositories/ChatMessageRepository.kt
new file mode 100644
index 0000000000000000000000000000000000000000..15932e0e0ef4d15d2070029ccaac8f92e4c220ab
--- /dev/null
+++ b/src/main/kotlin/de/thk/gm/websocketsdemo/repositories/ChatMessageRepository.kt
@@ -0,0 +1,12 @@
+package de.thk.gm.websocketsdemo.repositories
+
+import de.thk.gm.websocketsdemo.models.ChatMessage
+import de.thk.gm.websocketsdemo.models.ChatRoom
+import org.springframework.data.repository.CrudRepository
+import org.springframework.stereotype.Repository
+import java.util.*
+
+@Repository
+interface ChatMessageRepository : CrudRepository<ChatMessage, UUID> {
+    fun findChatMessagesByChatRoomOrderByCreatedAt(chatRoom: ChatRoom): List<ChatMessage>
+}
\ No newline at end of file
diff --git a/src/main/kotlin/de/thk/gm/websocketsdemo/services/ChatMessageService.kt b/src/main/kotlin/de/thk/gm/websocketsdemo/services/ChatMessageService.kt
new file mode 100644
index 0000000000000000000000000000000000000000..ba1d2fbb9709e80de600bf014baad9eb155c0dba
--- /dev/null
+++ b/src/main/kotlin/de/thk/gm/websocketsdemo/services/ChatMessageService.kt
@@ -0,0 +1,9 @@
+package de.thk.gm.websocketsdemo.services
+
+import de.thk.gm.websocketsdemo.models.ChatMessage
+import java.util.*
+
+interface ChatMessageService {
+    fun getChatMessagesByChatRoomId(roomId: UUID): List<ChatMessage>
+    fun save(chatMessage: ChatMessage)
+}
\ No newline at end of file
diff --git a/src/main/kotlin/de/thk/gm/websocketsdemo/services/ChatMessageServiceImpl.kt b/src/main/kotlin/de/thk/gm/websocketsdemo/services/ChatMessageServiceImpl.kt
new file mode 100644
index 0000000000000000000000000000000000000000..2248e817b389b835c920baebe65801f63b76f1b0
--- /dev/null
+++ b/src/main/kotlin/de/thk/gm/websocketsdemo/services/ChatMessageServiceImpl.kt
@@ -0,0 +1,24 @@
+package de.thk.gm.websocketsdemo.services
+
+import de.thk.gm.websocketsdemo.models.ChatMessage
+import de.thk.gm.websocketsdemo.repositories.ChatMessageRepository
+import de.thk.gm.websocketsdemo.repositories.ChatRoomsRepository
+import org.springframework.stereotype.Service
+import java.util.*
+
+@Service
+class ChatMessageServiceImpl (private val chatMessageRepository: ChatMessageRepository, private val chatRoomsRepository: ChatRoomsRepository) : ChatMessageService {
+    override fun getChatMessagesByChatRoomId(roomId: UUID): List<ChatMessage> {
+        val chatRoom = chatRoomsRepository.findById(roomId).orElse(null)
+        if(chatRoom != null) {
+            return chatMessageRepository.findChatMessagesByChatRoomOrderByCreatedAt(chatRoom)
+        } else {
+            return listOf()
+        }
+
+    }
+
+    override fun save(chatMessage: ChatMessage) {
+       chatMessageRepository.save(chatMessage)
+    }
+}
\ No newline at end of file
diff --git a/src/main/resources/templates/chatRooms/showChatRoom.ftlh b/src/main/resources/templates/chatRooms/showChatRoom.ftlh
index 8aaac5ef50306699d218891571c335040fccdbcd..f5530e70ea2ae72f972f3b6b904869f3a70ba1b1 100644
--- a/src/main/resources/templates/chatRooms/showChatRoom.ftlh
+++ b/src/main/resources/templates/chatRooms/showChatRoom.ftlh
@@ -13,7 +13,11 @@
     <input type="text" id="text" placeholder="message">
     <br>
     <button onclick="sendMessage()">Send</button>
-    <div id="chat"></div>
+    <div id="chat">
+        <#list chatMessages as chatMessage>
+            <p><b>${chatMessage.username}:</b>${chatMessage.text}</p>
+        </#list>
+    </div>
     <script>
         var ws = new WebSocket("/rooms?id=${chatRoom.id}")
         var chat = document.getElementById("chat")