I have a player prefab which has a ClientNetworkTransform component. The server instantiates the player and spawns it as PlayerObject. Code (CSharp): var player = GameManager.Instance.steamPlayers[i]; var startPosition = spawnPositions[i].position; var startRotation = spawnPositions[i].rotation; var go = Instantiate(playerPrefab, startPosition, startRotation); go.GetComponent<NetworkObject>().SpawnAsPlayerObject(player.clientId); In the server(host), the player is instantiated at the correct position. However, when it is spawned as the PlayerObject, it teleports to the default prefab transform. I think the initial position from the server doesn't get synced with the client and since the client has the authority over sending transform position, my initial position set from the server is overridden. Also I find this issue on github over a year ago and it seems to be the same problem. There is a comment which I don't think it is the case now: "ClientNetworkTransform is not part of the framework and we do not actively support it." ClientNetworkTransform just inherits from the NetworkTransform and overrides the authority. This is a super crucial feature if you think about it. I need to be able to spawn a player (with client authority over transform) at a given location. This is just a basic spawning mechanic where it works as expected on other networking libraries I have tried so far.