diff --git a/source/general/serialization/serializable.h b/source/general/serialization/serializable.h
index 89765d9198adaad935320e1c774b023d0adf52d6..59cef4449ca25d5b0a44f343eba01a9f2c95d7a3 100755
--- a/source/general/serialization/serializable.h
+++ b/source/general/serialization/serializable.h
@@ -1,10 +1,7 @@
-//
-// Created by Manuel on 01.02.2021.
-//
 // abstract class for a serializable object.
 
-#ifndef LAMA_SERIALIZABLE_H
-#define LAMA_SERIALIZABLE_H
+#ifndef BLACKJACK_SERIALIZABLE_H
+#define BLACKJACK_SERIALIZABLE_H
 
 #include "../../../rapidjson/include/rapidjson/document.h"
 
@@ -21,4 +18,4 @@ public:
     virtual void write_into_json(rapidjson::Value& json, rapidjson::Document::AllocatorType& allocator) const = 0;
 };
 
-#endif //LAMA_SERIALIZABLE_H
+#endif
diff --git a/unit-tests/hand.cpp b/unit-tests/hand.cpp
index 00a9a5368dc12d42323547227dbc3b8612a014a6..d65a54e9cf1a9cda90cbd6f7cbfb58c51f01e12f 100644
--- a/unit-tests/hand.cpp
+++ b/unit-tests/hand.cpp
@@ -320,8 +320,6 @@ TEST_F(HandTest, IsOver21TrueWithAce) {
 
 // Serialization and subsequent deserialization must yield the same object
 TEST_F(HandTest, SerializationEquality) {
-    //std::vector<card*> hand_cards = {cards[1][0], cards[2][0], cards[9][0]};
-    //hand hand_send();
     player_hand.add_card(cards[2][0], err);
     player_hand.add_card(cards[7][0], err);
     player_hand.add_card(cards[9][0], err);
diff --git a/unit-tests/player.cpp b/unit-tests/player.cpp
index 04e59f1668981d18d30486eb375724145ee9c344..1d3f15f73de158cb92fd106a54a0c76f39472f43 100644
--- a/unit-tests/player.cpp
+++ b/unit-tests/player.cpp
@@ -49,7 +49,6 @@ protected:
 
     std::vector<std::vector<card*>> cards;
     player* player_ = nullptr;
-    player* player_broke = nullptr;
     std::string player_name;
     int bet_size = 0;
     int money = 100;
@@ -184,6 +183,7 @@ TEST_F(PlayerTest, WrapUpRoundWon) {
     player_->get_hand()->add_card(cards[9][0], err);
     player_->get_hand()->add_card(cards[8][0], err);
     player_name = player_->get_player_name();
+    finished_turn = player_->has_finished_turn();
     std::vector<card*> expected_hand = {cards[2][0], cards[9][0], cards[8][0]};
     set_bet_size(*player_, 50);
     player_->wrap_up_round(18, err);
@@ -191,6 +191,7 @@ TEST_F(PlayerTest, WrapUpRoundWon) {
     EXPECT_EQ(150, player_->get_money());
     EXPECT_EQ(expected_hand, player_->get_hand()->get_cards());
     EXPECT_EQ(player_name, player_->get_player_name());
+    EXPECT_EQ(finished_turn, player_->has_finished_turn());
 }
 
 // Wrapping up a round for a player who won should call won_round()
@@ -201,6 +202,7 @@ TEST_F(PlayerTest, WrapUpRoundWonDealerLost) {
     player_->get_hand()->add_card(cards[9][0], err);
     player_->get_hand()->add_card(cards[8][0], err);
     player_name = player_->get_player_name();
+    finished_turn = player_->has_finished_turn();
     std::vector<card*> expected_hand = {cards[2][0], cards[9][0], cards[8][0]};
     set_bet_size(*player_, 50);
     player_->wrap_up_round(23, err);
@@ -208,6 +210,7 @@ TEST_F(PlayerTest, WrapUpRoundWonDealerLost) {
     EXPECT_EQ(150, player_->get_money());
     EXPECT_EQ(expected_hand, player_->get_hand()->get_cards());
     EXPECT_EQ(player_name, player_->get_player_name());
+    EXPECT_EQ(finished_turn, player_->has_finished_turn());
 }
 
 // Wrapping up a round for a player who make a draw should call draw_round()
@@ -218,6 +221,7 @@ TEST_F(PlayerTest, WrapUpRoundDraw) {
     player_->get_hand()->add_card(cards[9][0], err);
     player_->get_hand()->add_card(cards[8][0], err);
     player_name = player_->get_player_name();
+    finished_turn = player_->has_finished_turn();
     std::vector<card*> expected_hand = {cards[2][0], cards[9][0], cards[8][0]};
     set_bet_size(*player_, 50);
     player_->wrap_up_round(19, err);
@@ -225,6 +229,7 @@ TEST_F(PlayerTest, WrapUpRoundDraw) {
     EXPECT_EQ(100, player_->get_money());
     EXPECT_EQ(expected_hand, player_->get_hand()->get_cards());
     EXPECT_EQ(player_name, player_->get_player_name());
+    EXPECT_EQ(finished_turn, player_->has_finished_turn());
 }
 
 // Wrapping up a round for a player who won should call won_round()
@@ -235,6 +240,7 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackWon) {
     player_->get_hand()->add_card(cards[9][0], err);
     player_->get_hand()->add_card(cards[8][0], err);
     player_name = player_->get_player_name();
+    finished_turn = player_->has_finished_turn();
     std::vector<card*> expected_hand = {cards[4][0], cards[9][0], cards[8][0]};
     set_bet_size(*player_, 50);
     player_->wrap_up_round(20, err);
@@ -242,6 +248,7 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackWon) {
     EXPECT_EQ(150, player_->get_money());
     EXPECT_EQ(expected_hand, player_->get_hand()->get_cards());
     EXPECT_EQ(player_name, player_->get_player_name());
+    EXPECT_EQ(finished_turn, player_->has_finished_turn());
 }
 
 // Wrapping up a round for a player who make a draw should call draw_round()
@@ -252,6 +259,7 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackDraw) {
     player_->get_hand()->add_card(cards[9][0], err);
     player_->get_hand()->add_card(cards[8][0], err);
     player_name = player_->get_player_name();
+    finished_turn = player_->has_finished_turn();
     std::vector<card*> expected_hand = {cards[4][0], cards[9][0], cards[8][0]};
     set_bet_size(*player_, 50);
     player_->wrap_up_round(21, err);
@@ -259,6 +267,7 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackDraw) {
     EXPECT_EQ(100, player_->get_money());
     EXPECT_EQ(expected_hand, player_->get_hand()->get_cards());
     EXPECT_EQ(player_name, player_->get_player_name());
+    EXPECT_EQ(finished_turn, player_->has_finished_turn());
 }
 
 // Wrapping up a round for a player who make a draw should call draw_round()
@@ -269,6 +278,7 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackLost) {
     player_->get_hand()->add_card(cards[9][0], err);
     player_->get_hand()->add_card(cards[8][0], err);
     player_name = player_->get_player_name();
+    finished_turn = player_->has_finished_turn();
     std::vector<card*> expected_hand = {cards[6][0], cards[9][0], cards[8][0]};
     set_bet_size(*player_, 50);
     player_->wrap_up_round(21, err);
@@ -276,4 +286,38 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackLost) {
     EXPECT_EQ(50, player_->get_money());
     EXPECT_EQ(expected_hand, player_->get_hand()->get_cards());
     EXPECT_EQ(player_name, player_->get_player_name());
+    EXPECT_EQ(finished_turn, player_->has_finished_turn());
 }
+
+// Serialization and subsequent deserialization must yield the same object
+TEST_F(PlayerTest, SerializationEquality) {
+    player_->get_hand()->add_card(cards[2][0], err);
+    player_->get_hand()->add_card(cards[7][0], err);
+    player_->get_hand()->add_card(cards[9][0], err);
+    std::vector<card*> expected_hand = {cards[2][0], cards[7][0], cards[9][0]};
+    rapidjson::Document* json_send = player_->to_json();
+    std::string message = json_utils::to_string(json_send);
+    delete json_send;
+
+    rapidjson::Document json_received = rapidjson::Document(rapidjson::kObjectType);
+    json_received.Parse(message.c_str());
+    player* player_received = player::from_json(json_received);
+    EXPECT_EQ(player_->get_id(), player_received->get_id());
+    EXPECT_EQ(player_->get_player_name(), player_received->get_player_name());
+    EXPECT_EQ(player_->get_bet_size(), player_received->get_bet_size());
+    EXPECT_EQ(player_->get_money(), player_received->get_money());
+    EXPECT_EQ(player_->has_finished_turn(), player_received->has_finished_turn());
+    for (int i = 0; i < player_->get_hand()->get_cards().size(); ++i) {
+        EXPECT_EQ(expected_hand[i]->get_value(), player_->get_hand()->get_cards()[i]->get_value());
+        EXPECT_EQ(expected_hand[i]->get_suit(), player_->get_hand()->get_cards()[i]->get_suit());
+    }
+    delete player_received;
+}
+
+// Deserializing an invalid string must throw a BlackjackException
+TEST_F(PlayerTest, SerializationException) {
+    rapidjson::Document json = rapidjson::Document(rapidjson::kObjectType);
+    json.Parse("not json");
+    EXPECT_THROW(player::from_json(json), BlackjackException);
+}
+