     {
         super.clientDidLogon(event);
 
-        var clientObj :ClientObject = event.getClient().getClientObject();
-        if (clientObj is ClusteredBodyObject) {
-            // listen to the client object
-            clientObj.addListener(this);
-            _self = (clientObj as ClusteredBodyObject);
+        var body :BodyObject = CrowdClient(event.getClient()).bodyOf();
+        if (body is ClusteredBodyObject) {
+            // listen to the body
+            body.addListener(this);
+            _self = (body as ClusteredBodyObject);
 
             // we may need to subscribe to a cluster due to session resumption
             maybeUpdateCluster();

        var ssobj :SpotSceneObject = (plobj as SpotSceneObject);
        if (ssobj != null) {
            scloc = ssobj.occupantLocs.get(
                _wctx.getClient().getClientObject().getOid()) as SceneLocation;
        }
        _location = (scloc == null) ? null : scloc.loc;
    }


        // sanity check the server's notion of what scene we're in with our notion of it
        var sceneId :int = _scdir.getScene().getId();
        var clSceneId :int = ScenePlace.getSceneId(CrowdClient(_wctx.getClient()).bodyOf());
        if (sceneId != clSceneId) {
            log.warning("Client and server differ in opinion of what scene we're in " +
                        "[sSceneId=" + clSceneId + ", cSceneId=" + sceneId + "].");
