FPS_UINT32 MaterialManager::CreateMaterial( const std::string &p_FileName,
		MD5_DIGEST &p_Digest )
    {
		MD5_DIGEST Digest;
		MD5Zero( Digest );
		Material *pNewMaterial = new Material( this );

		if( pNewMaterial->CreateFromFile( p_FileName ) != FPS_OK )
		{
			std::cout << "[FPS::MaterialManager::CreateMaterial] "
				"<ERROR> Failed to create material from file" << std::endl;

			SafeDelete< Material >( pNewMaterial );

			return FPS_FAIL;
		}

		if( pNewMaterial->GetDigest( Digest ) != FPS_OK )
		{
			std::cout << "[FPS::MaterialManager::CreateMaterial] "
				"<ERROR> Failed to obtain the material's MD5 digest" <<
				std::endl;

			SafeDelete< Material >( pNewMaterial );

			return FPS_FAIL;
		}

		std::pair< std::map< MD5_DIGEST, Material * >::iterator, bool > Insert;

		Insert = m_Materials.insert( std::pair< MD5_DIGEST, Material * >(
			Digest, pNewMaterial ) );

		if( Insert.second == false )
		{
			std::cout << "[FPS::MaterialManager::CreateMaterial] <INFO> "
				"Material already exists: " << MD5AsString( Digest ) <<
				std::endl;

			SafeDelete< Material >( pNewMaterial );
		}

		p_Digest = Digest;

		return FPS_OK;
	}