public Symbol createSymbol(GraphPoint point, Hint hintFromPreviousPoint,
                             Hint hintFromPreviousCurve) {
    GraphPoint origin = new GraphPoint(null);
    GraphPoint position = null;
    if (hintFromPreviousCurve instanceof PositionHint) {
      origin = ((PositionHint) hintFromPreviousCurve).getOrigin();
      position = ((PositionHint) hintFromPreviousCurve).getPosition();
    }
    if (position == null) {
      if (_symbolFactory == null) {
        return new Symbol(new GraphicalComposite(null), hintFromPreviousPoint,
                          new PositionHint(origin, point));
      } else {
        return _symbolFactory.createSymbol(point, hintFromPreviousPoint,
                                           new PositionHint(origin, point));
      }
    } else {
      double xError = point.getX() - origin.getX();
      double yError = point.getY() - origin.getY();
      GraphicalComposite errorBars = new GraphicalComposite(null);
      if (xError > 0) {
        errorBars.addElement(new Rectangle(position, 2 * xError, _size, 
                                           _attributes));
      }
      if (yError > 0) {
        errorBars.addElement(new Rectangle(position, _size, 2 * yError, 
                                           _attributes));
      }
      return new Symbol(errorBars, hintFromPreviousPoint, 
                        new PositionHint(origin, null));
    }
  }