public void update(float delta, int screenWidth, int screenHeight) {
		// pre update all components
		Iterator<ManagerComponent<T>> compoIterator = components.values().iterator();
		while (compoIterator.hasNext()) {
			ManagerComponent<T> mcomp = compoIterator.next();
			if (mcomp.SHOULD_UPDATE)
				mcomp.preUpdate(this, delta);
		}

		// Grab the local entities iterator
		Iterator<Entry<String, T>> iterator = iterator();
		while (iterator.hasNext()) {
			// Get the new entity in the line
			T e = iterator.next().getValue();
			// Check if we can update entity e
			if (isNotExcluded(e.getClass(), EXCLUDE_FROM_UPDATE)) {
				// Update the entity
				e.update(delta);
			}

			// Update all components for the entity method
			compoIterator = components.values().iterator();
			while (compoIterator.hasNext()) {
				ManagerComponent<T> mcomp = compoIterator.next();
				if (mcomp.SHOULD_UPDATE)
					mcomp.updateEntity(e, delta);
			}

			// Check for valid removals
			if (e.shouldRemove(screenWidth, screenHeight)) {
				iterator.remove();
			}
		}

		// post update all components
		compoIterator = components.values().iterator();
		while (compoIterator.hasNext()) {
			ManagerComponent<T> mcomp = compoIterator.next();
			if (mcomp.SHOULD_UPDATE)
				mcomp.postUpdate(this, delta);
		}
	}