diff --git a/CometeSwing/src/main/java/fr/soleil/comete/swing/border/CometeTitledBorder.java b/CometeSwing/src/main/java/fr/soleil/comete/swing/border/CometeTitledBorder.java
index ba1e71bcb77b3c1b0a00f1067b33f5d890ae2d2a..b0457e4198dcce4df0c7cc9e19fa4158387d00ed 100644
--- a/CometeSwing/src/main/java/fr/soleil/comete/swing/border/CometeTitledBorder.java
+++ b/CometeSwing/src/main/java/fr/soleil/comete/swing/border/CometeTitledBorder.java
@@ -2,22 +2,7 @@ package fr.soleil.comete.swing.border;
 
 import java.awt.Color;
 import java.awt.Component;
-import java.awt.Dimension;
 import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Insets;
-import java.awt.Rectangle;
-import java.awt.geom.Path2D;
-import java.lang.ref.WeakReference;
-
-import javax.swing.Icon;
-import javax.swing.JComponent;
-import javax.swing.UIManager;
-import javax.swing.border.AbstractBorder;
-import javax.swing.border.Border;
-import javax.swing.border.LineBorder;
-import javax.swing.border.TitledBorder;
 
 import fr.soleil.comete.awt.util.ColorTool;
 import fr.soleil.comete.awt.util.FontTool;
@@ -33,11 +18,10 @@ import fr.soleil.data.mediator.Mediator;
 import fr.soleil.data.service.thread.IDrawingThreadManager;
 import fr.soleil.data.target.TargetDelegate;
 import fr.soleil.lib.project.ObjectUtils;
-import fr.soleil.lib.project.swing.border.SettableColorLineBorder;
-import fr.soleil.lib.project.swing.text.DynamicForegroundLabel;
+import fr.soleil.lib.project.swing.border.ColoredLineTitledBorder;
 
 /**
- * A titled border that may receive text and color.
+ * A {@link ColoredLineTitledBorder} that may receive text and color.
  * <p>
  * <table border=1 style="border-collapse: collapse;">
  * <tr>
@@ -96,103 +80,12 @@ import fr.soleil.lib.project.swing.text.DynamicForegroundLabel;
  * 
  * @author Rapha&euml;l GIRARDOT
  */
