 
         // start out with the view centered on our sprite so that we
         // resolve the appropriate scene blocks from the get go
-        centerView();
-    }
-
-    protected function centerView () :void
+        centerView(true, false);
+    }
+
+    protected function centerView (immediate :Boolean, optional :Boolean) :void
     {
         if (_selfSprite != null) {
             var viewPt :Point =
                 _isoView.isoToLocal(new Pt(_selfSprite.x, _selfSprite.y, _selfSprite.z));
-            moveBy(new Point(viewPt.x - _isoView.width / 2, viewPt.y - _isoView.height / 2));
+
+            var dx :int = viewPt.x - _isoView.width / 2;
+            var dy :int = viewPt.y - _isoView.height / 2;
+
+            // Unless we've forced it, if we'd move less than a quarter screen, don't bother.
+            if (!optional || Math.abs(dx) > _isoView.width / 4 ||
+                    Math.abs(dy) > _isoView.height / 4) {
+                moveBy(new Point(dx, dy), immediate);
+            }
         }
     }
 

            sprite.placeAtLoc(loc);

            // delay repaint until we resolve our new blocks
            centerView();
            return true;
        }


        _proxrad = int(Math.max(_proxrad, Math.sqrt(_isoView.size.x*_isoView.size.x +
            _isoView.size.y*_isoView.size.y)));
        recomputeProximate();
    }

    override public function willEnterPlace (plObj :PlaceObject) :void
