public final void handle(ArgSet args) {
		if(args.isComment()) {
			return;
		} else if(args.peek().isEmpty()) {
			// In this case no other arguments are given, so execute the root action
			// of this comtroller
			rootAction.execute(args);
		} else if(args.hasAbbArg()) {
			Character c = args.peek().charAt(1);
			if(abbrMap.containsKey(c)) {
				abbrMap.get(args.fetchAbbr()).execute(args);
			} else {
				defaultAction.execute(args);
			}
		} else if(args.hasOptionArg()) {
			String s = args.peek().substring(2);
			if(optionMap.containsKey(s)) {
				optionMap.get(args.fetchOption()).execute(args);
			} else {
				defaultAction.execute(args);
			}
		} else if(args.hasArg()) {
			String s = args.peek();
			if(contextMap.containsKey(s)) {
				contextMap.get(args.pop()).handle(args);
			} else if(commandMap.containsKey(s)) {
				commandMap.get(args.pop()).execute(args);
			} else {
				defaultAction.execute(args);
			}
		}
	}