protected Component findComponentAt(Container container, int x, int y) {
		Rectangle bounds = new Rectangle();
		int count = container.getComponentCount();

		//ShapePainterStrategy shapePainterStrategy = getShapePainter(container, null);

		for(int i = 0; i < count; i++) {
			Component child = container.getComponent(i);
			if(child.isVisible()) {
				child.getBounds(bounds);
				if(bounds.contains(x, y)) {
					if(child instanceof Container) {
						// recursive
						Component found = findComponentAt((Container) child, x - bounds.x, y - bounds.y);
						if(found != null) {
							return found;
						} else {
							return child;
						}
					} else if(! (child instanceof HeavyShape || child instanceof HeavyLabel)) {
						// skip our dedicated components for heavyweight support
						return child;
						//          } else if (child != shapePainterStrategy.heavyShape &&
						//              child != shapePainterStrategy.heavyShape.label){
						//            // skip our dedicated components for heavyweight support
						//            return child;
					}
				}
			}
		}
		return null;
	}