-public class CometeTitledBorder extends AbstractBorder implements ITextComponent {
-
-    private static final long serialVersionUID = -2831448351166175190L;
-
-    /** The default border line color to use. */
-    protected static final Color DEFAULT_LINE_COLOR;
-    static {
-        Border tmp = UIManager.getBorder("TitledBorder.border");
-        if (tmp instanceof LineBorder) {
-            Color tmpColor = ((LineBorder) tmp).getLineColor();
-            DEFAULT_LINE_COLOR = new Color(tmpColor.getRed(), tmpColor.getGreen(), tmpColor.getBlue());
-        } else {
-            DEFAULT_LINE_COLOR = Color.BLACK;
-        }
-    }
-    /** The default title color to use. */
-    protected static final Color DEFAULT_TITLE_COLOR = UIManager.getColor("TitledBorder.titleColor");
-    /** The default title font to use. */
-    protected static final Font DEFAULT_TITLE_FONT = UIManager.getFont("TitledBorder.font");
-
-    /** Use the default vertical orientation for the title text. */
-    public static final int DEFAULT_POSITION = TitledBorder.DEFAULT_POSITION;
-    public static final Object REGISTERED_DEFAULT_POSITION = UIManager.get("TitledBorder.position");
-
-    /** Position the title above the border's top line. */
-    public static final int ABOVE_TOP = TitledBorder.ABOVE_TOP;
-    /** String representation of the position the title above the border's top line. */
-    public static final String ABOVE_TOP_S = "ABOVE_TOP";
-
-    /** Position the title in the middle of the border's top line. */
-    public static final int TOP = TitledBorder.TOP;
-    /** String representation of the position the title in the middle of the border's top line. */
-    public static final String TOP_S = "TOP";
+public class CometeTitledBorder extends ColoredLineTitledBorder implements ITextComponent {
 
-    /** Position the title below the border's top line. */
-    public static final int BELOW_TOP = TitledBorder.BELOW_TOP;
-    /** String representation of the position the title below the border's top line. */
-    public static final String BELOW_TOP_S = "BELOW_TOP";
-
-    /** Position the title above the border's bottom line. */
-    public static final int ABOVE_BOTTOM = TitledBorder.ABOVE_BOTTOM;
-    /** String representation of the position the title above the border's bottom line. */
-    public static final String ABOVE_BOTTOM_S = "ABOVE_BOTTOM";
-
-    /** Position the title in the middle of the border's bottom line. */
-    public static final int BOTTOM = TitledBorder.BOTTOM;
-    /** String representation of the position the title in the middle of the border's bottom line. */
-    protected static final String BOTTOM_S = "BOTTOM";
-
-    /** Position the title below the border's bottom line. */
-    public static final int BELOW_BOTTOM = TitledBorder.BELOW_BOTTOM;
-    /** String representation of the position the title below the border's bottom line. */
-    public static final String BELOW_BOTTOM_S = "BELOW_BOTTOM";
-
-    /** Use the default justification for the title text. */
-    public static final int DEFAULT_JUSTIFICATION = TitledBorder.DEFAULT_JUSTIFICATION;
-    /** Position title text at the left side of the border line. */
-    public static final int LEFT = TitledBorder.LEFT;
-    /** Position title text in the center of the border line. */
-    public static final int CENTER = TitledBorder.CENTER;
-    /** Position title text at the right side of the border line. */
-    public static final int RIGHT = TitledBorder.RIGHT;
-    /**
-     * Position title text at the left side of the border line
-     * for left to right orientation, at the right side of the
-     * border line for right to left orientation.
-     */
-    public static final int LEADING = TitledBorder.LEADING;
-    /**
-     * Position title text at the right side of the border line
-     * for left to right orientation, at the left side of the
-     * border line for right to left orientation.
-     */
-    public static final int TRAILING = TitledBorder.TRAILING;
+    private static final long serialVersionUID = 6824555601720126442L;
 
-    // Space between the border and the component's edge
-    protected static final int EDGE_SPACING = 2;
-
-    // Space between the border and text
-    protected static final int TEXT_SPACING = EDGE_SPACING;
-
-    // Horizontal inset of text that is left or right justified
-    protected static final int TEXT_HORIZONTAL_INSET = 5;
-
-    protected String title;
-    protected SettableColorLineBorder border;
-    protected int titlePosition;
-    protected int titleJustification;
-    protected Font titleFont;
-    protected Color titleColor, lineColor;
-    protected boolean titleBackgroundAsLineColor, titleColorAsLineColor;
     protected TextTargetMode textTargetMode;
     protected ColorTargetMode colorTargetMode;
-
-    protected WeakReference<Component> lastComponentRef;
-
-    protected final TitleLabel label;
     protected final TargetDelegate delegate;
     protected final ErrorNotificationDelegate errorNotificationDelegate;
 
@@ -214,22 +107,9 @@ public class CometeTitledBorder extends AbstractBorder implements ITextComponent
 
     public CometeTitledBorder(String title, int titleJustification, int titlePosition, Font titleFont,
             Color titleColor) {
-        this.title = title;
-        border = new SettableColorLineBorder(DEFAULT_LINE_COLOR, 1);
-        this.titleFont = titleFont == null ? DEFAULT_TITLE_FONT : titleFont;
+        super(title, titleJustification, titlePosition, titleFont, titleColor);
         textTargetMode = TextTargetMode.TEXT_AS_LABEL_TEXT_AND_TOOLTIP_AS_LABEL_TOOLTIP;
         colorTargetMode = ColorTargetMode.COMETE_FOREGROUND_AS_LABEL_FOREGROUND_AND_COMETE_BACKGROUND_AS_LABEL_BACKGROUND;
-
-        setTitleJustification(titleJustification);
-        setTitlePosition(titlePosition);
-        this.titleColor = titleColor;
-        this.lineColor = border.getLineColor();
-
-        label = new TitleLabel();
-        label.setForeground(titleColor);
-        label.setOpaque(false);
-        label.setFont(DEFAULT_TITLE_FONT);
-
         delegate = new TargetDelegate();
         errorNotificationDelegate = new ErrorNotificationDelegate(label) {
             @Override
@@ -239,238 +119,6 @@ public class CometeTitledBorder extends AbstractBorder implements ITextComponent
         };
     }
 
-    /**
-     * Returns the line color of the titled border.
-     * 
-     * @return the line color of the titled border.
-     */
-    public Color getLineColor() {
-        return border.getLineColor();
-    }
-
-    /**
-     * Sets the line color of the titled border.
-     * 
-     * @param color the line color of the titled border.
-     */
-    public void setLineColor(Color color) {
-        this.lineColor = color == null ? DEFAULT_LINE_COLOR : color;
-        border.setLineColor(this.lineColor);
-        repaintLastComponent();
-    }
-
-    /**
-     * Returns the line thickness of the titled border.
-     * 
-     * @return the line thickness of the titled border.
-     */
-    public int getLineThickness() {
-        return border.getThickness();
-    }
-
-    /**
-     * Sets the line thickness of the titled border.
-     * 
-     * @param thickness the line thickness of the titled border.
-     */
-    public void setLineThickness(int thickness) {
-        border.setThickness(thickness);
-        repaintLastComponent();
-    }
-
-    /**
-     * Returns the title of the titled border.
-     *
-     * @return the title of the titled border.
-     */
-    public String getTitle() {
-        return title;
-    }
-
-    /**
-     * Sets the title of the titled border.
-     * 
-     * @param title the title for the border.
-     */
-    public void setTitle(String title) {
-        this.title = title;
-        repaintLastComponent();
-    }
-
-    /**
-     * Returns the title-position of the titled border.
-     *
-     * @return the title-position of the titled border.
-     */
-    public int getTitlePosition() {
-        return titlePosition;
-    }
-
-    /**
-     * Sets the title-position of the titled border.
-     * 
-     * @param titlePosition the position for the border
-     */
-    public void setTitlePosition(int titlePosition) {
-        switch (titlePosition) {
-            case ABOVE_TOP:
-            case TOP:
-            case BELOW_TOP:
-            case ABOVE_BOTTOM:
-            case BOTTOM:
-            case BELOW_BOTTOM:
-            case DEFAULT_POSITION:
-                this.titlePosition = titlePosition;
-                break;
-            default:
-                throw new IllegalArgumentException("Invalid title position: " + titlePosition);
-        }
-    }
-
-    /**
-     * Returns the title-justification of the titled border.
-     *
-     * @return the title-justification of the titled border.
-     */
-    public int getTitleJustification() {
-        return titleJustification;
-    }
-
-    /**
-     * Sets the title-justification of the titled border.
-     * 
-     * @param titleJustification the justification for the border.
-     */
-    public void setTitleJustification(int titleJustification) {
-        switch (titleJustification) {
-            case DEFAULT_JUSTIFICATION:
-            case LEFT:
-            case CENTER:
-            case RIGHT:
-            case LEADING:
-            case TRAILING:
-                this.titleJustification = titleJustification;
-                break;
-            default:
-                throw new IllegalArgumentException("Invalid title justification: " + titleJustification);
-        }
-    }
-
-    /**
-     * Returns the tooltip that should be displayed with title.
-     * <p>
-     * As a {@link Border} can't display its own tooltip, this tooltip is just a stored information.
-     * </p>
-     * 
-     * @return A {@link String}.
-     */
-    public String getTitleToolTip() {
-        return label.getToolTipText();
-    }
-
-    /**
-     * Sets the tooltip that should be displayed with title.
-     * <p>
-     * As a {@link Border} can't display its own tooltip, this tooltip is just a stored information.
-     * </p>
-     * 
-     * @param text The tooltip to set.
-     */
-    public void setTitleToolTip(String text) {
-        label.setToolTipText(text);
-    }
-
-    private int getJustification(Component c) {
-        int justification = getTitleJustification();
-        switch (justification) {
-            case LEADING:
-            case DEFAULT_JUSTIFICATION:
-                justification = c.getComponentOrientation().isLeftToRight() ? LEFT : RIGHT;
-                break;
-            case TRAILING:
-                justification = c.getComponentOrientation().isLeftToRight() ? RIGHT : LEFT;
-                break;
-        }
-        return justification;
-    }
-
-    /**
-     * Returns the title-font of the titled border.
-     *
-     * @return the title-font of the titled border.
-     */
-    public Font getTitleFont() {
-        return titleFont;
-    }
-
-    /**
-     * Sets the title-font of the titled border.
-     * 
-     * @param titleFont the font for the border title.
-     */
-    public void setTitleFont(Font titleFont) {
-        this.titleFont = titleFont;
-        repaintLastComponent();
-    }
-
-    /**
-     * Returns the title-color of the titled border.
-     *
-     * @return the title-color of the titled border.
-     */
-    public Color getTitleColor() {
-        return label.getForeground();
-    }
-
-    /**
-     * Sets the title-color of the titled border.
-     * 
-     * @param titleColor the color for the border title.
-     */
-    public void setTitleColor(Color titleColor) {
-        this.titleColor = titleColor;
-        label.setForeground(titleColor);
-        repaintLastComponent();
-    }
-
-    /**
-     * Returns whether line color will automatically follow title background color.
-     * 
-     * @return whether line color will automatically follow title background color.
-     */
-    public boolean isTitleBackgroundAsLineColor() {
-        return titleBackgroundAsLineColor;
-    }
-
-    /**
-     * Sets whether line color will automatically follow title background color.
-     * 
-     * @param backgroundAsLineColor whether line color will automatically follow title background color.
-     */
-    public void setTitleBackgroundAsLineColor(boolean backgroundAsLineColor) {
-        this.titleBackgroundAsLineColor = backgroundAsLineColor;
-        repaintLastComponent();
-    }
-
-    /**
-     * Returns whether line color will automatically follow title color.
-     * 
-     * @return whether line color will automatically follow title color.
-     */
-    public boolean isTitleColorAsLineColor() {
-        return titleColorAsLineColor;
-    }
-
-    /**
-     * Sets whether line color will automatically follow title color.
-     * 
-     * @param foregroundAsLineColor whether line color will automatically follow title color.
-     */
-    public void setTitleColorAsLineColor(boolean foregroundAsLineColor) {
-        this.titleColorAsLineColor = foregroundAsLineColor;
-        repaintLastComponent();
-    }
-
     /**
      * Returns how this {@link CometeTitledBorder} will manage received text and tooltip.
      * 
@@ -509,381 +157,6 @@ public class CometeTitledBorder extends AbstractBorder implements ITextComponent
         this.colorTargetMode = colorTargetMode == null ? ColorTargetMode.NO_COLOR_TARGET : colorTargetMode;
     }
 
-    /**
-     * Updates the label according to given {@link Component}.
-     * 
-     * @param c The {@link Component}.
-     */
-    protected void updateLabel(Component c) {
-        label.setText(getTitle());
-        label.setFont(getTitleFont());
-        label.setComponentOrientation(c.getComponentOrientation());
-        label.setEnabled(c.isEnabled());
-    }
-
-    /**
-     * Returns the last known component that used this {@link CometeTitledBorder}.
-     * 
-     * @return A {@link Component}. Can be <code>null</code>.
-     */
-    protected Component getLastComponent() {
-        Component c = ObjectUtils.recoverObject(lastComponentRef);
-        if (c instanceof JComponent) {
-            if (((JComponent) c).getBorder() != this) {
-                c = null;
-            }
-        } else {
-            c = null;
-        }
-        return c;
-    }
-
-    /**
-     * Repaint the component that uses this {@link CometeTitledBorder} as border.
-     */
-    protected void repaintLastComponent() {
-        Component c = getLastComponent();
-        if (c != null) {
-            c.repaint();
-        }
-    }
-
-    /**
-     * Recovers the title position to use, especially when that position was defined to {@value #DEFAULT_POSITION}.
-     * 
-     * @return An <code>int</code>.
-     * @see #DEFAULT_POSITION
-     * @see #ABOVE_TOP
-     * @see #TOP
-     * @see #BELOW_TOP
-     * @see #ABOVE_BOTTOM
-     * @see #BOTTOM
-     * @see #BELOW_BOTTOM
-     */
-    protected int getPosition() {
-        int position = getTitlePosition();
-        if (position == DEFAULT_POSITION) {
-            if (REGISTERED_DEFAULT_POSITION instanceof Integer) {
-                int i = ((Integer) REGISTERED_DEFAULT_POSITION).intValue();
-                if ((0 < i) && (i <= 6)) {
-                    position = i;
-                } else {
-                    position = TOP;
-                }
-            } else if (REGISTERED_DEFAULT_POSITION instanceof String) {
-                String s = ((String) REGISTERED_DEFAULT_POSITION).toUpperCase();
-                switch (s) {
-                    case ABOVE_TOP_S:
-                        position = ABOVE_TOP;
-                        break;
-                    case BELOW_TOP_S:
-                        position = BELOW_TOP;
-                        break;
-                    case ABOVE_BOTTOM_S:
-                        position = ABOVE_BOTTOM;
-                        break;
-                    case BOTTOM_S:
-                        position = BOTTOM;
-                        break;
-                    case BELOW_BOTTOM_S:
-                        position = BELOW_BOTTOM;
-                        break;
-                    case TOP_S:
-                    default:
-                        position = TOP;
-                        break;
-                }
-            } else {
-                position = TOP;
-            }
-        }
-        return position;
-    }
-
-    /**
-     * Reinitialize the insets parameter with this Border's current Insets.
-     * 
-     * @param c the component for which this border insets value applies
-     * @param insets the object to be reinitialized
-     */
-    @Override
-    public Insets getBorderInsets(Component c, Insets insets) {
-        insets = border.getBorderInsets(c, insets);
-
-        String title = getTitle();
-        if ((title != null) && !title.isEmpty()) {
-            updateLabel(c);
-            Dimension size = label.getPreferredSize();
-
-            switch (getPosition()) {
-                case ABOVE_TOP:
-                    insets.top += size.height - EDGE_SPACING;
-                    break;
-                case TOP: {
-                    if (insets.top < size.height) {
-                        insets.top = size.height - EDGE_SPACING;
-                    }
-                    break;
-                }
-                case BELOW_TOP:
-                    insets.top += size.height;
-                    break;
-                case ABOVE_BOTTOM:
-                    insets.bottom += size.height;
-                    break;
-                case BOTTOM: {
-                    if (insets.bottom < size.height) {
-                        insets.bottom = size.height - EDGE_SPACING;
-                    }
-                    break;
-                }
-                case BELOW_BOTTOM:
-                    insets.bottom += size.height - EDGE_SPACING;
-                    break;
-            }
-            insets.top += EDGE_SPACING + TEXT_SPACING;
-            insets.left += EDGE_SPACING + TEXT_SPACING;
-            insets.right += EDGE_SPACING + TEXT_SPACING;
-            insets.bottom += EDGE_SPACING + TEXT_SPACING;
-        }
-        return insets;
-    }
-
-    @Override
-    public int getBaseline(Component c, int width, int height) {
-        if (c == null) {
-            throw new NullPointerException("Component can't be null");
-        }
-        if (width < 0) {
-            throw new IllegalArgumentException("Width must be \u2265 0");
-        }
-        if (height < 0) {
-            throw new IllegalArgumentException("Height must be \\u2265 0");
-        }
-        String title = getTitle();
-        int baseline;
-        if ((title != null) && !title.isEmpty()) {
-            int edge = EDGE_SPACING;
-            updateLabel(c);
-            Dimension size = label.getPreferredSize();
-            Insets insets = border.getBorderInsets(c, new Insets(0, 0, 0, 0));
-            baseline = label.getBaseline(size.width, size.height);
-            switch (getPosition()) {
-                case TOP:
-                    // TOP: label is vertically centered with top line
-                    insets.top = edge + (insets.top - size.height) / 2;
-                    baseline = (insets.top < edge) ? baseline : baseline + insets.top;
-                    break;
-                case BELOW_TOP:
-                    // BELOW_TOP: label is below the top line
-                    baseline += insets.top + edge;
-                    break;
-                case ABOVE_BOTTOM:
-                    // ABOVE_BOTTOM: label is above the bottom line.
-                    baseline += height - size.height - insets.bottom - edge;
-                    break;
-                case BOTTOM:
-                    // BOTTOM: label is vertically centered with bottom line
-                    insets.bottom = edge + (insets.bottom - size.height) / 2;
-                    baseline = (insets.bottom < edge) ? baseline + height - size.height
-                            : baseline + height - size.height + insets.bottom;
-                    break;
-                case BELOW_BOTTOM:
-                    // BELOW_BOTTOM: label is below the bottom line.
-                    baseline += height - size.height;
-                    break;
-                case ABOVE_TOP:
-                default:
-                    // nothing to do: baseline is label's baseline (label is vertically at 0 position).
-                    break;
-            }
-        } else {
-            baseline = -1;
-        }
-        return baseline;
-    }
-
-    @Override
-    public Component.BaselineResizeBehavior getBaselineResizeBehavior(Component c) {
-        Component.BaselineResizeBehavior behavior;
-        switch (getPosition()) {
-            case ABOVE_TOP:
-            case TOP:
-            case BELOW_TOP:
-                // When label is at the top, its baseline is relative to y-origin.
-                behavior = Component.BaselineResizeBehavior.CONSTANT_ASCENT;
-                break;
-            case ABOVE_BOTTOM:
-            case BOTTOM:
-            case BELOW_BOTTOM:
-                // When label is at the bottom, its baseline is relative to the height.
-                behavior = JComponent.BaselineResizeBehavior.CONSTANT_DESCENT;
-                break;
-            default:
-                // Other cases.
-                behavior = Component.BaselineResizeBehavior.OTHER;
-                break;
-        }
-        return behavior;
-    }
-
-    /**
-     * 
-     * @param c the component for which this border is being painted
-     * @param x the x position of the painted border
-     * @param y the y position of the painted border
-     * @param width the width of the painted border
-     * @param height the height of the painted border
-     * @return An <code>int[]</code>: <code>{borderX, borderY, borderWidth, borderHeight, labelX, labelY, labelWith,
-     *         labelHeight, position}</code>, where <code>position</code> is the result of {@link #getPosition()}.
-     */
-    protected int[] computeBorderBounds(Component c, int x, int y, int width, int height) {
-        updateLabel(c);
-        Dimension size = label.getPreferredSize();
-        Insets insets = border.getBorderInsets(c, new Insets(0, 0, 0, 0));
-
-        int borderX, borderY, borderWidth, borderHeight;
-        int labelX, labelY, labelWidth, labelHeight;
-
-        borderX = x + EDGE_SPACING;
-        borderY = y + EDGE_SPACING;
-        borderWidth = width - EDGE_SPACING - EDGE_SPACING;
-        borderHeight = height - EDGE_SPACING - EDGE_SPACING;
-
-        labelY = y;
-        labelHeight = size.height;
-        int position = getPosition();
-        switch (position) {
-            case ABOVE_TOP:
-                insets.left = 0;
-                insets.right = 0;
-                borderY += labelHeight - EDGE_SPACING;
-                borderHeight -= labelHeight - EDGE_SPACING;
-                break;
-            case TOP:
-                insets.top = EDGE_SPACING + insets.top / 2 - labelHeight / 2;
-                if (insets.top < EDGE_SPACING) {
-                    borderY -= insets.top;
-                    borderHeight += insets.top;
-                } else {
-                    labelY += insets.top;
-                }
-                break;
-            case BELOW_TOP:
-                labelY += insets.top + EDGE_SPACING;
-                break;
-            case ABOVE_BOTTOM:
-                labelY += height - labelHeight - insets.bottom - EDGE_SPACING;
-                break;
-            case BOTTOM:
-                labelY += height - labelHeight;
-                insets.bottom = EDGE_SPACING + (insets.bottom - labelHeight) / 2;
-                if (insets.bottom < EDGE_SPACING) {
-                    borderHeight += insets.bottom;
-                } else {
-                    labelY -= insets.bottom;
-                }
-                break;
-            case BELOW_BOTTOM:
-                insets.left = 0;
-                insets.right = 0;
-                labelY += height - labelHeight;
-                borderHeight -= labelHeight - EDGE_SPACING;
-                break;
-        }
-        insets.left += EDGE_SPACING + TEXT_HORIZONTAL_INSET;
-        insets.right += EDGE_SPACING + TEXT_HORIZONTAL_INSET;
-
-        labelX = x;
-        labelWidth = width - insets.left - insets.right;
-        if (labelWidth > size.width) {
-            labelWidth = size.width;
-        }
-        switch (getJustification(c)) {
-            case LEFT:
-                labelX += insets.left;
-                break;
-            case RIGHT:
-                labelX += width - insets.right - labelWidth;
-                break;
-            case CENTER:
-                labelX += (width - labelWidth) / 2;
-                break;
-        }
-        return new int[] { borderX, borderY, borderWidth, borderHeight, labelX, labelY, labelWidth, labelHeight,
-                position };
-    }
-
-    /**
-     * Returns the {@link Rectangle} that represents the title label bounds for given {@link Component} at given
-     * coordinates.
-     * 
-     * @param c The {@link Component}.
-     * @param x The border start abscissa.
-     * @param y The border start ordinate.
-     * @param width The border width.
-     * @param height The border height.
-     * @return A {@link Rectangle}.
-     */
-    public Rectangle getLabelBounds(Component c, int x, int y, int width, int height) {
-        Rectangle labelBounds;
-        String title = getTitle();
-        if ((title == null) || (title.isEmpty())) {
-            labelBounds = null;
-        } else {
-            int[] bounds = computeBorderBounds(c, x, y, width, height);
-            labelBounds = new Rectangle(bounds[4], bounds[5], bounds[6], bounds[7]);
-        }
-        return labelBounds;
-    }
-
-    /**
-     * Sets the title label background color.
-     * 
-     * @param bg The color to set.
-     */
-    protected void setLabelBackground(Color bg) {
-        label.setBackground(bg);
-        label.setOpaque(bg != null);
-        repaintLastComponent();
-    }
-
-    @Override
-    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
-        String title = getTitle();
-        if ((title != null) && !title.isEmpty()) {
-            int[] bounds = computeBorderBounds(c, x, y, width, height);
-            int borderX = bounds[0], borderY = bounds[1], borderWidth = bounds[2], borderHeight = bounds[3];
-            int labelX = bounds[4], labelY = bounds[5], labelWidth = bounds[6], labelHeight = bounds[7];
-            int position = bounds[8];
-            if ((position != TOP) && (position != BOTTOM)) {
-                border.paintBorder(c, g, borderX, borderY, borderWidth, borderHeight);
-            } else {
-                Graphics g2 = g.create();
-                if (g2 instanceof Graphics2D) {
-                    Graphics2D g2d = (Graphics2D) g2;
-                    Path2D path = new Path2D.Float();
-                    path.append(new Rectangle(borderX, borderY, borderWidth, labelY - borderY), false);
-                    path.append(new Rectangle(borderX, labelY, labelX - borderX - TEXT_SPACING, labelHeight), false);
-                    path.append(new Rectangle(labelX + labelWidth + TEXT_SPACING, labelY,
-                            borderX - labelX + borderWidth - labelWidth - TEXT_SPACING, labelHeight), false);
-                    path.append(new Rectangle(borderX, labelY + labelHeight, borderWidth,
-                            borderY - labelY + borderHeight - labelHeight), false);
-                    g2d.clip(path);
-                }
-                border.paintBorder(c, g2, borderX, borderY, borderWidth, borderHeight);
-                g2.dispose();
-            }
-            g.translate(labelX, labelY);
-            label.setSize(labelWidth, labelHeight);
-            label.paint(g);
-            g.translate(-labelX, -labelY);
-        } else if (border != null) {
-            border.paintBorder(c, g, x, y, width, height);
-        }
-        lastComponentRef = c == null ? null : new WeakReference<>(c);
-    }
-
     @Override
     public void notifyForError(String message, Throwable error) {
         errorNotificationDelegate.notifyForError(message, error);
@@ -1150,72 +423,4 @@ public class CometeTitledBorder extends AbstractBorder implements ITextComponent
         }
     }
 
