class LonePairGenerator implements IGenerator<IAtomContainer> {

    @Override
    public IRenderingElement generate(IAtomContainer container, RendererModel model) {
        ElementGroup group = new ElementGroup();

        // TODO : put into RendererModel
        final double SCREEN_RADIUS = 1.0;
        // separation between centers
        final double SCREEN_SEPARATION = 2.5;
        final Color RADICAL_COLOR = Color.BLACK;

        // XXX : is this the best option?
        final double ATOM_RADIUS = ((AtomRadius) model.getParameter(AtomRadius.class)).getValue();

        double scale = model.getParameter(Scale.class).getValue();
        double modelAtomRadius = ATOM_RADIUS / scale;
        double modelPointRadius = SCREEN_RADIUS / scale;
        double modelSeparation = SCREEN_SEPARATION / scale;
        for (ILonePair lonePair : container.lonePairs()) {
            IAtom atom = lonePair.getAtom();
            Point2d point = atom.getPoint2d();
            int align = GeometryUtil.getBestAlignmentForLabelXY(container, atom);
            double xRadius = point.x;
            double yRadius = point.y;
            double diffx = 0;
            double diffy = 0;
            if (align == 1) {
                xRadius += modelAtomRadius;
                diffy += modelSeparation;
            } else if (align == -1) {
                xRadius -= modelAtomRadius;
                diffy += modelSeparation;
            } else if (align == 2) {
                yRadius -= modelAtomRadius;
                diffx += modelSeparation;
            } else if (align == -2) {
                yRadius += modelAtomRadius;
                diffx += modelSeparation;
            }
            group.add(new OvalElement(xRadius + diffx, yRadius + diffy, modelPointRadius, true, RADICAL_COLOR));
            group.add(new OvalElement(xRadius - diffx, yRadius - diffy, modelPointRadius, true, RADICAL_COLOR));
        }
        return group;
    }

    public  LonePairGenerator();

}