diff --git a/include/entities/entity-generic.h b/include/entities/entity-generic.h
index 976de679803a0ccec77f696c9bd634a0bc18f042..aef3d46522b24e45c1c45ffe4bd9619b28aa41ff 100644
--- a/include/entities/entity-generic.h
+++ b/include/entities/entity-generic.h
@@ -1,18 +1,33 @@
+
 #ifndef __ENTITIES__ENTITY_GENERIC_H
 #define __ENTITIES__ENTITY_GENERIC_H
 
+// #include "entity-manager.h"
 #include "logger.h"
 
 class EntityGeneric
 {
-
+	// friend class EntityManager;
 	public:
-		EntityGeneric();
+		EntityGeneric( const std::string& tag, size_t id );	/** @todo make this private */
 		~EntityGeneric();
+
+		bool isAlive() { return this->_alive; } 
+		bool isDead() { return ! this->_alive; } 
+		void kill() { this->_alive = false; } 
+
+		// Component Variables	
+		const std::string& tag() { return this->_tag; } 
+
 	private:
 		Logger& _logger;
 
-	const size_t m_id = 0;
+		const size_t _id = 0;
+		const std::string _tag = "Default";
+		bool _alive = true;
+
 };
 
+typedef EntityGeneric Entity;
+
 #endif // __ENTITIES__ENTITY_GENERIC_H
diff --git a/include/entity-manager.h b/include/entity-manager.h
index 0edc7c335f31cd625e54897eed7ed49a1e4c0c42..c554c52240fa7da8dcee6de851cadd0e8aca6a3b 100644
--- a/include/entity-manager.h
+++ b/include/entity-manager.h
@@ -2,16 +2,36 @@
 #define __ENTITY_MANAGER_H__
 
 #include <string>
+#include <vector>
+#include <memory>
+#include <map>
+
+#include "logger.h"
+#include "entities/entity-generic.h"
+
+typedef EntityGeneric Entity;
+typedef std::vector<std::shared_ptr<EntityGeneric>> EntityVector;
+typedef std::map< std::string, EntityVector > EntityMap;
 
 class EntityManager
 {
 	public:
 		EntityManager();
 		~EntityManager();
-		void addEntity();
+		std::shared_ptr<EntityGeneric> addEntity( const std::string& tag );
 		void removeEntity();
-		void findEntity( std::string query );
+		void update();
+
+		EntityVector& getEntities();
+		EntityVector& getEntities( const std::string& tag );
 	private:
+		Logger& _logger;
+		EntityVector _entities;
+		EntityVector _entitiesToAdd;
+		EntityMap _entityMap;
+		size_t _totalEntities = 0;
+		
+		size_t nextId() { return this->_totalEntities++; }
 };
 
 #endif // __ENTITY_MANAGER_H__
diff --git a/include/main.h b/include/main.h
index a7ee083d48973a94aeabf3160add421a9f57a27f..c9347f5a965f4f6d2b3fb688d15c8dde11522000 100644
--- a/include/main.h
+++ b/include/main.h
@@ -18,5 +18,6 @@ enum GenerationMethod
 #include "logger.h"
 #include "entities/entity-generic.h"
 #include "maths/maths.h"
+#include "entity-manager.h"
 
 #endif // MAIN_H
diff --git a/src/entities/entity-generic.cpp b/src/entities/entity-generic.cpp
index 321371fd05f3c825413d84fefd51359da4702c9e..9a56b644e2f6ed8101df4e4fcf7ac9434ef5b091 100644
--- a/src/entities/entity-generic.cpp
+++ b/src/entities/entity-generic.cpp
@@ -1,6 +1,8 @@
 #include "entities/entity-generic.h"
 
-EntityGeneric::EntityGeneric()
-	: _logger( Logger::instance() )
+EntityGeneric::EntityGeneric(
+		const std::string& tag, size_t id
+) : _tag( tag ), _id( id ),
+	_logger( Logger::instance() )
 { this->_logger.info( "Generic Entity Created" ); }
 EntityGeneric::~EntityGeneric(){}
diff --git a/src/entity-manager.cpp b/src/entity-manager.cpp
index 0caccd7a0c1327183e9810674db8ea9fc3dbd561..4fb1e62a9b43f5fa225d80086bf5a2289866cda8 100644
--- a/src/entity-manager.cpp
+++ b/src/entity-manager.cpp
@@ -1,7 +1,45 @@
 #include "entity-manager.h"
 
-EntityManager::EntityManager(){}
-EntityManager::~EntityManager(){}
-void EntityManager::addEntity(){}
+EntityManager::EntityManager()
+	: _logger( Logger::instance() )
+{ this->_logger.info( "Creating entity manager" ); }
+EntityManager::~EntityManager()
+{
+	// while( auto entity =  )
+	//	{ delete entity; }
+
+	this->_logger.info( "Deleting entity manager" );
+}
+std::shared_ptr<Entity> EntityManager::addEntity( const std::string& tag )
+{
+	auto entity = std::shared_ptr< Entity >( new EntityGeneric( tag, this->nextId() ) );
+	this->_entitiesToAdd.push_back( entity );
+	return entity;
+}
+
+EntityVector& EntityManager::getEntities(){ return this->_entities; }
+EntityVector& EntityManager::getEntities( const std::string& tag ){
+	return this->_entities;
+}
+
+void EntityManager::update()
+{
+	for( auto entity : this->_entities )
+	{
+		if( entity->isDead() )
+		{
+			/** @todo Implement this with a clean deletion taking into account iterator invalidation
+			 */
+			// Remove from this->entities;
+			// Remove from this->entitiesMap;
+		}
+	}
+	for( auto entity : this->_entitiesToAdd )
+	{
+		this->_entities.push_back( entity );
+		this->_entityMap[entity->tag()].push_back( entity );
+	}
+	this->_entitiesToAdd.clear();
+}
+
 void EntityManager::removeEntity(){}
-void EntityManager::findEntity( std::string query ){}
diff --git a/src/main.cpp b/src/main.cpp
index a1382cd88c7f8d894040a2a79eabc5b654cc245a..3325eb5a3d91864c96f0555a525be3159f29b575 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -8,8 +8,12 @@ int main() {
 	// Initialise
 	Logger& logger = Logger::instance();
 	int tickCount = 0;
+	int _frame = 0;
 	SaveManager saveManager;
 	state = Initialise;
+
+	EntityManager entityManager;
+
 	// Seed the random number generator
 	srand(static_cast<unsigned int>(time(nullptr)));
 	std::vector< EntityGeneric* > entities;
@@ -40,10 +44,15 @@ int main() {
 			state = Exit;
 		}
 
-
+		// Update Entities
+		entityManager.update();
 		// Process Input
+		// Movement Updates
+		// Collision Updates
 		// Update Game State
 		// Render Game
+
+		_frame++;
 	}
 
 	// Clean-up