void ZoneServerImplementation::startZones() {
	info("Loading zones.");

	SortedVector<String>* enabledZones = configManager->getEnabledZones();

	StructureManager* structureManager = StructureManager::instance();
	structureManager->setZoneServer(_this.getReferenceUnsafeStaticCast());

	for (int i = 0; i < enabledZones->size(); ++i) {
		String zoneName = enabledZones->get(i);

		info("Loading zone " + zoneName + ".");

		Zone* zone = new Zone(processor, zoneName);
		zone->createContainerComponent();
		zone->initializePrivateData();
		zone->deploy("Zone " + zoneName);

		zones->put(zoneName, zone);
	}

	resourceManager->initialize();

	for (int i = 0; i < zones->size(); ++i) {
		Zone* zone = zones->get(i);
		if (zone != NULL) {
			ZoneLoadManagersTask* task = new ZoneLoadManagersTask(_this.getReferenceUnsafeStaticCast(), zone);
			task->execute();
		}
	}

	for (int i = 0; i < zones->size(); ++i) {
		Zone* zone = zones->get(i);

		if (zone != NULL) {
			while (!zone->hasManagersStarted())
				Thread::sleep(500);
		}
	}
}