protected List<Rule> expandDefeasibleRule(final Rule rule) throws RuleException {
		if (rule.getRuleType() != RuleType.DEFEASIBLE) return null;

		String originalRuleLabel = rule.getOriginalLabel();
		List<Rule> newRules = new ArrayList<Rule>();
		List<Literal> headLiterals = rule.getHeadLiterals();
		try {
			if (headLiterals.size() < 2) {
				Rule newRule = rule.clone();
				newRules.add(newRule);
			} else {
				List<Literal> bodyLiterals = rule.getBodyLiterals();
				Literal lastLiteral = null;
				int count = 1;
				Mode ruleMode = rule.getMode();
				for (Literal literal : headLiterals) {
					if (null == lastLiteral) {
					} else {
						Literal lc = lastLiteral.getComplementClone();
						bodyLiterals.add(lc);
					}

					String newRuleLabel = rule.getLabel() + "_" + count;
					Rule newRule = DomUtilities.getRule(newRuleLabel, RuleType.DEFEASIBLE);
					newRule.setOriginalLabel(originalRuleLabel);
					newRule.setMode(ruleMode);
					addBodyLiterals(newRule, bodyLiterals, "");

					newRule.addHeadLiteral(literal);

					newRules.add(newRule);
					lastLiteral = literal;
					count++;
				}
			}
			return newRules;
		} catch (Exception e) {
			throw new RuleException("exception throw while expanding rule [" + rule.getLabel() + "]", e);
		}
	}