int ManufactureSchematicImplementation::addIngredientToSlot(CreatureObject* player, SceneObject* satchel, TangibleObject* tano, int slot) {
	if (slot >= ingredientSlots.size())
		return IngredientSlot::INVALID;

	Reference<IngredientSlot*> ingredientSlot = ingredientSlots.get(slot);

	if (ingredientSlot == NULL)
		return IngredientSlot::INVALID;

	bool wasEmpty = false;

	if(ingredientSlot->isFull())
		return IngredientSlot::FULL;

	if(ingredientSlot->isEmpty())
		wasEmpty = true;

	if(!ingredientSlot->add(player, satchel, tano))
		return IngredientSlot::INVALIDINGREDIENT;

	if(wasEmpty) {

		updateIngredientCounter();
		increaseComplexity();

		// DMSCO6 ***************************************************
		ManufactureSchematicObjectDeltaMessage6* dMsco6 =
				new ManufactureSchematicObjectDeltaMessage6(_this.getReferenceUnsafeStaticCast());

		dMsco6->insertToResourceSlot(slot);
		dMsco6->close();

		player->sendMessage(dMsco6);
		// End DMSCO6 ****************************************************

		sendDelta7(ingredientSlot, slot, player);

		if(possibleSyncIssue) {
			sendMsco7(player);
			possibleSyncIssue = false;
		}

	} else {

		possibleSyncIssue = true;
		/// Delta 7
		sendDelta7(ingredientSlot, slot, player);
	}


	// Start DMSCO3 ***********************************************************
	// Updates the Complexity
	ManufactureSchematicObjectDeltaMessage3* dMsco3 =
				new ManufactureSchematicObjectDeltaMessage3(_this.getReferenceUnsafeStaticCast());
	dMsco3->updateComplexity(getComplexity());
	dMsco3->close();

	player->sendMessage(dMsco3);
	// End DMSCO3 *************************************************************

	return IngredientSlot::OK;
}