-    // ///////////// //
-    // Inner classes //
-    // ///////////// //
-
-    /**
-     * {@link DynamicForegroundLabel} dedicated to displaying the title of a {@link CometeTitledBorder}.
-     */
-    protected class TitleLabel extends DynamicForegroundLabel {
-
-        private static final long serialVersionUID = 8647951261313807955L;
-
-        public TitleLabel() {
-            super();
-        }
-
-        public TitleLabel(Icon image, int horizontalAlignment) {
-            super(image, horizontalAlignment);
-        }
-
-        public TitleLabel(Icon image) {
-            super(image);
-        }
-
-        public TitleLabel(String text, Icon icon, int horizontalAlignment) {
-            super(text, icon, horizontalAlignment);
-        }
-
-        public TitleLabel(String text, int horizontalAlignment) {
-            super(text, horizontalAlignment);
-        }
-
-        public TitleLabel(String text) {
-            super(text);
-        }
-
-        @Override
-        public void setOpaque(boolean isOpaque) {
-            super.setOpaque(isOpaque);
-            Color fg = titleColor;
-            if (fg == null) {
-                if (isOpaque) {
-                    super.setForeground(null);
-                } else {
-                    super.setForeground(DEFAULT_TITLE_COLOR);
-                }
-            }
-        }
-
-        @Override
-        protected void updateForeground() {
-            super.updateForeground();
-            if (isTitleColorAsLineColor()) {
-                border.setLineColor(getForeground());
-            } else if (!isTitleBackgroundAsLineColor()) {
-                border.setLineColor(lineColor);
-            }
-        }
-
-        @Override
-        public void setBackground(Color bg) {
-            super.setBackground(bg);
-            if (isTitleBackgroundAsLineColor()) {
-                border.setLineColor(bg);
-            }
-        }
-
-    }
-
 }