protected CmdOptionHandler findHandler(final AccessibleObject element, final int argsCount,
			final Class<? extends CmdOptionHandler> cmdOptionHandlerType) {
		CmdOptionHandler handler = null;
		if (cmdOptionHandlerType != null && !cmdOptionHandlerType.equals(CmdOptionHandler.class)) {
			// requested a specific handler
			if (handlerRegistry.containsKey(cmdOptionHandlerType)) {
				handler = handlerRegistry.get(cmdOptionHandlerType);
			} else {
				try {
					handler = cmdOptionHandlerType.newInstance();
				} catch (final Exception e) {
					throw new CmdlineParserException(e, I18n.marktr("Could not create handler: {0}"),
							cmdOptionHandlerType);
				}
				// commented out, because self-introduced handler (only in a
				// specific annotation) should not be made available to all
				// other options.
				// handlerRegistry.put(annoHandlerType, handler);
			}
		} else {
			// walk through registered hander and find one
			for (final CmdOptionHandler regHandle : handlerRegistry.values()) {
				if (regHandle.canHandle(element, argsCount)) {
					handler = regHandle;
					break;
				}
			}
		}
		if (handler == null && parent != null) {
			return parent.findHandler(element, argsCount, cmdOptionHandlerType);
		} else {
			return handler;
		}
	}