Extracted interfaces, added generic FactoryManager and renamed several classes and properties