private static final TheoryNormalizer createTheoryNormalizer(TheoryType theoryType, int reasonerVersion)
			throws ReasoningEngineFactoryException {
		TheoryNormalizer theoryNormalizer = null;
		switch (theoryType) {
		case SDL:
			switch (reasonerVersion) {
			case 1:
				theoryNormalizer = new spindle.engine.sdl.SdlTheoryNormalizer();
				break;
			default:
				theoryNormalizer = new spindle.engine.sdl.SdlTheoryNormalizer2();
			}
			break;
		case MDL:
			switch (reasonerVersion) {
			case 1:
				theoryNormalizer = new spindle.engine.mdl.MdlTheoryNormalizer();
				break;
			default:
				theoryNormalizer = new spindle.engine.mdl.MdlTheoryNormalizer2();
			}
			break;
		case TDL:
			// only available when the package is not in deploy mode
			// - used for testing purpose
			if (AppConst.isDeploy)
				throw new ReasoningEngineFactoryException(ErrorMessage.THEORY_NORMALIZER_NOT_SUPPORTED, new Object[] { TheoryType.TDL });
			try {
				theoryNormalizer = new spindle.engine.tdl.TdlTheoryNormalizer2();
			} catch (TheoryNormalizerException e) {
				throw new ReasoningEngineFactoryException(e);
			}
			break;
		default:
			throw new ReasoningEngineFactoryException(ErrorMessage.THEORY_UNRECOGNIZED_THEORY_TYPE, new Object[] { theoryType });
		}
		return theoryNormalizer;
	}