diff --git a/src/unit/unit.cpp b/src/unit/unit.cpp
index e8434ef12..1b4f6c094 100644
--- a/src/unit/unit.cpp
+++ b/src/unit/unit.cpp
@@ -738,14 +738,10 @@ global int UnitVisible(const Unit* unit)
     unsigned x;
     unsigned y;
     unsigned w;
+    unsigned w0;
     unsigned h;
 
-    IfDebug(
-	if (!unit->Type) {	// FIXME: Can this happen, if yes it is a bug
-	    abort();
-	    return 0;
-	}
-    );
+    DebugCheck( !unit->Type );	// FIXME: Can this happen, if yes it is a bug
 
     if ( unit->Invisible && unit->Player != ThisPlayer ) {
 	//FIXME: vladi: should handle teams and shared vision
@@ -753,25 +749,29 @@ global int UnitVisible(const Unit* unit)
     }
 
     //
-    //	Check if visible on screen
+    //	Check if visible on screen.
+    //		FIXME: This could be better checked, tells to much!
+    //		FIXME: This is needed to show moving units.
+    //		FIXME: flyers disappears to fast.
     //
     x = unit->X;
     y = unit->Y;
-    w = unit->Type->TileWidth;
+    w = w0 = unit->Type->TileWidth;
     h = unit->Type->TileHeight;
-    if( (x+w-1) < MapX || x > (MapX+MapWidth) ||
-	(y+h-1) < MapY || y > (MapY+MapHeight) ) {
+    if( (x+w) < MapX || x > (MapX+MapWidth)
+	    || (y+h) < MapY || y > (MapY+MapHeight) ) {
 	return 0;
     }
 
     //
-    //	Check explored or if visible under fog of war.
-    //	FIXME: isn't it enough to see a field of the building?
+    //	Check explored or if visible (building) under fog of war.
+    //		FIXME: need only check the boundary, not the complete rectangle.
+    //		FIXME: do we know this building SeenFrame!=-1 ?
     //
-    for( ; (int)w>=0; --w ) {
-	for( ; (int)h>=0; --h) {
-	    if( IsMapFieldExplored(x+w,y+h) &&
-		(unit->Type->Building || IsMapFieldVisible(x+w,y+h)) ) {
+    for( ; (int)h>=0; --h) {
+	for( w=w0; (int)w>=0; --w ) {
+	    if( IsMapFieldVisible(x+w,y+h) 
+		    || (unit->Type->Building && IsMapFieldExplored(x+w,y+h)) ) {
 		return 1;
 	    }
 	}