diff --git a/CAdvmapInterface.cpp b/CAdvmapInterface.cpp
index 06f377b13..0727eb4d1 100644
--- a/CAdvmapInterface.cpp
+++ b/CAdvmapInterface.cpp
@@ -1195,12 +1195,12 @@ CInfoBar::~CInfoBar()
 }
 void CInfoBar::draw(const CGObjectInstance * specific)
 {
-	if (mode==1)
+	if ((mode>=0) && mode<5)
 	{
-		//blitAt(day->ourImages[pom].bitmap,pos.x+10,pos.y+10);
+		blitAnim(mode);
 		return;
 	}
-	else if (mode==2)
+	else if (mode==5)
 	{
 		mode = -1;
 		if(!LOCPLINT->adventureInt->selection.selected)
@@ -1233,12 +1233,79 @@ void CInfoBar::draw(const CGObjectInstance * specific)
 	//SDL_FreeSurface(todr);
 }
 
+CDefHandler * CInfoBar::getAnim(int mode)
+{
+	switch(mode)
+	{
+	case 0:
+		return day;
+		break;
+	case 1:
+		return week1;
+		break;
+	case 2:
+		return week2;
+		break;
+	case 3:
+		return week3;
+		break;
+	case 4:
+		return week4;
+		break;
+	default:
+		return NULL;
+		break;
+	}
+}
+void CInfoBar::blitAnim(int mode)//0 - day, 1 - week
+{
+	CDefHandler * anim = NULL;
+	std::stringstream txt;
+	anim = getAnim(mode);
+	if(mode) //new week animation
+	{
+		txt << CGI->generaltexth->allTexts[63] << " " << LOCPLINT->cb->getDate(2);
+	}
+	else //new day
+	{
+		txt << CGI->generaltexth->allTexts[64] << " " << LOCPLINT->cb->getDate(1);
+	}
+	blitAt(anim->ourImages[pom].bitmap,pos.x+9,pos.y+10);
+	printAtMiddle(txt.str(),700,420,TNRB16,zwykly);
+	if (pom == anim->ourImages.size()-1)
+		toNextTick+=750;
+}
 void CInfoBar::newDay(int Day)
 {
-	mode = 1; //showing day
+	if(LOCPLINT->cb->getDate(1) != 1)
+	{
+		mode = 0; //showing day
+	}
+	else 
+	{
+		switch(LOCPLINT->cb->getDate(2))
+		{
+		case 1:
+			mode = 1;
+			break;
+		case 2:
+			mode = 2;
+			break;
+		case 3:
+			mode = 3;
+			break;
+		case 4:
+			mode = 4;
+			break;
+		default:
+			mode = -1;
+			break;
+		}
+	}
 	pom = 0;
 	TimeInterested::activate();
 	toNextTick = 500;
+	blitAnim(mode);
 	//blitAt(day->ourImages[pom].bitmap,pos.x+10,pos.y+10);
 }
 
@@ -1248,25 +1315,21 @@ void CInfoBar::showComp(SComponent * comp, int time)
 
 void CInfoBar::tick()
 {
-	if (mode == 1) //new day animation
+	if((mode >= 0) && (mode < 5))
 	{
 		pom++;
-		if (pom >= day->ourImages.size())
+		if (pom >= getAnim(mode)->ourImages.size())
 		{
 			TimeInterested::deactivate();
 			toNextTick = -1;
-			mode = 2;
+			mode = 5;
 			draw();
 			return;
 		}
-		toNextTick = 250;
-		blitAt(day->ourImages[pom].bitmap,pos.x+10,pos.y+10);
-		std::stringstream txt;
-		txt << CGI->generaltexth->allTexts[64] << " " << LOCPLINT->cb->getDate(1);
-		printAtMiddle(txt.str(),700,420,TNRB16,zwykly);
-		if (pom == day->ourImages.size()-1)
-			toNextTick+=750;
+		toNextTick = 150;
+		blitAnim(mode);
 	}
+
 }
 
 CAdvMapInt::CAdvMapInt(int Player)
@@ -1436,6 +1499,10 @@ void CAdvMapInt::hide()
 	heroList.deactivate();
 	townList.deactivate();
 	terrain.deactivate();
+	if(std::find(LOCPLINT->timeinterested.begin(),LOCPLINT->timeinterested.end(),&infoBar)!=LOCPLINT->timeinterested.end())
+		LOCPLINT->timeinterested.erase(std::find(LOCPLINT->timeinterested.begin(),LOCPLINT->timeinterested.end(),&infoBar));
+	infoBar.mode=-1;
+
 }
 void CAdvMapInt::update()
 {
diff --git a/CAdvmapInterface.h b/CAdvmapInterface.h
index 99080edc1..da2d64da2 100644
--- a/CAdvmapInterface.h
+++ b/CAdvmapInterface.h
@@ -199,6 +199,8 @@ public:
 	void showComp(SComponent * comp, int time=5000);
 	void tick();
 	void draw(const CGObjectInstance * specific=NULL); // if specific==0 function draws info about selected hero/town
+	void blitAnim(int mode);//0 - day, 1 - week
+	CDefHandler * getAnim(int mode);
 };
 /*****************************/
 class CAdvMapInt //adventure map interface
diff --git a/CPlayerInterface.cpp b/CPlayerInterface.cpp
index b8ea8eecf..656b6fb11 100644
--- a/CPlayerInterface.cpp
+++ b/CPlayerInterface.cpp
@@ -1416,8 +1416,8 @@ int3 CPlayerInterface::repairScreenPos(int3 pos)
 }
 void CPlayerInterface::heroPrimarySkillChanged(const CGHeroInstance * hero, int which, int val)
 {
-	SDL_FreeSurface(heroWins[hero->ID]);//TODO: moznaby zmieniac jedynie fragment bitmapy zwiazany z dana umiejetnoscia
-	heroWins[hero->ID] = infoWin(hero); //a nie przerysowywac calosc. Troche roboty, obecnie chyba nie wartej swieczki.
+	SDL_FreeSurface(heroWins[hero->subID]);//TODO: moznaby zmieniac jedynie fragment bitmapy zwiazany z dana umiejetnoscia
+	heroWins[hero->subID] = infoWin(hero); //a nie przerysowywac calosc. Troche roboty, obecnie chyba nie wartej swieczki.
 	if (adventureInt->selection.selected == hero)
 		adventureInt->infoBar.draw();
 	return;