diff --git a/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java b/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java
index 5d3e289..9931a08 100644
--- a/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java
+++ b/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java
@@ -176,13 +176,12 @@ public class GameRoom extends Thread implements IGameRoom {
 
             if( pi < this.players.size() ) {
                 players.get(pi).setController(i == 2 ? 2 : 1);
-                decks.put(players.get(pi).getUserId(), new GameDeck(
-                    userService.getDeckContentForDeckId(players.get(pi).getUserId(), players.get(pi).getDeckId())
+                GameDeck gd = new GameDeck();
+                userService.getDeckContentForDeckId(players.get(pi).getUserId(), players.get(pi).getDeckId())
                         .stream()
                         .map(d -> card2Entity(d.getAssetId()).get())
-                        .collect(Collectors.toList())
-                    )
-                );
+                        .forEach(gd::addCard);
+                decks.put(players.get(pi).getUserId(), gd);
             }
 
             if( i == 2 ) {
@@ -340,7 +339,7 @@ public class GameRoom extends Thread implements IGameRoom {
             );
         }
 
-        List<PegasusGame.PowerHistoryEntity> ens = List.of(
+        List<PegasusGame.PowerHistoryEntity.Builder> ens = List.of(
                 card2Entity("TB_SPT_Boss").get(),
                 card2Entity("CS1h_001").get()
         );
@@ -348,7 +347,6 @@ public class GameRoom extends Thread implements IGameRoom {
         for(int i = 0; i < 2; i++, this.entity_id++) {
             pw.addList(PegasusGame.PowerHistoryData.newBuilder()
                     .setFullEntity(ens.get(i)
-                            .toBuilder()
                             .setEntity(this.entity_id)
                             .addTags(PegasusGame.Tag.newBuilder()
                                     .setName(GameTag.ENTITY_ID.getValue())
@@ -370,10 +368,10 @@ public class GameRoom extends Thread implements IGameRoom {
         for( RoomPlayerDTO player : this.players ) {
             int di = 0;
             for (int i = 0; i < 26; i++, this.entity_id++, di++) {
-                PegasusGame.PowerHistoryEntity b = di < this.decks.get(player.getUserId()).getDeck().size() ? this.decks.get(player.getUserId()).getDeck().get(di) : PegasusGame.PowerHistoryEntity.newBuilder().build();
+                PegasusGame.PowerHistoryEntity.Builder b = di < this.decks.get(player.getUserId()).getSize() ? this.decks.get(player.getUserId()).getCard(di) : PegasusGame.PowerHistoryEntity.newBuilder();
+                log.info("bBuilder: {}", b.getName());
                 pw.addList(PegasusGame.PowerHistoryData.newBuilder()
                         .setFullEntity(b
-                                .toBuilder()
                                 .setEntity(this.entity_id)
                                 .addTags(PegasusGame.Tag.newBuilder()
                                         .setName(GameTag.ENTITY_ID.getValue())
@@ -393,11 +391,10 @@ public class GameRoom extends Thread implements IGameRoom {
             }
 
             for (int i = 1; i <= 3; i++, this.entity_id++, di++) {
-                PegasusGame.PowerHistoryEntity b = di < this.decks.get(player.getUserId()).getDeck().size() ? this.decks.get(player.getUserId()).getDeck().get(di) : PegasusGame.PowerHistoryEntity.newBuilder().build();
-                log.info("HAND: {}; {}; {}; {}", b, di < this.decks.get(player.getUserId()).getDeck().size(), di, this.decks.get(player.getUserId()).getDeck().size());
+                PegasusGame.PowerHistoryEntity.Builder b = di < this.decks.get(player.getUserId()).getSize() ? this.decks.get(player.getUserId()).getCard(di) : PegasusGame.PowerHistoryEntity.newBuilder();
+                log.info("HAND: {}; {}; {}; {}", b, di < this.decks.get(player.getUserId()).getSize(), di, this.decks.get(player.getUserId()).getSize());
                 pw.addList(PegasusGame.PowerHistoryData.newBuilder()
                         .setFullEntity(b
-                                .toBuilder()
                                 .setEntity(this.entity_id)
                                 .addTags(PegasusGame.Tag.newBuilder()
                                         .setName(GameTag.ENTITY_ID.getValue())
@@ -424,7 +421,6 @@ public class GameRoom extends Thread implements IGameRoom {
 
             pw.addList(PegasusGame.PowerHistoryData.newBuilder()
                     .setFullEntity(card2Entity("CS2_103e2").get()
-                            .toBuilder()
                             .setEntity(this.entity_id)
                             .addTags(PegasusGame.Tag.newBuilder()
                                     .setName(GameTag.ENTITY_ID.getValue())
@@ -472,7 +468,6 @@ public class GameRoom extends Thread implements IGameRoom {
 
             pw.addList(PegasusGame.PowerHistoryData.newBuilder()
                     .setFullEntity(card2Entity(deck.get().getHero().longValue()).get()
-                            .toBuilder()
                             .setEntity(this.entity_id)
                             .addTags(PegasusGame.Tag.newBuilder()
                                     .setName(GameTag.ENTITY_ID.getValue())
@@ -494,7 +489,6 @@ public class GameRoom extends Thread implements IGameRoom {
 
             pw.addList(PegasusGame.PowerHistoryData.newBuilder()
                     .setFullEntity(getHeroPowerFromHeroId(deck.get().getHero().longValue()).get()
-                            .toBuilder()
                             .setEntity(this.entity_id)
                             .addTags(PegasusGame.Tag.newBuilder()
                                     .setName(GameTag.ENTITY_ID.getValue())
@@ -536,7 +530,7 @@ public class GameRoom extends Thread implements IGameRoom {
                 .addAllEntities(decks.get(players.get(0).getUserId())
                         .getHandCards()
                         .stream()
-                        .map(PegasusGame.PowerHistoryEntity::getEntity)
+                        .map(PegasusGame.PowerHistoryEntity.Builder::getEntity)
                         .collect(Collectors.toList())
                 )
                 .setSource(1)
@@ -586,7 +580,7 @@ public class GameRoom extends Thread implements IGameRoom {
         this.globalState = GameState.next(this.globalState);
     }
 
-    private Optional<PegasusGame.PowerHistoryEntity> card2Entity(String cardId) {
+    private Optional<PegasusGame.PowerHistoryEntity.Builder> card2Entity(String cardId) {
         return this.objectConfig.getFormattedCards()
                 .getObjects()
                 .stream()
@@ -603,12 +597,11 @@ public class GameRoom extends Thread implements IGameRoom {
                                                     .build()
                                     )
                                     .collect(Collectors.toList()))
-                            .build()
                 )
                 .findFirst();
     }
 
-    private Optional<PegasusGame.PowerHistoryEntity> card2Entity(Long cardId) {
+    private Optional<PegasusGame.PowerHistoryEntity.Builder> card2Entity(Long cardId) {
         return this.objectConfig.getFormattedCards()
                 .getObjects()
                 .stream()
@@ -625,12 +618,11 @@ public class GameRoom extends Thread implements IGameRoom {
                                                         .build()
                                         )
                                         .collect(Collectors.toList()))
-                                .build()
                 )
                 .findFirst();
     }
 
-    private Optional<PegasusGame.PowerHistoryEntity> getHeroPowerFromHeroId(Long cardId) {
+    private Optional<PegasusGame.PowerHistoryEntity.Builder> getHeroPowerFromHeroId(Long cardId) {
         return card2Entity(Long.parseLong(this.objectConfig.getFormattedCards()
                 .getObjects()
                 .stream()
diff --git a/src/main/java/com/alterdekim/hearthhack/util/GameDeck.java b/src/main/java/com/alterdekim/hearthhack/util/GameDeck.java
index 3905968..f654514 100644
--- a/src/main/java/com/alterdekim/hearthhack/util/GameDeck.java
+++ b/src/main/java/com/alterdekim/hearthhack/util/GameDeck.java
@@ -7,25 +7,42 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
-@Getter
-@RequiredArgsConstructor
-public class GameDeck {
-    private final List<PegasusGame.PowerHistoryEntity> deck;
 
-    public void updateCard(PegasusGame.PowerHistoryEntity b) {
-        deck.removeIf(c -> c.getName().equals(b.getName()));
-        deck.add(b);
+public class GameDeck {
+    private final Map<String, PegasusGame.PowerHistoryEntity.Builder> deck;
+
+    public GameDeck() {
+        this.deck = new HashMap<>();
     }
 
-    public List<PegasusGame.PowerHistoryEntity> getHandCards() {
+    public PegasusGame.PowerHistoryEntity.Builder getCard(Integer i) {
+        return this.deck.get(getKeys().get(i));
+    }
+
+    public Integer getSize() {
+        return this.deck.values().size();
+    }
+
+    public void addCard(PegasusGame.PowerHistoryEntity.Builder b) {
+        this.deck.put(b.getName(), b);
+    }
+
+    public void updateCard(PegasusGame.PowerHistoryEntity.Builder b) {
+        deck.put(b.getName(), b);
+    }
+
+    public List<PegasusGame.PowerHistoryEntity.Builder> getHandCards() {
         return getCardsByTag(GameTag.ZONE, TagZone.HAND.ordinal());
     }
 
-    public List<PegasusGame.PowerHistoryEntity> getCardsByTag(GameTag tag, Integer val) {
+    public List<PegasusGame.PowerHistoryEntity.Builder> getCardsByTag(GameTag tag, Integer val) {
         return deck
+                .values()
                 .stream()
                 .filter(c -> c.getTagsList()
                         .stream()
@@ -33,4 +50,11 @@ public class GameDeck {
                 )
                 .collect(Collectors.toList());
     }
+
+    private List<String> getKeys() {
+        return this.deck.keySet()
+                .stream()
+                .sorted()
+                .collect(Collectors.toList());
+    }
 }