private void performStop(final Breakpoint breakpoint) {
		final String className = breakpoint.className;
		final String methodName = breakpoint.methodName;
		final ReferenceType clazz = findClass(className);
		int lineNumber = breakpoint.lineNumber;

		if (lineNumber >= 0) {
			// find location by line number
			try {
				// define range
				final List<Location> allLines = clazz.allLineLocations();
				final int lastLine = allLines.get(allLines.size() - 1)
						.lineNumber();
				List<Location> locs;
				// find executable line in range
				do {
					locs = clazz.locationsOfLine(lineNumber++);
				} while (locs.size() < 1 && lineNumber < lastLine);

				if (locs.isEmpty()) {
					print(BREAKPOINT_ERROR, breakpoint, breakpoint.lineNumber,
							className);
				} else {
					setBreakpoint(locs.get(0));
				}

			} catch (AbsentInformationException e) {
				e.printStackTrace();
			}
		} else {
			// find location by method name
			final List<Method> methods = clazz.methodsByName(methodName);

			if (methods.size() == 1) {
				Method method = methods.get(0);

				// get first executable line
				try {
					List<Location> locs = method.allLineLocations();
					assert locs.size() > 0;
					setBreakpoint(locs.get(0));
				} catch (AbsentInformationException e) {
					e.printStackTrace();
				}
			} else if (methods.size() == 0) {
				print(NO_METHOD, breakpoint, methodName, className);
			} else {
				print(METHOD_OVERLOAD, breakpoint, methodName);
			}
		}
	}