public void start() {

		mWatcherThread.start();

		/*
		 * If any exception occurs during runtime, irondhcp will most likely
		 * kill himself, he's not a really stable personality...
		 */
		try {
			System.out.println("[irondhcp] Starting...");
			mIfmapService.prepareSSRC();
			System.out.println("[irondhcp] newSession...");
			mIfmapService.newSession();
			System.out.println("[irondhcp] purgePublisher for publisher-id=\""
					+ mIfmapService.getPublisherId() + "\"...");
			mIfmapService.purgePublisher();

			if (ConfigService.getSelfPublishEnable()) {
				mIfmapService.publishSelfInformation();
			}

			while (true) {
				LeaseUpdate update = null;
				System.out.println("[irondhcp] Waiting for changed leases...");

				// blocks if no update is there
				try {
					update = mQueue.take();
				} catch (InterruptedException e) {
					System.out
							.println("[irondhcp] InterruptException, trying again...");
					// try harder
					continue;
				}

				System.out.println("[irondhcp] Doing publish...");

				if (update.delLeases.size() > 0)
					mIfmapService.publishDelete(update.delLeases);

				if (update.newLeases.size() > 0)
					mIfmapService.publishUpdate(update.newLeases);
			}
		} catch (InitializationException e) {
			System.err.println("Initialization Error");
			System.out.println(e.getMessage());
			System.exit(1);
		} catch (IfmapErrorResult ifmaperror) {
			System.out.println("[irondhcp] IF-MAP Error Result:");
			System.out.println("[irondhcp] "
					+ ifmaperror);
			System.exit(1);
		} catch (IfmapException e) {
			System.out.println("[irondhcp] "
					+ e.getDescription());
			System.out.println("[irondhcp] "
					+ e.getMessage());
			System.exit(1);
		}
	}