void InGameState::restart()
{
	if (m_io)
	{
		m_victoryTime = 0;
		m_defeatTime = 0;
		m_toneOutTimer = 0;
		m_io->clearSpriteInfos();
		for (unsigned int i = 0; i < m_gameObjects.size(); i++)
		{
			if( m_gameObjects[i] != NULL)
			{
				delete m_gameObjects[i];
				m_gameObjects[i] = NULL;
			}
		}
		m_gameObjects.clear();
		m_monsters.clear();
		m_bombs.clear();
		if (m_tileMap)
		{
			delete m_tileMap;
			m_tileMap = NULL;
		}
		if (m_gui)
		{
			delete m_gui;
			m_gui = NULL;
		}

		m_tileMap	= 0;
		MapLoader mapParser;

		int tscore = 0;
		if (m_stats)
		{
			tscore = m_stats->getTotalScore();
			delete m_stats;
		}
		m_stats = new GameStats(m_parent->getNewTimerInstance(), m_maps[m_currentMap].parTime, tscore);

		stringstream ss;
		ss << m_currentMap;
		string mapString = "../Maps/" + m_maps[m_currentMap].filename;
		mapParser.parseMap(mapString, m_io, m_stats, m_factory);

		m_tileMap = mapParser.getTileMap();
		m_gameObjects = mapParser.getGameObjects();
		m_avatar = mapParser.getAvatar();
		m_monsters = mapParser.getMonsters();
		m_traps = mapParser.getTraps();
		m_gui = mapParser.getGUI();
		m_paused = false;

		if (m_avatar)
			m_startTile = m_avatar->getCurrentTile();

		m_io->fadeSceneToBlack(1.0f);
	}

	m_parent->stopMainTimer();
	m_parent->startMainTimer();

	//Ugly - Should be corrected. Leave for now
	if (m_backgroundMusic)
	{
		m_backgroundMusic->deleted = true;
	}
	m_backgroundMusic = new SoundInfo();
	m_backgroundMusic->id = "../Sounds/Music/" + m_maps[m_currentMap].backgroundMusic;
	m_backgroundMusic->play = true;
	m_backgroundMusic->volume = 0;
	m_io->addSong(m_backgroundMusic);

	//Add sound effects
	if (m_clock)
	{
		m_clock->deleted = true;
	}
	m_clock = m_factory->CreateSoundInfo("../Sounds/bell.wav", 100);

	if (m_defeat)
	{
		m_defeat->deleted = true;
	}
	m_defeat = m_factory->CreateSoundInfo("../Sounds/failure.wav", 100);

	if (m_victory)
	{
		m_victory->deleted = true;
	}
	m_victory = m_factory->CreateSoundInfo("../Sounds/victory.wav", 100);


	//ANTON FIX!
	//Makes sure the game starts at time 0
	m_stats->getGameTimer()->stop();
	m_stats->getGameTimer()->start();
}