void ThreadedOptFossilCollManager::restoreCheckpoint(unsigned int restoredTime) {
	for (int i = 0; i < nextCheckpointTime.size(); i++) {
		lastCheckpointTime[i] = restoredTime;
		nextCheckpointTime[i] = restoredTime + checkpointPeriod;
	}
	utils::debug << mySimManager->getSimulationManagerID()
			<< " - Restoring to checkpoint: " << restoredTime << endl;

	// Restore the states to the objects. The actual state queue will be filled
	// after all of the events have been transmitted
	unsigned int size;
	char delIn;
	SimulationObject *object;
	unsigned int simMgrID = mySimManager->getSimulationManagerID();

	vector<State*> *states = checkpointedStates.find(restoredTime)->second;
	vector<Event*> restoredEvents;
	for (int i = 0; i < mySimManager->getNumberOfSimulationObjects(); i++) {
		object = mySimManager->getObjectHandle(ObjectID(i, simMgrID));
		object->setSimulationTime(mySimManager->getZero());
		object->getState()->copyState((*states)[i]);

		stringstream filename;
		filename << ckptFilePath << "LP"
				<< mySimManager->getSimulationManagerID() << "."
				<< restoredTime << "." << i;
		ifstream ckFile;
		ckFile.open(filename.str().c_str());
		if (!ckFile.is_open()) {
			cerr << mySimManager->getSimulationManagerID()
					<< " - Could not open file: " << filename.str()
					<< ", aborting simulation." << endl;
			abort();
		}

		// Read in the events.
		while (ckFile.peek() != EOF) {
			ckFile.read((char*) (&size), sizeof(size));
			ckFile.read(&delIn, sizeof(delIn));

			if (delIn != delimiter) {
				cerr << mySimManager->getSimulationManagerID()
						<< "ALIGNMENT ERROR in Event"
						<< "restoreCheckpoint. Got: " << delIn << endl;
				abort();
			}

			char *buf = new char[size];
			ckFile.read(buf, size);
			SerializedInstance *serEvent = new SerializedInstance(buf, size);
			Event *restoredEvent =
					dynamic_cast<Event*> (serEvent->deserialize());
			delete[] buf;
			delete serEvent;

			restoredEvents.push_back(restoredEvent);
			utils::debug << "restoring to objID "
					<< restoredEvent->getSender().getSimulationObjectID()
					<< endl;
		}

		ckFile.close();
	}

	std::sort(restoredEvents.begin(), restoredEvents.end(),
			receiveTimeLessThanEventIdLessThan());

	// Restore the output queue and transmit the events to restore the event set.
	for (int i = 0; i < restoredEvents.size(); i++) {
		mySimManager->handleEvent(restoredEvents[i]);
	}

	lastRestoreTime = restoredTime;

	// Set recovering to false
	mySimManager->setRecoveringFromCheckpoint(false);
	//myCommManager->setRecoveringFromCheckpoint(false);

	utils::debug << mySimManager->getSimulationManagerID()
			<< " - Done with restore process, " << restoredTime << endl;
}