/// <summary>
        /// Swaps the contents of one junction with another, moving as
        /// appropriate.
        /// </summary>
        private void SwitchJunctionContents(
			Junction oldJunction, Junction newJunction)
        {
            // Get our segment
            Segment s = oldJunction.GetSegment(newJunction);

            if (s == null)
            {
                throw new Exception(
                    "Cannot handle switching to non-continous segments");
            }

            PointF translate = s.ChildJunctionPoint;

            // Get a list of mobiles, including the player, around the
            // player.
            JunctionManagerPreload oldPreload = preloadedJunctions[oldJunction];
            JunctionManagerPreload newPreload = preloadedJunctions[newJunction];

            if (oldPreload == null)
                throw new Exception("oldPreload is null");

            if (newPreload == null)
                throw new Exception("newPreload is null");

            IList<Mobile> list = oldPreload.Physics.GetMobiles(
                State.Player.Point, Constants.OverlapConnectionDistance);

            foreach (Mobile m in list)
            {
                // Kill them in the current engine
                m.PhysicsBody.Lifetime.IsExpired = true;
                oldPreload.Physics.Remove(m);

                // Keep the old body and force the mobile to recreate
                // it by getting the new one and then setting the
                // internal state.
                Body oldBody = m.PhysicsBody;
                m.ClearPhysicsBody();

                Body newBody = m.PhysicsBody;
                newBody.State.Position.Linear.X =
                    oldBody.State.Position.Linear.X - translate.X;
                newBody.State.Position.Linear.Y =
                    oldBody.State.Position.Linear.Y - translate.Y;
                newBody.State.Position.Angular =
                    oldBody.State.Position.Angular;
                newBody.State.Velocity.Linear.X =
                    oldBody.State.Velocity.Linear.X;
                newBody.State.Velocity.Linear.Y =
                    oldBody.State.Velocity.Linear.Y;
                newBody.State.Velocity.Angular =
                    oldBody.State.Velocity.Angular;

                // Add it in the new engine
                newPreload.Physics.Add(m);
            }
        }