diff --git a/client/CBattleInterface.cpp b/client/CBattleInterface.cpp
index eeb37e543..f354176f8 100644
--- a/client/CBattleInterface.cpp
+++ b/client/CBattleInterface.cpp
@@ -630,6 +630,7 @@ void CBattleStackMoved::endAnim()
 		else if(!endMoving && twoTiles && (! bool(movedStack->attackerOwned) ) && (owner->creDir[stackID] != bool(movedStack->attackerOwned) )) //big defender creature is reversed
 			owner->creAnims[stackID]->pos.x += 44;
 		owner->creAnims[stackID]->pos.y = coords.second;
+		owner->creAnims[stackID]->pos += LOCPLINT->battleInt->pos;
 	}
 
 	if(owner->moveSh >= 0)
@@ -1059,7 +1060,7 @@ CBattleInterface::CBattleInterface(CCreatureSet * army1, CCreatureSet * army2, C
 	//preparing menu background and terrain
 	if(siegeH)
 	{
-		background = BitmapHandler::loadBitmap( siegeH->getSiegeName(0) );
+		background = BitmapHandler::loadBitmap( siegeH->getSiegeName(0), false );
 		ui8 siegeLevel = LOCPLINT->cb->battleGetSiegeLevel();
 		if(siegeLevel >= 2) //citadel or castle
 		{
@@ -1082,7 +1083,7 @@ CBattleInterface::CBattleInterface(CCreatureSet * army1, CCreatureSet * army2, C
 	else
 	{
 		std::vector< std::string > & backref = graphics->battleBacks[ LOCPLINT->cb->battleGetBattlefieldType() ];
-		background = BitmapHandler::loadBitmap(backref[ rand() % backref.size()] );
+		background = BitmapHandler::loadBitmap(backref[ rand() % backref.size()], false );
 	}
 	
 	//preparing menu background
@@ -1235,6 +1236,11 @@ CBattleInterface::CBattleInterface(CCreatureSet * army1, CCreatureSet * army2, C
 			SDL_SetColorKey(idToObstacle[obst[t].ID]->ourImages[n].bitmap, SDL_SRCCOLORKEY, SDL_MapRGB(idToObstacle[obst[t].ID]->ourImages[n].bitmap->format,0,255,255));
 		}
 	}
+
+	for (int i = 0; i < ARRAY_COUNT(bfield); i++)
+	{
+		children.push_back(&bfield[i]);
+	}
 }
 
 CBattleInterface::~CBattleInterface()
@@ -2056,7 +2062,7 @@ void CBattleInterface::newStack(int stackID)
 		creAnims[stackID] = new CCreatureAnimation(newStack->creature->animDefName);	
 	}
 	creAnims[stackID]->setType(2);
-	creAnims[stackID]->pos = genRect(creAnims[newStack->ID]->fullHeight, creAnims[newStack->ID]->fullWidth, coords.first, coords.second);
+	creAnims[stackID]->pos = Rect(coords.first, coords.second, creAnims[newStack->ID]->fullWidth, creAnims[newStack->ID]->fullHeight) + pos;
 	creDir[stackID] = newStack->attackerOwned;
 }
 
@@ -2682,7 +2688,7 @@ void CBattleInterface::showAliveStack(int ID, const std::map<int, CStack> & stac
 		}
 	}
 
-	creAnims[ID]->nextFrame(to, creAnims[ID]->pos.x + pos.x, creAnims[ID]->pos.y + pos.y, creDir[ID], animCount, incrementFrame, ID==activeStack, ID==mouseHoveredStack); //increment always when moving, never if stack died
+	creAnims[ID]->nextFrame(to, creAnims[ID]->pos.x, creAnims[ID]->pos.y, creDir[ID], animCount, incrementFrame, ID==activeStack, ID==mouseHoveredStack); //increment always when moving, never if stack died
 
 	//printing amount
 	if(curStack.amount > 0 //don't print if stack is not alive
@@ -2723,12 +2729,12 @@ void CBattleInterface::showAliveStack(int ID, const std::map<int, CStack> & stac
 				amountBG = amountEffNeutral;
 			}
 		}
-		SDL_BlitSurface(amountBG, NULL, to, &genRect(amountNormal->h, amountNormal->w, creAnims[ID]->pos.x + xAdd + pos.x, creAnims[ID]->pos.y + 260 + pos.y));
+		SDL_BlitSurface(amountBG, NULL, to, &genRect(amountNormal->h, amountNormal->w, creAnims[ID]->pos.x + xAdd, creAnims[ID]->pos.y + 260));
 		//blitting amount
 		CSDL_Ext::printAtMiddle(
 			makeNumberShort(curStack.amount),
-			creAnims[ID]->pos.x + xAdd + 15 + pos.x,
-			creAnims[ID]->pos.y + 260 + 5 + pos.y,
+			creAnims[ID]->pos.x + xAdd + 15,
+			creAnims[ID]->pos.y + 260 + 5,
 			FONT_TINY,
 			zwykly,
 			to
@@ -3813,7 +3819,7 @@ void CStackQueue::StackBox::showAll( SDL_Surface *to )
 	if(bg)
 	{
 		graphics->blueToPlayersAdv(bg, my->owner);
-		//SDL_UpdateRect(bg, 0, 0, 0, 0);
+		SDL_UpdateRect(bg, 0, 0, 0, 0);
 		blitAt(bg, pos, to);
 		blitAt(graphics->bigImgs[my->creature->idNumber], pos.x +9, pos.y + 1, to);
 		printAtMiddleLoc(makeNumberShort(my->amount), pos.w/2, pos.h - 12, FONT_MEDIUM, zwykly, to);
diff --git a/client/NetPacksClient.cpp b/client/NetPacksClient.cpp
index 5d311ce1d..6e781d12a 100644
--- a/client/NetPacksClient.cpp
+++ b/client/NetPacksClient.cpp
@@ -142,6 +142,7 @@ void RemoveObject::applyFirstCl( CClient *cl )
 
 void RemoveObject::applyCl( CClient *cl )
 {
+	GS(cl)->calculatePaths(cl->pathInfo->hero, *cl->pathInfo);
 }
 
 void TryMoveHero::applyFirstCl( CClient *cl )