protected List<R> findForTerminal(ICardTerminal terminal) {
		ICardConnection connection = null;
		try {
			ICard card = terminal.getCard();
			connection = CardTools.connectTransacted(card,
					getConnectionTimeout());
			List<R> result = null;
			if (getCardChannelFilter() == null) {
				result = findForConnection(connection);
			} else {
				if (getCardChannelFilter().accept(connection)) {
					result = findForConnection(connection);
				}
			}
			if (result == null || result.isEmpty() || isCloseConnection()) {
				connection.close(ICardConnection.MODE_LEAVE_CARD);
			}
			return result;
		} catch (Exception ignore) {
			Log.log(Level.FINEST, ignore.getLocalizedMessage(), ignore);
			if (connection != null) {
				try {
					connection.close(ICardConnection.MODE_RESET);
				} catch (CardException e) {
					Log.log(Level.FINE, "close failed");
				}
			}
			return null;
		}
	}