     }
 
     /**
-     * Clean up after a few things when we depart from a scene.
-     */
-    protected function handleDeparture () :void
-    {
-        // clear out our last known location id
-        _location = null;
+     * Called when we move from one scene to another, or to a non-scene.
+     */
+    protected function handleSceneChange (plobj :PlaceObject) :void
+    {
+        // determine our location in the new scene if we have one
+        var scloc :SceneLocation = null;
+        var ssobj :SpotSceneObject = (plobj as SpotSceneObject);
+        if (ssobj != null) {
+            scloc = ssobj.occupantLocs.get((_self as BodyObject).getOid()) as SceneLocation;
+        }
+        _location = (scloc == null) ? null : scloc.loc;
     }
 
     /**

        _scdir = scdir;

        // wire ourselves up to hear about leave place notifications
        locdir.addLocationObserver(new LocationAdapter(null, function (place :PlaceObject) :void {
            handleDeparture();
        }));
    }

    /**


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

