private Geopoint getDestination() {
    Geopoint result = null;
    Geopoint coords = null;

    String bearingText = ((EditText) findViewById(R.id.bearing)).getText().toString();
    String distanceText = ((EditText) findViewById(R.id.distance)).getText().toString();
    String latText = latButton.getText().toString();
    String lonText = lonButton.getText().toString();

    if (StringUtils.isBlank(bearingText)
        && StringUtils.isBlank(distanceText)
        && StringUtils.isBlank(latText)
        && StringUtils.isBlank(lonText)) {
      showToast(res.getString(R.string.err_point_no_position_given));
      return null;
    }

    if (StringUtils.isNotBlank(latText) && StringUtils.isNotBlank(lonText)) {
      try {
        coords = GeopointParser.parse(latText, lonText);
      } catch (GeopointParser.ParseException e) {
        showToast(res.getString(e.resource));
        return null;
      }
    } else {
      if (geo == null || geo.coordsNow == null) {
        showToast(res.getString(R.string.err_point_curr_position_unavailable));
        return null;
      }

      coords = geo.coordsNow;
    }

    if (StringUtils.isNotBlank(bearingText) && StringUtils.isNotBlank(distanceText)) {
      // bearing & distance
      Double bearing = null;
      try {
        bearing = new Double(bearingText);
      } catch (Exception e) {
        // probably not a number
      }
      if (bearing == null) {
        helpDialog(
            res.getString(R.string.err_point_bear_and_dist_title),
            res.getString(R.string.err_point_bear_and_dist));
        return null;
      }

      double distance;
      try {
        distance = DistanceParser.parseDistance(distanceText, Settings.isUseMetricUnits());
      } catch (NumberFormatException e) {
        showToast(res.getString(R.string.err_parse_dist));
        return null;
      }

      final Geopoint coordsDst = coords.project(bearing, distance);

      if (coordsDst == null) {
        showToast(res.getString(R.string.err_point_location_error));
        return null;
      }

      result = coordsDst;
    } else if (coords != null) {
      result = coords;
    } else {
      return null;
    }

    saveCoords(result);

    return result;
  }
    public void onClick(View arg0) {
      final String bearingText = ((EditText) findViewById(R.id.bearing)).getText().toString();
      final String distanceText = ((EditText) findViewById(R.id.distance)).getText().toString();
      final String latText = ((Button) findViewById(R.id.buttonLatitude)).getText().toString();
      final String lonText = ((Button) findViewById(R.id.buttonLongitude)).getText().toString();

      if (StringUtils.isBlank(bearingText)
          && StringUtils.isBlank(distanceText)
          && StringUtils.isBlank(latText)
          && StringUtils.isBlank(lonText)) {
        helpDialog(
            res.getString(R.string.err_point_no_position_given_title),
            res.getString(R.string.err_point_no_position_given));
        return;
      }

      double latitude;
      double longitude;

      if (StringUtils.isNotBlank(latText) && StringUtils.isNotBlank(lonText)) {
        try {
          latitude = GeopointParser.parseLatitude(latText);
          longitude = GeopointParser.parseLongitude(lonText);
        } catch (GeopointParser.ParseException e) {
          showToast(res.getString(e.resource));
          return;
        }
      } else {
        if (geo == null || geo.coordsNow == null) {
          showToast(res.getString(R.string.err_point_curr_position_unavailable));
          return;
        }

        latitude = geo.coordsNow.getLatitude();
        longitude = geo.coordsNow.getLongitude();
      }

      Geopoint coords = null;
      if (StringUtils.isNotBlank(bearingText) && StringUtils.isNotBlank(distanceText)) {
        // bearing & distance
        double bearing = 0;
        try {
          bearing = Double.parseDouble(bearingText);
        } catch (NumberFormatException e) {
          helpDialog(
              res.getString(R.string.err_point_bear_and_dist_title),
              res.getString(R.string.err_point_bear_and_dist));
          return;
        }

        double distance;
        try {
          distance = DistanceParser.parseDistance(distanceText, Settings.isUseMetricUnits());
        } catch (NumberFormatException e) {
          showToast(res.getString(R.string.err_parse_dist));
          return;
        }

        coords = new Geopoint(latitude, longitude).project(bearing, distance);
      } else {
        coords = new Geopoint(latitude, longitude);
      }

      String name = ((EditText) findViewById(R.id.name)).getText().toString().trim();
      // if no name is given, just give the waypoint its number as name
      if (name.length() == 0) {
        name = res.getString(R.string.waypoint) + " " + String.valueOf(wpCount + 1);
      }
      final String note = ((EditText) findViewById(R.id.note)).getText().toString().trim();

      final cgWaypoint waypoint = new cgWaypoint(name, type);
      waypoint.setGeocode(geocode);
      waypoint.setPrefix(prefix);
      waypoint.setLookup(lookup);
      waypoint.setCoords(coords);
      waypoint.setNote(note);

      if (app.saveOwnWaypoint(id, geocode, waypoint)) {
        finish();
        return;
      } else {
        showToast(res.getString(R.string.err_waypoint_add_failed));
      }
    }