public void setProperties(Properties props) {
		String value;
		properties.putAll(props);

		if ((value = props.getProperty("sodbox.implicit.values")) != null) {
			ClassDescriptor.treateAnyNonPersistentObjectAsValue = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.serialize.transient.objects")) != null) {
			ClassDescriptor.serializeNonPersistentObjects = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.object.cache.init.size")) != null) {
			objectCacheInitSize = (int) getIntegerValue(value);

			if (objectCacheInitSize <= 0) {
				throw new IllegalArgumentException(
						"Initial object cache size should be positive");
			}
		}

		if ((value = props.getProperty("sodbox.object.cache.kind")) != null) {
			cacheKind = value;
		}

		if ((value = props.getProperty("sodbox.object.index.init.size")) != null) {
			initIndexSize = (int) getIntegerValue(value);
		}

		if ((value = props.getProperty("sodbox.extension.quantum")) != null) {
			extensionQuantum = getIntegerValue(value);
		}

		if ((value = props.getProperty("sodbox.gc.threshold")) != null) {
			gcThreshold = getIntegerValue(value);
		}

		if ((value = props.getProperty("sodbox.file.readonly")) != null) {
			readOnly = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.file.noflush")) != null) {
			noFlush = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.alternative.btree")) != null) {
			alternativeBtree = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.background.gc")) != null) {
			backgroundGc = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.string.encoding")) != null) {
			encoding = value;
		}

		if ((value = props.getProperty("sodbox.lock.file")) != null) {
			lockFile = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.replication.ack")) != null) {
			replicationAck = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.concurrent.iterator")) != null) {
			concurrentIterator = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.slave.connection.timeout")) != null) {
			slaveConnectionTimeout = (int) getIntegerValue(value);
		}

		if ((value = props.getProperty("sodbox.force.store")) != null) {
			forceStore = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.page.pool.lru.limit")) != null) {
			pagePoolLruLimit = getIntegerValue(value);
		}

		if ((value = props.getProperty("sodbox.multiclient.support")) != null) {
			multiclientSupport = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.reload.objects.on.rollback")) != null) {
			reloadObjectsOnRollback = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.reuse.oid")) != null) {
			reuseOid = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.serialize.system.collections")) != null) {
			serializeSystemCollections = getBooleanValue(value);
		}

		if ((value = props.getProperty("sodbox.compatibility.mode")) != null) {
			compatibilityMode = (int) getIntegerValue(value);
		}

		if (multiclientSupport && backgroundGc) {
			throw new IllegalArgumentException(
					"In mutliclient access mode bachround GC is not supported");
		}
	}