diff --git a/Better Together/Better Together/Mutiplayer/LocalTeamPlayManager.swift b/Better Together/Better Together/Mutiplayer/LocalTeamPlayManager.swift
index b1256a2bc4cc597fac070abd1da4055047164e9f..62d9ea909b6d4a8c2909429b139406ce8d3a1199 100644
--- a/Better Together/Better Together/Mutiplayer/LocalTeamPlayManager.swift	
+++ b/Better Together/Better Together/Mutiplayer/LocalTeamPlayManager.swift	
@@ -59,19 +59,19 @@ class LocalTeamPlayManager: NSObject, MCNearbyServiceAdvertiserDelegate, MCBrows
             let action = try decoder.decode(SessionAction.self, from: data)
             switch action {
             case .setup(.selectedLevel(let level)):
-                NotificationCenter.default.post(name: .levelSelectedFromHost, object: nil, userInfo: ["level": level])
+                DispatchQueue.main.async{ NotificationCenter.default.post(name: .levelSelectedFromHost, object: nil, userInfo: ["level": level]) }
             case .setup(.responseForLevelSetting( _)):
-                self.delegate?.receivedLevelConfirmation(for: peerID) 
+                DispatchQueue.main.async{ self.delegate?.receivedLevelConfirmation(for: peerID) }
             case .setup(.syncCharacterIndexForGameScene(let playersInfo)):
-                self.delegate?.syncCharacterIndexForGameScene(playersInfo: playersInfo)
+                DispatchQueue.main.async{ self.delegate?.syncCharacterIndexForGameScene(playersInfo: playersInfo) }
             case .setup(.responseForCharacterInfoSyncDone(let done)):
-                self.delegate?.playerSyncDoneReceived(for: peerID, isDone: done)
+                DispatchQueue.main.async{ self.delegate?.playerSyncDoneReceived(for: peerID, isDone: done) }
             case .setup(.startGame(let start)):
-                NotificationCenter.default.post(name: .startGame, object: nil, userInfo: ["playerInfoSync": start])
+                DispatchQueue.main.async{ NotificationCenter.default.post(name: .startGame, object: nil, userInfo: ["playerInfoSync": start]) }
             case .setup(.gameOver(_)):
                 NotificationCenter.default.post(name: .gameResultReceived, object: nil, userInfo: ["result": "fail"])
             case .setup(.gameSceneLoaded(let isReady)):
-                self.delegate?.playersGameSceneLoadStateReceived(for: peerID, isReady: isReady)
+                DispatchQueue.main.async{ self.delegate?.playersGameSceneLoadStateReceived(for: peerID, isReady: isReady)}
             case .setup(.gameSuccess(_)):
                 NotificationCenter.default.post(name: .gameResultReceived, object: nil, userInfo: ["result": "success"])
             case .gamePhysics(let characterActionData):
@@ -79,11 +79,15 @@ class LocalTeamPlayManager: NSObject, MCNearbyServiceAdvertiserDelegate, MCBrows
             case .syncAllCharacters(let syncData):
                 delegate?.allChracterActionsReceived(charactersActions: syncData.data)
             case .setup(.clientsConfiguration(let config)):
-                let index = allPlayersPeerIDs!.firstIndex(of: peerID)!
+                DispatchQueue.main.async{
+                    let index = self.allPlayersPeerIDs!.firstIndex(of: peerID)!
                 CharacterManager.sharedInstance.addNewConfigurationServer(config: config, for: peerID, for: index)
-                delegate?.receivedNewCustomization(config: config, for: peerID)
+                    self.delegate?.receivedNewCustomization(config: config, for: peerID)
+                }
             case .setup(.dismissedInvitation(let value)):
+                DispatchQueue.main.async {
                 NotificationCenter.default.post(name: .dimissedInvitationBrowserClient , object: nil, userInfo: ["value": value])
+                }
             }
         } catch {
             debugPrint("receive - decoding error: \(error)")