private void removeDefeaterImpl() throws TheoryNormalizerException {
		List<Rule> rulesToAdd = new ArrayList<Rule>();
		Set<String> rulesToDelete = new TreeSet<String>();

		Map<String, List<Rule>> oldNewRuleMapping = new Hashtable<String, List<Rule>>();
		List<Rule> newRules;
		List<Rule> newRuleMapping = null;
		
		try {
		for (Rule rule : factsAndRules.values()) {
			newRuleMapping = null;
			switch (rule.getRuleType()) {
			case STRICT:
				newRules = removeDefeater_transformRule(rule);

				rulesToAdd.addAll(newRules);
				rulesToDelete.add(rule.getLabel());
				newRuleMapping = newRules;
				break;
			case DEFEASIBLE:
				if (rule.getHeadLiterals().size() > 1) throw new TheoryException(ErrorMessage.THEORY_NOT_IN_REGULAR_FORM_MULTIPLE_HEADS_RULE,new Object[]{rule.getLabel()});
//						Messages.getErrorMessage(ErrorMessage.THEORY_NOT_IN_REGULAR_FORM_MULTIPLE_HEADS));

				newRules = removeDefeater_transformRule(rule);

				rulesToDelete.add(rule.getLabel());
				rulesToAdd.addAll(newRules);
				newRuleMapping = newRules;
				break;
			case DEFEATER:
				Rule r = removeDefeater_transformDefeater(rule);
				rulesToAdd.add(r);
				rulesToDelete.add(rule.getLabel());
				break;
			default:
			}
			if (newRuleMapping != null) oldNewRuleMapping.put(rule.getLabel(), newRuleMapping);
		}
	
			theory.updateTheory(rulesToAdd, rulesToDelete, oldNewRuleMapping);
		} catch (TheoryException e) {
			throw new TheoryNormalizerException(getClass(), ErrorMessage.TRANSFORMATION_DEFEATER_REMOVAL_ERROR,
					"Defeater removal exception!", e);
		}
	}