You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2019/03/07 17:39:39 UTC

[myfaces-tobago] branch tobago-4.x updated: TOBAGO-1984: Adjust class structure of UIComponents and optimize Generation

This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch tobago-4.x
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git


The following commit(s) were added to refs/heads/tobago-4.x by this push:
     new 4fb4b92  TOBAGO-1984: Adjust class structure of UIComponents and optimize Generation
4fb4b92 is described below

commit 4fb4b92b14150351c6a4d8117e2c5abcb72a6e6a
Author: Udo Schnurpfeil <lo...@apache.org>
AuthorDate: Thu Mar 7 18:39:28 2019 +0100

    TOBAGO-1984: Adjust class structure of UIComponents and optimize Generation
---
 .../org/apache/myfaces/tobago/component/Tags.java  | 181 +++++++++++++++++++++
 .../myfaces/tobago/facelets/EventHandler.java      |   3 +-
 .../internal/component/AbstractUICommand.java      |   7 +-
 .../tobago/internal/component/AbstractUIEvent.java |   2 +-
 .../internal/component/AbstractUIFlexLayout.java   |   7 +-
 .../internal/component/AbstractUIFlowLayout.java   |   4 +
 .../internal/component/AbstractUIFooter.java       |   2 +
 .../tobago/internal/component/AbstractUIForm.java  |   4 +
 .../internal/component/AbstractUIGridLayout.java   |  14 +-
 .../internal/component/AbstractUIHeader.java       |   2 +
 .../tobago/internal/component/AbstractUILabel.java |  20 +--
 ...stractUILabel.java => AbstractUILabelBase.java} |   2 +-
 .../internal/component/AbstractUIMessages.java     |   2 +
 .../tobago/internal/component/AbstractUIMeta.java  |  10 +-
 .../internal/component/AbstractUIObject.java       |   4 +
 .../tobago/internal/component/AbstractUIPage.java  |  10 ++
 .../internal/component/AbstractUIScript.java       |   6 +-
 .../component/AbstractUISegmentLayout.java         |  10 ++
 .../component/AbstractUISelectManyBase.java        |   8 +
 .../component/AbstractUISelectManyListbox.java     |   2 +
 .../component/AbstractUISelectManyShuttle.java     |   2 +
 .../component/AbstractUISelectOneBase.java         |   6 +
 .../component/AbstractUISelectOneListbox.java      |   2 +
 .../component/AbstractUISelectOneRadio.java        |   6 -
 .../internal/component/AbstractUISeparator.java    |   2 +
 .../tobago/internal/component/AbstractUISheet.java |  15 ++
 .../internal/component/AbstractUISplitLayout.java  |   6 +
 .../tobago/internal/component/AbstractUIStyle.java |   7 +
 .../internal/component/AbstractUISuggest.java      |   4 +
 .../tobago/internal/component/AbstractUITab.java   |   9 +-
 .../internal/component/AbstractUITabGroup.java     |   7 +-
 .../internal/component/AbstractUITextarea.java     |   2 +
 ...tUITreeListbox.java => AbstractUITreeIcon.java} |  11 +-
 .../internal/component/AbstractUITreeIndent.java   |   2 +
 ...tractUIFooter.java => AbstractUITreeLabel.java} |   5 +-
 .../internal/component/AbstractUITreeListbox.java  |   2 +
 .../internal/component/AbstractUITreeSelect.java   |   4 +
 .../myfaces/tobago/internal/renderkit/Command.java |   4 +-
 .../internal/renderkit/renderer/BarRenderer.java   |   8 +-
 .../renderkit/renderer/ColumnRenderer.java         |  10 +-
 .../renderkit/renderer/FlexLayoutRenderer.java     |   4 +-
 .../renderkit/renderer/FlowLayoutRenderer.java     |   4 +-
 .../renderkit/renderer/FooterRenderer.java         |   4 +-
 .../renderkit/renderer/GridLayoutRenderer.java     |   7 +-
 .../renderkit/renderer/HeaderRenderer.java         |   4 +-
 .../internal/renderkit/renderer/LabelRenderer.java |   6 +-
 .../renderkit/renderer/MessagesRenderer.java       |  10 +-
 .../renderkit/renderer/ObjectRenderer.java         |   4 +-
 .../internal/renderkit/renderer/OutRenderer.java   |   3 +-
 .../internal/renderkit/renderer/PageRenderer.java  |  31 ++--
 .../internal/renderkit/renderer/PanelRenderer.java |  10 +-
 .../renderkit/renderer/ProgressRenderer.java       |   7 +-
 .../renderkit/renderer/SegmentLayoutRenderer.java  |   3 +-
 .../renderer/SelectManyListboxRenderer.java        |   6 +-
 .../renderkit/renderer/SelectManyRendererBase.java |   3 +-
 .../renderer/SelectManyShuttleRenderer.java        |   4 +-
 .../renderer/SelectOneChoiceInsideInRenderer.java  |   4 +-
 .../renderer/SelectOneChoiceRenderer.java          |   8 +-
 .../renderer/SelectOneListboxRenderer.java         |   6 +-
 .../renderkit/renderer/SelectOneRendererBase.java  |   4 +-
 .../renderer/SeparatorInsideCommandRenderer.java   |   4 +-
 .../renderkit/renderer/SeparatorRenderer.java      |  10 +-
 .../internal/renderkit/renderer/SheetRenderer.java |  70 ++++----
 .../renderkit/renderer/TabGroupRenderer.java       |  37 +++--
 .../renderkit/renderer/TextareaRenderer.java       |   9 +-
 .../renderkit/renderer/TreeIconRenderer.java       |   8 +-
 .../renderkit/renderer/TreeIndentRenderer.java     |   4 +-
 .../renderkit/renderer/TreeLabelRenderer.java      |   8 +-
 .../renderkit/renderer/TreeListboxRenderer.java    |  15 +-
 .../renderkit/renderer/TreeNodeRenderer.java       |   8 +-
 .../internal/renderkit/renderer/TreeRenderer.java  |   4 +-
 .../renderkit/renderer/TreeSelectRenderer.java     |   6 +-
 .../taglib/component/BadgeTagDeclaration.java      |   1 -
 .../taglib/component/BarTagDeclaration.java        |   1 -
 .../taglib/component/BoxTagDeclaration.java        |   1 -
 .../taglib/component/ButtonTagDeclaration.java     |   1 -
 .../taglib/component/ButtonsTagDeclaration.java    |   1 -
 .../taglib/component/ColumnNodeTagDeclaration.java |   1 -
 .../component/ColumnSelectorTagDeclaration.java    |   1 -
 .../taglib/component/ColumnTagDeclaration.java     |   1 -
 .../taglib/component/DateTagDeclaration.java       |   1 -
 .../taglib/component/EventTagDeclaration.java      |   1 -
 .../taglib/component/FigureTagDeclaration.java     |   1 -
 .../taglib/component/FileTagDeclaration.java       |   1 -
 .../taglib/component/FlexLayoutTagDeclaration.java |   1 -
 .../taglib/component/FlowLayoutTagDeclaration.java |   1 -
 .../taglib/component/FooterTagDeclaration.java     |   1 -
 .../taglib/component/FormTagDeclaration.java       |   1 -
 .../taglib/component/GridLayoutTagDeclaration.java |   1 -
 .../taglib/component/HeaderTagDeclaration.java     |   1 -
 .../taglib/component/HiddenTagDeclaration.java     |   1 -
 .../taglib/component/ImageTagDeclaration.java      |   1 -
 .../taglib/component/InTagDeclaration.java         |   1 -
 .../taglib/component/LabelTagDeclaration.java      |   1 -
 .../taglib/component/LinkTagDeclaration.java       |   1 -
 .../taglib/component/LinksTagDeclaration.java      |   1 -
 .../taglib/component/MessagesTagDeclaration.java   |   1 -
 .../taglib/component/MetaLinkTagDeclaration.java   |   1 -
 .../taglib/component/MetaTagDeclaration.java       |   1 -
 .../taglib/component/ObjectTagDeclaration.java     |   1 -
 .../taglib/component/OperationTagDeclaration.java  |   1 -
 .../taglib/component/OutTagDeclaration.java        |   1 -
 .../taglib/component/PageTagDeclaration.java       |   1 -
 .../taglib/component/PanelTagDeclaration.java      |   1 -
 .../taglib/component/PopupTagDeclaration.java      |   1 -
 .../taglib/component/ProgressTagDeclaration.java   |   1 -
 .../taglib/component/ReloadTagDeclaration.java     |   1 -
 .../taglib/component/RowTagDeclaration.java        |   1 -
 .../taglib/component/ScriptTagDeclaration.java     |   1 -
 .../taglib/component/SectionTagDeclaration.java    |   1 -
 .../component/SegmentLayoutTagDeclaration.java     |   1 -
 .../SelectBooleanCheckboxTagDeclaration.java       |   1 -
 .../SelectBooleanToggleTagDeclaration.java         |   1 -
 .../taglib/component/SelectItemTagDeclaration.java |   1 -
 .../component/SelectItemsTagDeclaration.java       |   1 -
 .../SelectManyCheckboxTagDeclaration.java          |   1 -
 .../component/SelectManyListboxTagDeclaration.java |   1 -
 .../component/SelectManyShuttleTagDeclaration.java |   1 -
 .../component/SelectOneChoiceTagDeclaration.java   |   1 -
 .../component/SelectOneListboxTagDeclaration.java  |   1 -
 .../component/SelectOneRadioTagDeclaration.java    |   1 -
 .../component/SelectReferenceTagDeclaration.java   |   1 -
 .../taglib/component/SeparatorTagDeclaration.java  |   1 -
 .../taglib/component/SheetTagDeclaration.java      |   1 -
 .../component/SplitLayoutTagDeclaration.java       |   1 -
 .../taglib/component/StarsTagDeclaration.java      |   1 -
 .../taglib/component/StyleTagDeclaration.java      |   1 -
 .../taglib/component/SuggestTagDeclaration.java    |   1 -
 .../taglib/component/TabGroupTagDeclaration.java   |   1 -
 .../taglib/component/TabTagDeclaration.java        |   5 -
 .../taglib/component/TextareaTagDeclaration.java   |   1 -
 .../component/TreeCommandTagDeclaration.java       |   1 -
 .../taglib/component/TreeIconTagDeclaration.java   |   1 -
 .../taglib/component/TreeIndentTagDeclaration.java |   1 -
 .../taglib/component/TreeLabelTagDeclaration.java  |   1 -
 .../component/TreeListboxTagDeclaration.java       |   1 -
 .../taglib/component/TreeMenuTagDeclaration.java   |   1 -
 .../taglib/component/TreeNodeTagDeclaration.java   |   1 -
 .../taglib/component/TreeSelectTagDeclaration.java |   1 -
 .../taglib/component/TreeTagDeclaration.java       |   1 -
 .../tobago/internal/util/HtmlRendererUtils.java    |   7 +-
 .../apache/myfaces/tobago/renderkit/css/Style.java |   4 +-
 .../myfaces/tobago/component/TagsUnitTest.java}    |  26 ++-
 .../component/AbstractUIGridLayoutUnitTest.java    |  29 ++--
 .../internal/config/AbstractTobagoTestBase.java    |  19 ++-
 .../tobago/internal/util/JsonUtilsUnitTest.java    |   4 +-
 .../tobago/util/ComponentUtilsUnitTest.java        |   6 +-
 .../tobago/apt/annotation/UIComponentTag.java      |  10 +-
 .../apache/myfaces/tobago/apt/AnnotationUtils.java |   4 +
 .../myfaces/tobago/apt/generate/ClassUtils.java    |   9 +
 .../myfaces/tobago/apt/generate/TagInfo.java       |  14 ++
 .../tobago/apt/processor/ClassesGenerator.java     |  18 +-
 .../org/apache/myfaces/tobago/apt/component.stg    |   3 +-
 153 files changed, 609 insertions(+), 345 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/component/Tags.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/component/Tags.java
new file mode 100644
index 0000000..caadd37
--- /dev/null
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/component/Tags.java
@@ -0,0 +1,181 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.tobago.component;
+
+import org.apache.myfaces.tobago.internal.util.StringUtils;
+
+/**
+ * Constants for the component type.
+ * @since 4.4.0
+ */
+public enum Tags {
+
+  badge,
+  bar,
+  box,
+  button,
+  buttons,
+  calendar,
+  column,
+  columnNode,
+  columnSelector,
+  date,
+  event,
+  figure,
+  file,
+  flexLayout,
+  flowLayout,
+  footer,
+  form,
+  gridLayout,
+  header,
+  hidden,
+  in,
+  image,
+  link,
+  links,
+  label,
+  messages,
+  meta,
+  metaLink,
+  object,
+  operation,
+  out,
+  page,
+  panel,
+  popup,
+  progress,
+  reload,
+  row,
+  script,
+  section,
+  segmentLayout,
+  selectBooleanCheckbox,
+  selectBooleanToggle,
+  selectItem,
+  selectItems,
+  selectManyCheckbox,
+  selectManyListbox,
+  selectManyShuttle,
+  selectOneChoice,
+  selectOneRadio,
+  selectOneListbox,
+  selectReference,
+  separator,
+  sheet,
+  sheetPageCommand,
+  splitLayout,
+  stars,
+  style,
+  suggest,
+  textarea,
+  tab,
+  tabGroup,
+  toolBar,
+  tree,
+  treeCommand,
+  treeIcon,
+  treeIndent,
+  treeLabel,
+  treeListbox,
+  /**
+   * @deprecated since 4.4.0
+   */
+  @Deprecated
+  treeMenu,
+  treeNode,
+  treeSelect;
+
+  public static final String BADGE = "badge";
+  public static final String BAR = "bar";
+  public static final String BOX = "box";
+  public static final String BUTTON = "button";
+  public static final String BUTTONS = "buttons";
+  public static final String CALENDAR = "calendar";
+  public static final String COLUMN = "column";
+  public static final String COLUMN_NODE = "columnNode";
+  public static final String COLUMN_SELECTOR = "columnSelector";
+  public static final String EVENT = "event";
+  public static final String DATE = "date";
+  public static final String FIGURE = "figure";
+  public static final String FILE = "file";
+  public static final String FLEX_LAYOUT = "flexLayout";
+  public static final String FLOW_LAYOUT = "flowLayout";
+  public static final String FOOTER = "footer";
+  public static final String FORM = "form";
+  public static final String GRID_LAYOUT = "gridLayout";
+  public static final String HEADER = "header";
+  public static final String HIDDEN = "hidden";
+  public static final String IN = "in";
+  public static final String IMAGE = "image";
+  public static final String LINK = "link";
+  public static final String LINKS = "links";
+  public static final String LABEL = "label";
+  public static final String MESSAGES = "messages";
+  public static final String META = "meta";
+  public static final String META_LINK = "metaLink";
+  public static final String OBJECT = "object";
+  public static final String OPERATION = "operation";
+  public static final String OUT = "out";
+  public static final String PAGE = "page";
+  public static final String PANEL = "panel";
+  public static final String POPUP = "popup";
+  public static final String PROGRESS = "progress";
+  public static final String RELOAD = "reload";
+  public static final String ROW = "row";
+  public static final String SCRIPT = "script";
+  public static final String SECTION = "section";
+  public static final String SEGMENT_LAYOUT = "segmentLayout";
+  public static final String SELECT_BOOLEAN_CHECKBOX = "selectBooleanCheckbox";
+  public static final String SELECT_BOOLEAN_TOGGLE = "selectBooleanToggle";
+  public static final String SELECT_ITEM = "selectItem";
+  public static final String SELECT_ITEMS = "selectItems";
+  public static final String SELECT_MANY_CHECKBOX = "selectManyCheckbox";
+  public static final String SELECT_MANY_LISTBOX = "selectManyListbox";
+  public static final String SELECT_MANY_SHUTTLE = "selectManyShuttle";
+  public static final String SELECT_ONE_CHOICE = "selectOneChoice";
+  public static final String SELECT_ONE_RADIO = "selectOneRadio";
+  public static final String SELECT_ONE_LISTBOX = "selectOneListbox";
+  public static final String SELECT_REFERENCE = "selectReference";
+  public static final String SEPARATOR = "separator";
+  public static final String SHEET = "sheet";
+  public static final String SHEET_PAGE_COMMAND = "sheetPageCommand";
+  public static final String SPLIT_LAYOUT = "splitLayout";
+  public static final String STARS = "stars";
+  public static final String STYLE = "style";
+  public static final String SUGGEST = "suggest";
+  public static final String TEXTAREA = "textarea";
+  public static final String TAB = "tab";
+  public static final String TAB_GROUP = "tabGroup";
+  public static final String TOOL_BAR = "toolBar";
+  public static final String TREE = "tree";
+  public static final String TREE_COMMAND = "treeCommand";
+  public static final String TREE_ICON = "treeIcon";
+  public static final String TREE_INDENT = "treeIndent";
+  public static final String TREE_LABEL = "treeLabel";
+  public static final String TREE_LISTBOX = "treeListbox";
+  public static final String TREE_MENU = "treeMenu";
+  public static final String TREE_NODE = "treeNode";
+  public static final String TREE_SELECT = "treeSelect";
+
+  public String componentType() {
+    return "org.apache.myfaces.tobago." + StringUtils.firstToUpperCase(name());
+  }
+}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/facelets/EventHandler.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/facelets/EventHandler.java
index 590454e..4655b34 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/facelets/EventHandler.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/facelets/EventHandler.java
@@ -21,7 +21,6 @@ package org.apache.myfaces.tobago.facelets;
 
 import org.apache.myfaces.tobago.component.Attributes;
 import org.apache.myfaces.tobago.component.ClientBehaviors;
-import org.apache.myfaces.tobago.component.UIEvent;
 import org.apache.myfaces.tobago.internal.behavior.EventBehavior;
 import org.apache.myfaces.tobago.internal.component.AbstractUIEvent;
 
@@ -170,7 +169,7 @@ public class EventHandler extends TobagoComponentHandler implements BehaviorHold
       final FaceletContext faceletContext, final UIComponent component, final UIComponent parent) {
     super.onComponentCreated(faceletContext, component, parent);
 
-    final UIEvent uiEvent = (UIEvent) component;
+    final AbstractUIEvent uiEvent = (AbstractUIEvent) component;
     if (uiEvent.getEvent() == null) {
       final ClientBehaviorHolder holder = (ClientBehaviorHolder) parent;
       uiEvent.setEvent(ClientBehaviors.valueOf(holder.getDefaultEventName()));
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUICommand.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUICommand.java
index 5c07171..08778c4 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUICommand.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUICommand.java
@@ -21,11 +21,8 @@ package org.apache.myfaces.tobago.internal.component;
 
 import org.apache.myfaces.tobago.component.SupportFieldId;
 import org.apache.myfaces.tobago.component.SupportsAccessKey;
-import org.apache.myfaces.tobago.component.UIEvent;
 import org.apache.myfaces.tobago.component.Visual;
 import org.apache.myfaces.tobago.util.ComponentUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import javax.faces.component.UICommand;
 import javax.faces.component.UIComponent;
@@ -39,8 +36,6 @@ import javax.faces.context.FacesContext;
 public abstract class AbstractUICommand extends AbstractUICommandBase
     implements SupportsAccessKey, Visual, ClientBehaviorHolder, SupportFieldId {
 
-  private static final Logger LOG = LoggerFactory.getLogger(AbstractUICommand.class);
-
   enum PropertyKeys {
     disabled,
   }
@@ -53,7 +48,7 @@ public abstract class AbstractUICommand extends AbstractUICommandBase
       parentOfCommands = false;
       for (final UIComponent child : getChildren()) {
         if (child.isRendered()
-            && !(child instanceof UIEvent)
+            && !(child instanceof AbstractUIEvent)
             && (child instanceof UICommand || child instanceof UIInput)) {
           parentOfCommands = true;
           break;
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIEvent.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIEvent.java
index 6265e85..e8ad2bb 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIEvent.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIEvent.java
@@ -29,5 +29,5 @@ import javax.faces.component.behavior.ClientBehaviorHolder;
 public abstract class AbstractUIEvent extends AbstractUICommandBase implements ClientBehaviorHolder {
 
   public abstract ClientBehaviors getEvent();
-
+  public abstract void setEvent(ClientBehaviors event);
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFlexLayout.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFlexLayout.java
index 27c6e22..6f9b629 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFlexLayout.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFlexLayout.java
@@ -20,8 +20,9 @@
 package org.apache.myfaces.tobago.internal.component;
 
 import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.UIStyle;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.component.Visual;
+import org.apache.myfaces.tobago.layout.AlignItems;
 import org.apache.myfaces.tobago.layout.Measure;
 import org.apache.myfaces.tobago.layout.MeasureList;
 import org.apache.myfaces.tobago.util.ComponentUtils;
@@ -70,7 +71,7 @@ public abstract class AbstractUIFlexLayout extends AbstractUILayoutBase {
               AbstractUIStyle style = ComponentUtils.findChild(child, AbstractUIStyle.class);
               if (style == null) {
                 style = (AbstractUIStyle) facesContext.getApplication().createComponent(
-                    facesContext, UIStyle.COMPONENT_TYPE, RendererTypes.Style.name());
+                    facesContext, Tags.style.componentType(), RendererTypes.Style.name());
                 style.setTransient(true);
                 child.getChildren().add(style);
               }
@@ -98,6 +99,8 @@ public abstract class AbstractUIFlexLayout extends AbstractUILayoutBase {
 
   public abstract MeasureList getRows();
 
+  public abstract AlignItems getAlignItems();
+
   public boolean isHorizontal() {
     return getRows() == null;
   }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFlowLayout.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFlowLayout.java
index 45d93e1..19e4bc8 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFlowLayout.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFlowLayout.java
@@ -19,10 +19,14 @@
 
 package org.apache.myfaces.tobago.internal.component;
 
+import org.apache.myfaces.tobago.layout.TextAlign;
+
 /**
  * {@link org.apache.myfaces.tobago.internal.taglib.component.FlowLayoutTagDeclaration}
  */
 public abstract class AbstractUIFlowLayout extends AbstractUILayoutBase {
 
   public static final String COMPONENT_FAMILY = "org.apache.myfaces.tobago.FlowLayout";
+
+  public abstract TextAlign getTextAlign();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFooter.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFooter.java
index fddd8c5..81b5a46 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFooter.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFooter.java
@@ -20,4 +20,6 @@
 package org.apache.myfaces.tobago.internal.component;
 
 public abstract class AbstractUIFooter extends AbstractUIPanelBase {
+
+  public abstract boolean isFixed();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIForm.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIForm.java
index 8aea4e0..7dad444 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIForm.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIForm.java
@@ -24,6 +24,10 @@ package org.apache.myfaces.tobago.internal.component;
  */
 public abstract class AbstractUIForm extends AbstractUIFormBase {
 
+  /**
+   * @deprecated since 4.4.0.
+   */
+  @Deprecated
   public static final String COMPONENT_TYPE = "org.apache.myfaces.tobago.Form";
 
   /**
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIGridLayout.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIGridLayout.java
index 324f129..997ced9 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIGridLayout.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIGridLayout.java
@@ -23,8 +23,7 @@ import org.apache.myfaces.tobago.apt.annotation.Preliminary;
 import org.apache.myfaces.tobago.component.Attributes;
 import org.apache.myfaces.tobago.component.LabelLayout;
 import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.UIPanel;
-import org.apache.myfaces.tobago.component.UIStyle;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.internal.util.StyleRenderUtils;
 import org.apache.myfaces.tobago.layout.GridSpan;
 import org.apache.myfaces.tobago.layout.MeasureList;
@@ -33,6 +32,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIPanel;
 import javax.faces.context.FacesContext;
 import javax.faces.event.AbortProcessingException;
 import javax.faces.event.ComponentSystemEvent;
@@ -173,10 +173,10 @@ public abstract class AbstractUIGridLayout extends AbstractUILayoutBase implemen
 
       // field style
 
-      UIStyle fieldStyle = ComponentUtils.findChild(component, UIStyle.class);
+      AbstractUIStyle fieldStyle = ComponentUtils.findChild(component, AbstractUIStyle.class);
       if (fieldStyle == null) {
-        fieldStyle = (UIStyle) ComponentUtils.createComponent(
-            facesContext, UIStyle.COMPONENT_TYPE, RendererTypes.Style, null);
+        fieldStyle = (AbstractUIStyle) ComponentUtils.createComponent(
+            facesContext, Tags.style.componentType(), RendererTypes.Style, null);
         component.getChildren().add(fieldStyle);
       }
       // Style must be transient to avoid creating a new instance of GridSpan while restore state
@@ -191,8 +191,8 @@ public abstract class AbstractUIGridLayout extends AbstractUILayoutBase implemen
       // label style
 
       if (labeled) {
-        final UIStyle labelStyle = (UIStyle) ComponentUtils.createComponent(
-            facesContext, UIStyle.COMPONENT_TYPE, RendererTypes.Style, null);
+        final AbstractUIStyle labelStyle = (AbstractUIStyle) ComponentUtils.createComponent(
+            facesContext, Tags.style.componentType(), RendererTypes.Style, null);
         component.getChildren().add(labelStyle);
         labelStyle.setTransient(true);
         labelStyle.setSelector(StyleRenderUtils.encodeIdSelector(
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIHeader.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIHeader.java
index abc08f2..82b0909 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIHeader.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIHeader.java
@@ -20,4 +20,6 @@
 package org.apache.myfaces.tobago.internal.component;
 
 public abstract class AbstractUIHeader extends AbstractUIPanelBase {
+
+  public abstract boolean isFixed();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUILabel.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUILabel.java
index 9e1cd40..afdcb6c 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUILabel.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUILabel.java
@@ -19,27 +19,11 @@
 
 package org.apache.myfaces.tobago.internal.component;
 
-import org.apache.myfaces.tobago.component.Visual;
-
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
+import org.apache.myfaces.tobago.component.SupportsAccessKey;
 
 /**
  * {@link org.apache.myfaces.tobago.internal.taglib.component.LabelTagDeclaration}
  */
 public abstract class AbstractUILabel
-    extends javax.faces.component.UIOutput implements Visual {
-
-  public String getLabel() {
-    final Converter converter = getConverter();
-    final Object value = getValue();
-    if (converter != null) {
-      return converter.getAsString(FacesContext.getCurrentInstance(), this, value);
-    } else if (value != null) {
-      return String.valueOf(value);
-    } else {
-      return null;
-    }
-  }
-
+    extends AbstractUILabelBase implements SupportsAccessKey {
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUILabel.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUILabelBase.java
similarity index 97%
copy from tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUILabel.java
copy to tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUILabelBase.java
index 9e1cd40..5d98d32 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUILabel.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUILabelBase.java
@@ -27,7 +27,7 @@ import javax.faces.convert.Converter;
 /**
  * {@link org.apache.myfaces.tobago.internal.taglib.component.LabelTagDeclaration}
  */
-public abstract class AbstractUILabel
+public abstract class AbstractUILabelBase
     extends javax.faces.component.UIOutput implements Visual {
 
   public String getLabel() {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIMessages.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIMessages.java
index 240ff74..f811915 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIMessages.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIMessages.java
@@ -113,6 +113,8 @@ public abstract class AbstractUIMessages extends javax.faces.component.UIMessage
 
   public abstract OrderBy getOrderBy();
 
+  public abstract boolean isConfirmation();
+
 /* TBD: if we support JSF 1.2 whe have to do something here.
   public abstract String getFor();
 */
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIMeta.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIMeta.java
index 76be5df..aa8a9ab 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIMeta.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIMeta.java
@@ -19,6 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.component;
 
+import org.apache.myfaces.tobago.util.FacesVersion;
+
 import javax.faces.component.UIComponentBase;
 import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
@@ -27,8 +29,6 @@ import javax.faces.event.ListenerFor;
 import javax.faces.event.PostAddToViewEvent;
 import javax.faces.event.PreRenderViewEvent;
 
-import org.apache.myfaces.tobago.util.FacesVersion;
-
 @ListenerFor(systemEventClass = PostAddToViewEvent.class)
 public abstract class AbstractUIMeta extends UIComponentBase {
 
@@ -61,11 +61,17 @@ public abstract class AbstractUIMeta extends UIComponentBase {
 
   public abstract String getCharset();
 
+  public abstract void setCharset(String charset);
+
   public abstract String getHttpEquiv();
 
   public abstract String getName();
 
+  public abstract void setName(String name);
+
   public abstract String getLang();
 
   public abstract String getContent();
+
+  public abstract void setContent(String content);
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIObject.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIObject.java
index d4a2ae8..261996f 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIObject.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIObject.java
@@ -27,4 +27,8 @@ import javax.faces.component.UIOutput;
  * {@link org.apache.myfaces.tobago.internal.taglib.component.ObjectTagDeclaration}
  */
 public abstract class AbstractUIObject extends UIOutput implements Visual {
+
+  public abstract String getName();
+
+  public abstract String getSrc();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIPage.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIPage.java
index a6a1c75..e406533 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIPage.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIPage.java
@@ -39,6 +39,10 @@ public abstract class AbstractUIPage extends AbstractUIFormBase implements Clien
 
   private static final Logger LOG = LoggerFactory.getLogger(AbstractUIPage.class);
 
+  /**
+   * @deprecated since 4.4.0.
+   */
+  @Deprecated
   public static final String COMPONENT_TYPE = "org.apache.myfaces.tobago.Page";
 
   public static final Charset FORM_ACCEPT_CHARSET = StandardCharsets.UTF_8;
@@ -128,4 +132,10 @@ public abstract class AbstractUIPage extends AbstractUIFormBase implements Clien
       facesContext.renderResponse();
     }
   }
+
+  public abstract String getApplicationIcon();
+
+  public abstract String getLabel();
+
+  public abstract String getFocusId();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIScript.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIScript.java
index 5d28901..c4aaca2 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIScript.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIScript.java
@@ -19,6 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.component;
 
+import org.apache.myfaces.tobago.util.FacesVersion;
+
 import javax.faces.component.UIComponentBase;
 import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
@@ -27,8 +29,6 @@ import javax.faces.event.ListenerFor;
 import javax.faces.event.PostAddToViewEvent;
 import javax.faces.event.PreRenderViewEvent;
 
-import org.apache.myfaces.tobago.util.FacesVersion;
-
 /**
  * {@link org.apache.myfaces.tobago.internal.taglib.component.ScriptTagDeclaration}
  *
@@ -65,4 +65,6 @@ public abstract class AbstractUIScript extends UIComponentBase {
   }
 
   public abstract String getFile();
+  public abstract void setFile(String file);
+
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISegmentLayout.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISegmentLayout.java
index ccfc4ee..8f1bd92 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISegmentLayout.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISegmentLayout.java
@@ -65,4 +65,14 @@ public abstract class AbstractUISegmentLayout extends AbstractUILayoutBase {
   public abstract MeasureList getLarge();
 
   public abstract MeasureList getExtraLarge();
+
+  public abstract String getMarginExtraSmall();
+
+  public abstract String getMarginSmall();
+
+  public abstract String getMarginMedium();
+
+  public abstract String getMarginLarge();
+
+  public abstract String getMarginExtraLarge();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyBase.java
index aae3e95..c0e9211 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyBase.java
@@ -42,4 +42,12 @@ public abstract class AbstractUISelectManyBase extends UISelectMany
       return (Object[]) value;
     }
   }
+
+  public abstract Integer getTabIndex();
+
+  public abstract boolean isDisabled();
+
+  public abstract boolean isReadonly();
+
+  public abstract boolean isFocus();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyListbox.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyListbox.java
index ae27222..5e001b0 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyListbox.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyListbox.java
@@ -38,4 +38,6 @@ public abstract class AbstractUISelectManyListbox extends AbstractUISelectManyBa
       return getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + "field";
     }
   }
+
+  public abstract Integer getSize();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyShuttle.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyShuttle.java
index ce20279..b1bb8a5 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyShuttle.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectManyShuttle.java
@@ -37,4 +37,6 @@ public abstract class AbstractUISelectManyShuttle extends AbstractUISelectManyBa
   public boolean isLabelLayoutSkip() {
     return getLabelLayout() == LabelLayout.skip;
   }
+
+  public abstract Integer getSize();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneBase.java
index dc25b2b..9143eb3 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneBase.java
@@ -57,4 +57,10 @@ public abstract class AbstractUISelectOneBase extends javax.faces.component.UISe
   }
 
   public abstract boolean isReadonly();
+
+  public abstract boolean isDisabled();
+
+  public abstract boolean isFocus();
+
+  public abstract Integer getTabIndex();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneListbox.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneListbox.java
index 670d861..c54ebbd 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneListbox.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneListbox.java
@@ -38,4 +38,6 @@ public abstract class AbstractUISelectOneListbox extends AbstractUISelectOneBase
       return getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + "field";
     }
   }
+
+  public abstract Integer getSize();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneRadio.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneRadio.java
index 3eb31c5..403458d 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneRadio.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectOneRadio.java
@@ -29,14 +29,8 @@ public abstract class AbstractUISelectOneRadio extends AbstractUISelectOneBase i
 
   private transient AbstractUISelectReference renderRangeReference;
 
-  public abstract boolean isDisabled();
-
-  public abstract boolean isFocus();
-
   public abstract boolean isInline();
 
-  public abstract Integer getTabIndex();
-
   public abstract String getRenderRange();
 
   @Override
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISeparator.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISeparator.java
index acf9528..0daf3f4 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISeparator.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISeparator.java
@@ -27,4 +27,6 @@ import javax.faces.component.UIComponentBase;
  * {@link org.apache.myfaces.tobago.internal.taglib.component.SeparatorTagDeclaration}
  */
 public abstract class AbstractUISeparator extends UIComponentBase implements Visual {
+
+  public abstract String getLabel();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISheet.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISheet.java
index 8980994..85479ca 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISheet.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISheet.java
@@ -32,6 +32,7 @@ import org.apache.myfaces.tobago.internal.layout.OriginCell;
 import org.apache.myfaces.tobago.internal.util.SortingUtils;
 import org.apache.myfaces.tobago.layout.Measure;
 import org.apache.myfaces.tobago.layout.MeasureList;
+import org.apache.myfaces.tobago.layout.ShowPosition;
 import org.apache.myfaces.tobago.model.ExpandedState;
 import org.apache.myfaces.tobago.model.SelectedState;
 import org.apache.myfaces.tobago.model.SheetState;
@@ -69,6 +70,10 @@ public abstract class AbstractUISheet extends AbstractUIData
 
   private static final Logger LOG = LoggerFactory.getLogger(AbstractUISheet.class);
 
+  /**
+   * @deprecated since 4.4.0.
+   */
+  @Deprecated
   public static final String COMPONENT_TYPE = "org.apache.myfaces.tobago.Data";
 
   public static final String SORTER_ID = "sorter";
@@ -573,4 +578,14 @@ public abstract class AbstractUISheet extends AbstractUIData
   public void setHeaderGrid(final Grid headerGrid) {
     this.headerGrid = headerGrid;
   }
+
+  public abstract boolean isShowDirectLinksArrows();
+
+  public abstract boolean isShowPageRangeArrows();
+
+  public abstract ShowPosition getShowRowRange();
+
+  public abstract ShowPosition getShowPageRange();
+
+  public abstract ShowPosition getShowDirectLinks();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISplitLayout.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISplitLayout.java
index df9e754..1482c3e 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISplitLayout.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISplitLayout.java
@@ -20,6 +20,7 @@
 package org.apache.myfaces.tobago.internal.component;
 
 import org.apache.myfaces.tobago.apt.annotation.Preliminary;
+import org.apache.myfaces.tobago.layout.AlignItems;
 
 import javax.faces.event.ListenerFor;
 import javax.faces.event.PostAddToViewEvent;
@@ -39,4 +40,9 @@ public abstract class AbstractUISplitLayout extends AbstractUIFlexLayout {
 
   // TODO
   private String submittedLayout;
+
+  public AlignItems getAlignItems() {
+    return null; // TBD
+  };
+
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIStyle.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIStyle.java
index 0a3b526..9e561ee 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIStyle.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIStyle.java
@@ -102,6 +102,7 @@ public abstract class AbstractUIStyle extends UIComponentBase {
   }
 
   public abstract String getSelector();
+  public abstract void setSelector(String selector);
 
   public abstract Measure getPaddingRight();
 
@@ -110,6 +111,7 @@ public abstract class AbstractUIStyle extends UIComponentBase {
   public abstract Measure getMarginRight();
 
   public abstract String getFile();
+  public abstract void setFile(String file);
 
   public abstract Measure getPaddingBottom();
 
@@ -156,6 +158,7 @@ public abstract class AbstractUIStyle extends UIComponentBase {
   public abstract Measure getMarginTop();
 
   public abstract String getBackgroundImage();
+  public abstract void setBackgroundImage(String backgroundImage);
 
   public abstract Number getFlexGrow();
   public abstract void setFlexGrow(Number flexGrow);
@@ -167,11 +170,15 @@ public abstract class AbstractUIStyle extends UIComponentBase {
   public abstract void setFlexBasis(Measure flexBasis);
 
   public abstract String getGridTemplateColumns();
+  public abstract void setGridTemplateColumns(String gridTemplateColumns);
 
   public abstract String getGridTemplateRows();
+  public abstract void setGridTemplateRows(String gridTemplateRows);
 
   public abstract GridSpan getGridColumn();
+  public abstract void setGridColumn(GridSpan gridColumn);
 
   public abstract GridSpan getGridRow();
+  public abstract void setGridRow(GridSpan gridRow);
 
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISuggest.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISuggest.java
index 8256406..446176a 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISuggest.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISuggest.java
@@ -37,6 +37,10 @@ public abstract class AbstractUISuggest
 
   private static final Logger LOG = LoggerFactory.getLogger(AbstractUISuggest.class);
 
+  /**
+   * @deprecated since 4.4.0.
+   */
+  @Deprecated
   public static final String COMPONENT_TYPE = "org.apache.myfaces.tobago.Suggest";
   public static final String COMPONENT_FAMILY = "org.apache.myfaces.tobago.Suggest";
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITab.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITab.java
index 95b8315..96e2f27 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITab.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITab.java
@@ -19,13 +19,20 @@
 
 package org.apache.myfaces.tobago.internal.component;
 
+import org.apache.myfaces.tobago.component.SupportsAccessKey;
+
+import javax.faces.component.NamingContainer;
 import javax.faces.component.behavior.ClientBehaviorHolder;
 
 /**
  * {@link org.apache.myfaces.tobago.internal.taglib.component.TabTagDeclaration}
  */
-public abstract class AbstractUITab extends AbstractUIPanelBase implements ClientBehaviorHolder {
+public abstract class AbstractUITab
+    extends AbstractUIPanelBase implements ClientBehaviorHolder, SupportsAccessKey, NamingContainer {
 
   public abstract String getLabel();
 
+  public abstract String getImage();
+
+  public abstract boolean isDisabled();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java
index 353cb88..4b793ff 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITabGroup.java
@@ -20,7 +20,6 @@
 package org.apache.myfaces.tobago.internal.component;
 
 import org.apache.myfaces.tobago.component.Attributes;
-import org.apache.myfaces.tobago.component.UITab;
 import org.apache.myfaces.tobago.event.TabChangeEvent;
 import org.apache.myfaces.tobago.event.TabChangeListener;
 import org.apache.myfaces.tobago.event.TabChangeSource;
@@ -111,8 +110,8 @@ public abstract class AbstractUITabGroup extends AbstractUIPanelBase
       }
       int index = 0;
       for (final UIComponent child : getChildren()) {
-        if (child instanceof UITab) {
-          final UITab tab = (UITab) child;
+        if (child instanceof AbstractUITab) {
+          final AbstractUITab tab = (AbstractUITab) child;
           if (tab.isRendered()) {
             if (getRenderedIndex() == index) {
               tab.processDecodes(context);
@@ -230,6 +229,8 @@ public abstract class AbstractUITabGroup extends AbstractUIPanelBase
 
   public abstract void setRenderedIndex(Integer index);
 
+  public abstract boolean isShowNavigationBar();
+
   public abstract Integer getSelectedIndex();
 
   public abstract void setSelectedIndex(Integer index);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITextarea.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITextarea.java
index 451555b..b030f1e 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITextarea.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITextarea.java
@@ -27,4 +27,6 @@ import org.apache.myfaces.tobago.sanitizer.SanitizeMode;
 public abstract class AbstractUITextarea extends AbstractUIInput {
 
   public abstract SanitizeMode getSanitize();
+
+  public abstract Integer getRows();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeListbox.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeIcon.java
similarity index 85%
copy from tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeListbox.java
copy to tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeIcon.java
index 818cbd8..5a2b85a 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeListbox.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeIcon.java
@@ -20,12 +20,11 @@
 package org.apache.myfaces.tobago.internal.component;
 
 /**
- * {@link org.apache.myfaces.tobago.internal.taglib.component.TreeListboxTagDeclaration}
+ * {@link org.apache.myfaces.tobago.internal.taglib.component.TreeIconTagDeclaration}
  */
-public abstract class AbstractUITreeListbox extends AbstractUITree {
+public abstract class AbstractUITreeIcon extends AbstractUIImage {
 
-  @Override
-  public boolean isShowRoot() {
-    return false;
-  }
+ public abstract String getOpen();
+
+ public abstract String getClosed();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeIndent.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeIndent.java
index 7446a14..0836fba 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeIndent.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeIndent.java
@@ -27,4 +27,6 @@ import javax.faces.component.UIGraphic;
  * {@link org.apache.myfaces.tobago.internal.taglib.component.TreeIndentTagDeclaration}
  */
 public abstract class AbstractUITreeIndent extends UIGraphic implements Visual {
+
+  public abstract boolean isShowJunctions();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFooter.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeLabel.java
similarity index 84%
copy from tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFooter.java
copy to tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeLabel.java
index fddd8c5..3b5fd6e 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFooter.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeLabel.java
@@ -19,5 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.component;
 
-public abstract class AbstractUIFooter extends AbstractUIPanelBase {
+/**
+ * {@link org.apache.myfaces.tobago.internal.taglib.component.LabelTagDeclaration}
+ */
+public abstract class AbstractUITreeLabel extends AbstractUILabelBase {
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeListbox.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeListbox.java
index 818cbd8..5e874b4 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeListbox.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeListbox.java
@@ -28,4 +28,6 @@ public abstract class AbstractUITreeListbox extends AbstractUITree {
   public boolean isShowRoot() {
     return false;
   }
+
+  public abstract Integer getSize();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeSelect.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeSelect.java
index 5aa2940..2cd0332 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeSelect.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeSelect.java
@@ -46,4 +46,8 @@ public abstract class AbstractUITreeSelect extends UISelectBoolean implements Vi
     final ValueExpression valueExpression = getValueExpression(Attributes.value.getName());
     return valueExpression == null;
   }
+
+  public abstract String getLabel();
+
+  public abstract boolean isShowCheckbox();
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/Command.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/Command.java
index 07cb7db..79e625e 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/Command.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/Command.java
@@ -20,8 +20,8 @@
 package org.apache.myfaces.tobago.internal.renderkit;
 
 import org.apache.myfaces.tobago.component.Attributes;
-import org.apache.myfaces.tobago.component.UIForm;
 import org.apache.myfaces.tobago.internal.component.AbstractUICommand;
+import org.apache.myfaces.tobago.internal.component.AbstractUIForm;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.TobagoClientBehaviorRenderer;
 import org.apache.myfaces.tobago.internal.util.StringUtils;
 import org.apache.myfaces.tobago.util.ComponentUtils;
@@ -87,7 +87,7 @@ public class Command {
 
   public Command(final FacesContext facesContext, final UIComponent facetComponent, final String focusId) {
     final UIComponent component;
-    if (facetComponent instanceof UIForm && facetComponent.getChildCount() == 1) {
+    if (facetComponent instanceof AbstractUIForm && facetComponent.getChildCount() == 1) {
       LOG.warn("Please don't use a form, but a command with immediate=true instead.");
       component = facetComponent.getChildren().get(0);
     } else {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/BarRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/BarRenderer.java
index 47e1c8a..cf15c32 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/BarRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/BarRenderer.java
@@ -21,8 +21,8 @@ package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.component.Facets;
 import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.UIBar;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUIBar;
 import org.apache.myfaces.tobago.internal.component.AbstractUIForm;
 import org.apache.myfaces.tobago.internal.component.AbstractUILinks;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
@@ -48,7 +48,7 @@ public class BarRenderer extends RendererBase {
   @Override
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UIBar bar = (UIBar) component;
+    final AbstractUIBar bar = (AbstractUIBar) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
     final String clientId = bar.getClientId(facesContext);
@@ -131,7 +131,7 @@ public class BarRenderer extends RendererBase {
 
   @Override
   public void encodeEnd(final FacesContext facesContext, final UIComponent component) throws IOException {
-    final UIBar bar = (UIBar) component;
+    final AbstractUIBar bar = (AbstractUIBar) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final UIComponent after = ComponentUtils.getFacet(bar, Facets.after);
 
@@ -149,7 +149,7 @@ public class BarRenderer extends RendererBase {
   }
 
   private void encodeOpener(
-      final FacesContext facesContext, final UIBar bar, final TobagoResponseWriter writer, final String navbarId)
+      final FacesContext facesContext, final AbstractUIBar bar, final TobagoResponseWriter writer, final String navbarId)
       throws IOException {
     final boolean togglerLeft = bar.getMarkup() != null && bar.getMarkup().contains(Markup.TOGGLER_LEFT);
     final UIComponent brand = ComponentUtils.getFacet(bar, Facets.brand);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ColumnRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ColumnRenderer.java
index d058176..cfd7a18 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ColumnRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ColumnRenderer.java
@@ -19,9 +19,9 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UIColumn;
-import org.apache.myfaces.tobago.component.UILink;
-import org.apache.myfaces.tobago.component.UIOut;
+import org.apache.myfaces.tobago.internal.component.AbstractUIColumn;
+import org.apache.myfaces.tobago.internal.component.AbstractUILink;
+import org.apache.myfaces.tobago.internal.component.AbstractUIOut;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
 
 import javax.faces.component.UIComponent;
@@ -36,9 +36,9 @@ public class ColumnRenderer extends RendererBase {
    * Pure is needed for &lt;tc:panel>,  &lt;tc:in>, etc.<br/>
    * Pure is not needed for  &lt;tc:out> and &lt;tc:link>
    */
-  private boolean isPure(final UIColumn column) {
+  private boolean isPure(final AbstractUIColumn column) {
     for (final UIComponent child : column.getChildren()) {
-      if (!(child instanceof UIOut) && !(child instanceof UILink)) {
+      if (!(child instanceof AbstractUIOut) && !(child instanceof AbstractUILink)) {
         return true;
       }
     }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FlexLayoutRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FlexLayoutRenderer.java
index 925298c..4fa2e62 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FlexLayoutRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FlexLayoutRenderer.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UIFlexLayout;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUIFlexLayout;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
@@ -37,7 +37,7 @@ public class FlexLayoutRenderer extends RendererBase {
 
   @Override
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
-    final UIFlexLayout flexLayout = (UIFlexLayout) component;
+    final AbstractUIFlexLayout flexLayout = (AbstractUIFlexLayout) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final Markup markup = flexLayout.getMarkup();
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FlowLayoutRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FlowLayoutRenderer.java
index 8e61b7e..1ac1742 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FlowLayoutRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FlowLayoutRenderer.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UIFlowLayout;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUIFlowLayout;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.layout.TextAlign;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
@@ -40,7 +40,7 @@ public class FlowLayoutRenderer extends RendererBase {
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
 
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
-    final UIFlowLayout flowLayout = (UIFlowLayout) component;
+    final AbstractUIFlowLayout flowLayout = (AbstractUIFlowLayout) component;
     final Markup markup = flowLayout.getMarkup();
 
     writer.startElement(HtmlElements.DIV);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FooterRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FooterRenderer.java
index ba086d6..d9adda3 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FooterRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FooterRenderer.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UIFooter;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUIFooter;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
@@ -40,7 +40,7 @@ public class FooterRenderer extends RendererBase {
   @Override
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
-    final UIFooter footer = (UIFooter) component;
+    final AbstractUIFooter footer = (AbstractUIFooter) component;
     final Markup markup = footer.getMarkup();
     writer.startElement(HtmlElements.FOOTER);
     writer.writeIdAttribute(component.getClientId(facesContext));
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/GridLayoutRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/GridLayoutRenderer.java
index 445265c..ecfa366 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/GridLayoutRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/GridLayoutRenderer.java
@@ -20,9 +20,10 @@
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.UIStyle;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIGridLayout;
+import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.layout.MeasureList;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
@@ -57,8 +58,8 @@ public class GridLayoutRenderer extends RendererBase {
     final MeasureList columns = MeasureList.parse(gridLayout.getColumns());
     final MeasureList rows = MeasureList.parse(gridLayout.getRows());
 
-    final UIStyle style = (UIStyle) facesContext.getApplication().createComponent(
-        facesContext, UIStyle.COMPONENT_TYPE, RendererTypes.Style.name());
+    final AbstractUIStyle style = (AbstractUIStyle) facesContext.getApplication().createComponent(
+        facesContext, Tags.style.componentType(), RendererTypes.Style.name());
     style.setTransient(true);
 
     style.setGridTemplateColumns(columns.serialize());
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/HeaderRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/HeaderRenderer.java
index 1ae8f2c..7c18a53 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/HeaderRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/HeaderRenderer.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UIHeader;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUIHeader;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
@@ -40,7 +40,7 @@ public class HeaderRenderer extends RendererBase {
   @Override
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
-    final UIHeader header = (UIHeader) component;
+    final AbstractUIHeader header = (AbstractUIHeader) component;
     final Markup markup = header.getMarkup();
     writer.startElement(HtmlElements.HEADER);
     writer.writeIdAttribute(component.getClientId(facesContext));
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelRenderer.java
index d1bfd10..5d2d06d 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelRenderer.java
@@ -20,8 +20,8 @@
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.component.SupportFieldId;
-import org.apache.myfaces.tobago.component.UILabel;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUILabel;
 import org.apache.myfaces.tobago.internal.util.AccessKeyLogger;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
@@ -55,7 +55,7 @@ public class LabelRenderer extends RendererBase implements ComponentSystemEventL
   @Override
   public void encodeEnd(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UILabel label = (UILabel) component;
+    final AbstractUILabel label = (AbstractUILabel) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final UIComponent corresponding = ComponentUtils.findFor(label);
     final String forId;
@@ -101,7 +101,7 @@ public class LabelRenderer extends RendererBase implements ComponentSystemEventL
    * Can be overwritten in other themes.
    */
   protected void encodeTextContent(
-      final FacesContext facesContext, final TobagoResponseWriter writer, final UILabel component)
+      final FacesContext facesContext, final TobagoResponseWriter writer, final AbstractUILabel component)
       throws IOException {
 
     final LabelWithAccessKey label = new LabelWithAccessKey(component);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessagesRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessagesRenderer.java
index 4d177f0..e0db233 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessagesRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessagesRenderer.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UIMessages;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUIMessages;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
@@ -51,7 +51,7 @@ public class MessagesRenderer extends RendererBase {
   @Override
   public void encodeEnd(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UIMessages messages = (UIMessages) component;
+    final AbstractUIMessages messages = (AbstractUIMessages) component;
 
     if (messages.isConfirmation()) {
       LOG.warn("'confirmation' is currently not supported for tc:messages!");
@@ -62,7 +62,7 @@ public class MessagesRenderer extends RendererBase {
     if (LOG.isDebugEnabled()) {
       LOG.debug("facesContext is " + facesContext.getClass().getName());
     }
-    final List<UIMessages.Item> messageList = messages.createMessageList(facesContext);
+    final List<AbstractUIMessages.Item> messageList = messages.createMessageList(facesContext);
 
     // with id
       /*String focusId = null;
@@ -87,7 +87,7 @@ public class MessagesRenderer extends RendererBase {
     FacesMessage.Severity lastSeverity = null;
     boolean first = true;
 
-    for (final UIMessages.Item item : messageList) {
+    for (final AbstractUIMessages.Item item : messageList) {
       final FacesMessage message = item.getFacesMessage();
       final FacesMessage.Severity severity = message.getSeverity();
 
@@ -148,7 +148,7 @@ public class MessagesRenderer extends RendererBase {
   }
 
   private void encodeMessage(
-      final TobagoResponseWriter writer, final UIMessages messages, final FacesMessage message, final String clientId)
+      final TobagoResponseWriter writer, final AbstractUIMessages messages, final FacesMessage message, final String clientId)
       throws IOException {
 
     final String summary = message.getSummary();
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ObjectRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ObjectRenderer.java
index d1b43d9..42d4ae0 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ObjectRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ObjectRenderer.java
@@ -19,7 +19,7 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UIObject;
+import org.apache.myfaces.tobago.internal.component.AbstractUIObject;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.context.TobagoResourceBundle;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
@@ -38,7 +38,7 @@ import java.io.IOException;
 public class ObjectRenderer extends RendererBase {
   @Override
   public void encodeEnd(final FacesContext facesContext, final UIComponent component) throws IOException {
-    final UIObject object = (UIObject) component;
+    final AbstractUIObject object = (AbstractUIObject) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final Markup markup = object.getMarkup();
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/OutRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/OutRenderer.java
index c1c912a..6eb6304 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/OutRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/OutRenderer.java
@@ -19,7 +19,6 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UIOut;
 import org.apache.myfaces.tobago.config.TobagoConfig;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIOut;
@@ -107,7 +106,7 @@ public class OutRenderer extends MessageLayoutRendererBase {
   @Override
   public void encodeEndField(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UIOut out = (UIOut) component;
+    final AbstractUIOut out = (AbstractUIOut) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final boolean plain = out.isPlain() || out.isCompact() || !out.isCreateSpan();
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PageRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PageRenderer.java
index b754759..9fbe23d 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PageRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PageRenderer.java
@@ -21,10 +21,7 @@ package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.component.Attributes;
 import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.UIMeta;
-import org.apache.myfaces.tobago.component.UIPage;
-import org.apache.myfaces.tobago.component.UIScript;
-import org.apache.myfaces.tobago.component.UIStyle;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.config.TobagoConfig;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.context.Theme;
@@ -104,7 +101,7 @@ public class PageRenderer extends RendererBase {
   @Override
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UIPage page = (UIPage) component;
+    final AbstractUIPage page = (AbstractUIPage) component;
     final TobagoConfig tobagoConfig = TobagoConfig.getInstance(facesContext);
     final TobagoContext tobagoContext = TobagoContext.getInstance(facesContext);
 
@@ -195,11 +192,11 @@ public class PageRenderer extends RendererBase {
     writer.endElement(HtmlElements.TITLE);
 
     // style files from theme
-    UIStyle style = null;
+    AbstractUIStyle style = null;
     for (final String styleFile : theme.getStyleResources(productionMode)) {
       if (style == null) {
-        style = (UIStyle) facesContext.getApplication()
-           .createComponent(facesContext, UIStyle.COMPONENT_TYPE, RendererTypes.Style.name());
+        style = (AbstractUIStyle) facesContext.getApplication()
+           .createComponent(facesContext, Tags.style.componentType(), RendererTypes.Style.name());
         style.setTransient(true);
       }
       style.setFile(contextPath + styleFile);
@@ -227,11 +224,11 @@ public class PageRenderer extends RendererBase {
     }
 
     // script files from theme
-    UIScript script = null;
+    AbstractUIScript script = null;
     for (final String scriptFile : theme.getScriptResources(productionMode)) {
       if (script == null) {
-        script = (UIScript) facesContext.getApplication()
-            .createComponent(facesContext, UIScript.COMPONENT_TYPE, RendererTypes.Script.name());
+        script = (AbstractUIScript) facesContext.getApplication()
+            .createComponent(facesContext, Tags.script.componentType(), RendererTypes.Script.name());
         script.setTransient(true);
       }
       script.setFile(contextPath + scriptFile);
@@ -331,7 +328,7 @@ public class PageRenderer extends RendererBase {
   @Override
   public void encodeEnd(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UIPage page = (UIPage) component;
+    final AbstractUIPage page = (AbstractUIPage) component;
     final UIViewRoot viewRoot = facesContext.getViewRoot();
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final String clientId = page.getClientId(facesContext);
@@ -377,7 +374,7 @@ public class PageRenderer extends RendererBase {
     AccessKeyLogger.logStatus(facesContext);
   }
 
-  private String getMethod(final UIPage page) {
+  private String getMethod(final AbstractUIPage page) {
     return ComponentUtils.getStringAttribute(page, Attributes.method, "post");
   }
 
@@ -423,8 +420,8 @@ public class PageRenderer extends RendererBase {
       }
 
       if (!containsNameViewport(metas)) {
-        final UIMeta viewportMeta = (UIMeta) facesContext.getApplication()
-            .createComponent(facesContext, UIMeta.COMPONENT_TYPE, RendererTypes.Meta.name());
+        final AbstractUIMeta viewportMeta = (AbstractUIMeta) facesContext.getApplication()
+            .createComponent(facesContext, Tags.meta.componentType(), RendererTypes.Meta.name());
         viewportMeta.setName("viewport");
         viewportMeta.setContent("width=device-width, initial-scale=1.0");
         viewportMeta.setTransient(true);
@@ -432,8 +429,8 @@ public class PageRenderer extends RendererBase {
       }
 
       if (!containsCharset(metas)) {
-        final UIMeta charsetMeta = (UIMeta) facesContext.getApplication()
-            .createComponent(facesContext, UIMeta.COMPONENT_TYPE, RendererTypes.Meta.name());
+        final AbstractUIMeta charsetMeta = (AbstractUIMeta) facesContext.getApplication()
+            .createComponent(facesContext, Tags.meta.componentType(), RendererTypes.Meta.name());
         charsetMeta.setCharset(charset);
         charsetMeta.setTransient(true);
         metas.add(0, charsetMeta);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PanelRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PanelRenderer.java
index a1296f1..453f88f 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PanelRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PanelRenderer.java
@@ -20,9 +20,9 @@
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.component.Facets;
-import org.apache.myfaces.tobago.component.UIPanel;
-import org.apache.myfaces.tobago.component.UIReload;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUIPanel;
+import org.apache.myfaces.tobago.internal.component.AbstractUIReload;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.internal.util.RenderUtils;
@@ -43,7 +43,7 @@ public class PanelRenderer extends PanelRendererBase {
   @Override
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UIPanel panel = (UIPanel) component;
+    final AbstractUIPanel panel = (AbstractUIPanel) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final String clientId = panel.getClientId(facesContext);
     final boolean collapsed = panel.isCollapsed();
@@ -67,8 +67,8 @@ public class PanelRenderer extends PanelRendererBase {
     }
 
     final UIComponent reloadFacet = ComponentUtils.getFacet(panel, Facets.reload);
-    if (reloadFacet instanceof UIReload && reloadFacet.isRendered()) {
-      final UIReload update = (UIReload) reloadFacet;
+    if (reloadFacet instanceof AbstractUIReload && reloadFacet.isRendered()) {
+      final AbstractUIReload update = (AbstractUIReload) reloadFacet;
       writer.writeAttribute(DataAttributes.RELOAD, Integer.toString(update.getFrequency()), false);
     }
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ProgressRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ProgressRenderer.java
index bdc65cf..f782766 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ProgressRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ProgressRenderer.java
@@ -20,9 +20,10 @@
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.UIStyle;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIProgress;
+import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.internal.util.RenderUtils;
@@ -77,8 +78,8 @@ public class ProgressRenderer extends RendererBase {
     writer.writeAttribute(Arias.VALUEMAX, 100);
     writer.writeAttribute(Arias.VALUENOW, String.valueOf((int) percent * 100), false);
 
-    final UIStyle style = (UIStyle) facesContext.getApplication()
-        .createComponent(facesContext, UIStyle.COMPONENT_TYPE, RendererTypes.Style.name());
+    final AbstractUIStyle style = (AbstractUIStyle) facesContext.getApplication()
+        .createComponent(facesContext, Tags.style.componentType(), RendererTypes.Style.name());
     style.setTransient(true);
     style.setSelector(StyleRenderUtils.encodeIdSelector(clientId) + ">." + BootstrapClass.PROGRESS_BAR.getName());
     style.setWidth(new Measure(percent * 100, Measure.Unit.PERCENT));
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SegmentLayoutRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SegmentLayoutRenderer.java
index ed00d1e..10f1263 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SegmentLayoutRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SegmentLayoutRenderer.java
@@ -21,7 +21,6 @@ package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.component.LabelLayout;
 import org.apache.myfaces.tobago.component.SupportsLabelLayout;
-import org.apache.myfaces.tobago.component.UISegmentLayout;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUISegmentLayout;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
@@ -71,7 +70,7 @@ public class SegmentLayoutRenderer extends RendererBase {
   @Override
   public void encodeChildren(final FacesContext facesContext, final UIComponent component) throws IOException {
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
-    final UISegmentLayout segmentLayout = (UISegmentLayout) component;
+    final AbstractUISegmentLayout segmentLayout = (AbstractUISegmentLayout) component;
 
     if (!segmentLayout.isRendered()) {
       return;
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java
index 644eddb..78abbd5 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UISelectManyListbox;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUISelectManyListbox;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.internal.util.RenderUtils;
@@ -47,7 +47,7 @@ public class SelectManyListboxRenderer extends SelectManyRendererBase {
 
   @Override
   public void encodeBeginField(final FacesContext facesContext, final UIComponent component) throws IOException {
-    final UISelectManyListbox select = (UISelectManyListbox) component;
+    final AbstractUISelectManyListbox select = (AbstractUISelectManyListbox) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
     final String clientId = select.getClientId(facesContext);
@@ -96,7 +96,7 @@ public class SelectManyListboxRenderer extends SelectManyRendererBase {
 
   @Override
   protected String getFieldId(final FacesContext facesContext, final UIComponent component) {
-    final UISelectManyListbox select = (UISelectManyListbox) component;
+    final AbstractUISelectManyListbox select = (AbstractUISelectManyListbox) component;
     return select.getFieldId(facesContext);
   }
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRendererBase.java
index 7f99f49..75aa62d 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRendererBase.java
@@ -19,6 +19,7 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
+import org.apache.myfaces.tobago.internal.component.AbstractUISelectManyBase;
 import org.apache.myfaces.tobago.internal.util.ArrayUtils;
 import org.apache.myfaces.tobago.internal.util.RenderUtils;
 import org.apache.myfaces.tobago.util.ComponentUtils;
@@ -64,7 +65,7 @@ public abstract class SelectManyRendererBase extends MessageLayoutRendererBase {
       return;
     }
 
-    final UISelectMany select = (UISelectMany) component;
+    final AbstractUISelectManyBase select = (AbstractUISelectManyBase) component;
 
     String[] newValues =
         facesContext.getExternalContext().getRequestParameterValuesMap().get(select.getClientId(facesContext));
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java
index 44c5756..27d1fdf 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UISelectManyShuttle;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUISelectManyShuttle;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.internal.util.RenderUtils;
@@ -47,7 +47,7 @@ public class SelectManyShuttleRenderer extends SelectManyRendererBase {
   public void encodeBeginField(final FacesContext facesContext, final UIComponent component) throws IOException {
 
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
-    final UISelectManyShuttle select = (UISelectManyShuttle) component;
+    final AbstractUISelectManyShuttle select = (AbstractUISelectManyShuttle) component;
     final String clientId = select.getClientId(facesContext);
     final Markup markup = select.getMarkup();
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceInsideInRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceInsideInRenderer.java
index ac0d7ac..ff16632 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceInsideInRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceInsideInRenderer.java
@@ -19,7 +19,7 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UISelectOneChoice;
+import org.apache.myfaces.tobago.internal.component.AbstractUISelectOneChoice;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
 import org.apache.myfaces.tobago.renderkit.css.CssItem;
 
@@ -40,7 +40,7 @@ public class SelectOneChoiceInsideInRenderer extends SelectOneChoiceRenderer {
   }
 
   @Override
-  protected CssItem[] getCssItems(final FacesContext facesContext, final UISelectOneChoice select) {
+  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectOneChoice select) {
     return new CssItem[]{BootstrapClass.CUSTOM_SELECT};
   }
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java
index 1b4b444..70647ee 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UISelectOneChoice;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUISelectOneChoice;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.internal.util.RenderUtils;
@@ -48,7 +48,7 @@ public class SelectOneChoiceRenderer extends SelectOneRendererBase {
 
   @Override
   protected void encodeBeginField(final FacesContext facesContext, final UIComponent component) throws IOException {
-    final UISelectOneChoice select = (UISelectOneChoice) component;
+    final AbstractUISelectOneChoice select = (AbstractUISelectOneChoice) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
     final String clientId = select.getClientId(facesContext);
@@ -90,11 +90,11 @@ public class SelectOneChoiceRenderer extends SelectOneRendererBase {
 
   @Override
   protected String getFieldId(final FacesContext facesContext, final UIComponent component) {
-    final UISelectOneChoice select = (UISelectOneChoice) component;
+    final AbstractUISelectOneChoice select = (AbstractUISelectOneChoice) component;
     return select.getFieldId(facesContext);
   }
 
-  protected CssItem[] getCssItems(final FacesContext facesContext, final UISelectOneChoice select) {
+  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectOneChoice select) {
     return new CssItem[]{BootstrapClass.FORM_CONTROL};
   }
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java
index ed2602f..bf4fd08 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UISelectOneListbox;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUISelectOneListbox;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.internal.util.RenderUtils;
@@ -47,7 +47,7 @@ public class SelectOneListboxRenderer extends SelectOneRendererBase {
 
   @Override
   public void encodeBeginField(final FacesContext facesContext, final UIComponent component) throws IOException {
-    final UISelectOneListbox select = (UISelectOneListbox) component;
+    final AbstractUISelectOneListbox select = (AbstractUISelectOneListbox) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
     final String clientId = select.getClientId(facesContext);
@@ -92,7 +92,7 @@ public class SelectOneListboxRenderer extends SelectOneRendererBase {
 
   @Override
   protected String getFieldId(final FacesContext facesContext, final UIComponent component) {
-    final UISelectOneListbox select = (UISelectOneListbox) component;
+    final AbstractUISelectOneListbox select = (AbstractUISelectOneListbox) component;
     return select.getFieldId(facesContext);
   }
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRendererBase.java
index 72057ca..3d393a1 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRendererBase.java
@@ -19,13 +19,13 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
+import org.apache.myfaces.tobago.internal.component.AbstractUISelectOneBase;
 import org.apache.myfaces.tobago.internal.util.RenderUtils;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.faces.component.UIComponent;
-import javax.faces.component.UISelectOne;
 import javax.faces.context.FacesContext;
 
 public abstract class SelectOneRendererBase extends MessageLayoutRendererBase {
@@ -38,7 +38,7 @@ public abstract class SelectOneRendererBase extends MessageLayoutRendererBase {
       return;
     }
 
-    final UISelectOne select = (UISelectOne) component;
+    final AbstractUISelectOneBase select = (AbstractUISelectOneBase) component;
 
     final String clientId = select.getClientId(facesContext);
     final Object newValue =
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SeparatorInsideCommandRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SeparatorInsideCommandRenderer.java
index c9e490b..9a53290 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SeparatorInsideCommandRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SeparatorInsideCommandRenderer.java
@@ -19,7 +19,7 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UISeparator;
+import org.apache.myfaces.tobago.internal.component.AbstractUISeparator;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
@@ -35,7 +35,7 @@ public class SeparatorInsideCommandRenderer extends SeparatorRenderer {
 
   @Override
   public void encodeEnd(final FacesContext facesContext, final UIComponent component) throws IOException {
-    final UISeparator separator = (UISeparator) component;
+    final AbstractUISeparator separator = (AbstractUISeparator) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final String clientId = separator.getClientId(facesContext);
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SeparatorRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SeparatorRenderer.java
index 0dc4855..234f5ec 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SeparatorRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SeparatorRenderer.java
@@ -20,9 +20,9 @@
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.component.Facets;
-import org.apache.myfaces.tobago.component.UILabel;
-import org.apache.myfaces.tobago.component.UISeparator;
 import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUILabel;
+import org.apache.myfaces.tobago.internal.component.AbstractUISeparator;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
@@ -40,7 +40,7 @@ public class SeparatorRenderer extends RendererBase {
   @Override
   public void encodeEnd(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UISeparator separator = (UISeparator) component;
+    final AbstractUISeparator separator = (AbstractUISeparator) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final String clientId = separator.getClientId(facesContext);
     final String label = getLabel(separator);
@@ -68,11 +68,11 @@ public class SeparatorRenderer extends RendererBase {
     }
   }
 
-  private String getLabel(final UISeparator separator) {
+  private String getLabel(final AbstractUISeparator separator) {
     String label = separator.getLabel();
     final UIComponent facet = ComponentUtils.getFacet(separator, Facets.label);
     if (label == null && facet != null) {
-      label = String.valueOf(((UILabel) facet).getValue());
+      label = String.valueOf(((AbstractUILabel) facet).getValue());
     }
     return label;
   }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SheetRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SheetRenderer.java
index 5830322..179a375 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SheetRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SheetRenderer.java
@@ -23,12 +23,7 @@ import org.apache.myfaces.tobago.component.Attributes;
 import org.apache.myfaces.tobago.component.Facets;
 import org.apache.myfaces.tobago.component.LabelLayout;
 import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.UIColumnSelector;
-import org.apache.myfaces.tobago.component.UILink;
-import org.apache.myfaces.tobago.component.UIOut;
-import org.apache.myfaces.tobago.component.UIPanel;
-import org.apache.myfaces.tobago.component.UIReload;
-import org.apache.myfaces.tobago.component.UISheet;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.context.TobagoResourceBundle;
 import org.apache.myfaces.tobago.event.PageActionEvent;
@@ -38,7 +33,9 @@ import org.apache.myfaces.tobago.internal.component.AbstractUIColumn;
 import org.apache.myfaces.tobago.internal.component.AbstractUIColumnBase;
 import org.apache.myfaces.tobago.internal.component.AbstractUIColumnSelector;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
+import org.apache.myfaces.tobago.internal.component.AbstractUILink;
 import org.apache.myfaces.tobago.internal.component.AbstractUIOut;
+import org.apache.myfaces.tobago.internal.component.AbstractUIReload;
 import org.apache.myfaces.tobago.internal.component.AbstractUIRow;
 import org.apache.myfaces.tobago.internal.component.AbstractUISheet;
 import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
@@ -105,7 +102,7 @@ public class SheetRenderer extends RendererBase {
   @Override
   public void decode(final FacesContext facesContext, final UIComponent component) {
 
-    final UISheet sheet = (UISheet) component;
+    final AbstractUISheet sheet = (AbstractUISheet) component;
     final List<AbstractUIColumnBase> columns = sheet.getAllColumns();
     final String clientId = sheet.getClientId(facesContext);
 
@@ -156,7 +153,7 @@ public class SheetRenderer extends RendererBase {
       if (sortable) {
         final String sourceId = facesContext.getExternalContext().getRequestParameterMap().get("javax.faces.source");
         final String columnId = column.getClientId(facesContext);
-        final String sorterId = columnId + "_" + UISheet.SORTER_ID;
+        final String sorterId = columnId + "_" + AbstractUISheet.SORTER_ID;
 
         if (sorterId.equals(sourceId)) {
           final UIData data = (UIData) column.getParent();
@@ -167,7 +164,7 @@ public class SheetRenderer extends RendererBase {
   }
 
 
-  private void decodeSheetAction(final FacesContext facesContext, final UISheet component) {
+  private void decodeSheetAction(final FacesContext facesContext, final AbstractUISheet component) {
     final String sourceId = facesContext.getExternalContext().getRequestParameterMap().get("javax.faces.source");
 
     final String clientId = component.getClientId(facesContext);
@@ -225,21 +222,21 @@ public class SheetRenderer extends RendererBase {
   @Override
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UISheet sheet = (UISheet) component;
+    final AbstractUISheet sheet = (AbstractUISheet) component;
     final String sheetId = sheet.getClientId(facesContext);
     final Markup markup = sheet.getMarkup();
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
     UIComponent header = sheet.getHeader();
     if (header == null) {
-      header = ComponentUtils.createComponent(facesContext, UIPanel.COMPONENT_TYPE, null, "_header");
+      header = ComponentUtils.createComponent(facesContext, Tags.panel.componentType(), null, "_header");
       header.setTransient(true);
       final List<AbstractUIColumnBase> columns = sheet.getAllColumns();
       int i = 0;
       for (final AbstractUIColumnBase column : columns) {
         if (!(column instanceof AbstractUIRow)) {
           final AbstractUIOut out = (AbstractUIOut) ComponentUtils.createComponent(
-              facesContext, UIOut.COMPONENT_TYPE, RendererTypes.Out, "_col" + i);
+              facesContext, Tags.out.componentType(), RendererTypes.Out, "_col" + i);
 //        out.setValue(column.getLabel());
           out.setTransient(true);
           ValueExpression valueExpression = column.getValueExpression(Attributes.label.getName());
@@ -274,8 +271,8 @@ public class SheetRenderer extends RendererBase {
         sheet.getCustomClass(),
         markup != null && markup.contains(Markup.SPREAD) ? TobagoClass.SPREAD : null);
     final UIComponent facetReload = ComponentUtils.getFacet(sheet, Facets.reload);
-    if (facetReload != null && facetReload instanceof UIReload && facetReload.isRendered()) {
-      final UIReload update = (UIReload) facetReload;
+    if (facetReload != null && facetReload instanceof AbstractUIReload && facetReload.isRendered()) {
+      final AbstractUIReload update = (AbstractUIReload) facetReload;
       writer.writeAttribute(DataAttributes.RELOAD, update.getFrequency());
     }
 // todo    writer.writeCommandMapAttribute(JsonUtils.encode(RenderUtils.getBehaviorCommands(facesContext, sheet)));
@@ -296,7 +293,7 @@ public class SheetRenderer extends RendererBase {
 
   @Override
   public void encodeChildren(final FacesContext facesContext, final UIComponent component) throws IOException {
-    final UISheet sheet = (UISheet) component;
+    final AbstractUISheet sheet = (AbstractUISheet) component;
     for (final UIComponent child : sheet.getChildren()) {
       if (child instanceof AbstractUIStyle) {
         child.encodeAll(facesContext);
@@ -307,7 +304,7 @@ public class SheetRenderer extends RendererBase {
   @Override
   public void encodeEnd(final FacesContext facesContext, final UIComponent uiComponent) throws IOException {
 
-    final UISheet sheet = (UISheet) uiComponent;
+    final AbstractUISheet sheet = (AbstractUISheet) uiComponent;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
     final String sheetId = sheet.getClientId(facesContext);
@@ -364,7 +361,7 @@ public class SheetRenderer extends RendererBase {
       // show row range
       final Markup showRowRange = markupForLeftCenterRight(sheet.getShowRowRange());
       if (showRowRange != Markup.NULL) {
-        final UILink command
+        final AbstractUILink command
             = ensurePagingCommand(facesContext, sheet, Facets.pagerRow.name(), SheetAction.toRow.name(), false);
         final String pagerCommandId = command.getClientId(facesContext);
 
@@ -457,7 +454,7 @@ public class SheetRenderer extends RendererBase {
       // show page range
       final Markup showPageRange = markupForLeftCenterRight(sheet.getShowPageRange());
       if (showPageRange != Markup.NULL) {
-        final UILink command
+        final AbstractUILink command
             = ensurePagingCommand(facesContext, sheet, Facets.pagerPage.name(), SheetAction.toPage.name(), false);
         final String pagerCommandId = command.getClientId(facesContext);
 
@@ -557,7 +554,7 @@ public class SheetRenderer extends RendererBase {
   }
 
   private void encodeTableBody(
-      final FacesContext facesContext, final UISheet sheet, final TobagoResponseWriter writer, final String sheetId,
+      final FacesContext facesContext, final AbstractUISheet sheet, final TobagoResponseWriter writer, final String sheetId,
       final Selectable selectable, final List<Integer> columnWidths, final List<Integer> selectedRows,
       final List<AbstractUIColumnBase> columns, final boolean autoLayout, final StringBuilder expandedValue)
       throws IOException {
@@ -864,7 +861,7 @@ public class SheetRenderer extends RendererBase {
   }
 
   private void encodeHeaderRows(
-      final FacesContext facesContext, final UISheet sheet, final TobagoResponseWriter writer,
+      final FacesContext facesContext, final AbstractUISheet sheet, final TobagoResponseWriter writer,
       final List<AbstractUIColumnBase> columns)
       throws IOException {
 
@@ -926,16 +923,16 @@ public class SheetRenderer extends RendererBase {
             Markup markup = Markup.NULL;
             String tip = ComponentUtils.getStringAttribute(column, Attributes.tip);
             // sorter icons should only displayed when there is only 1 column and not input
-            if (cell.getColumnSpan() == 1 && cellComponent instanceof UIOut) {
+            if (cell.getColumnSpan() == 1 && cellComponent instanceof AbstractUIOut) {
               final boolean sortable = ComponentUtils.getBooleanAttribute(column, Attributes.sortable);
               if (sortable) {
-                UILink sortCommand = (UILink) ComponentUtils.getFacet(column, Facets.sorter);
+                AbstractUILink sortCommand = (AbstractUILink) ComponentUtils.getFacet(column, Facets.sorter);
                 if (sortCommand == null) {
                   // assign id to column
                   column.getClientId(facesContext);
-                  final String sorterId = column.getId() + "_" + UISheet.SORTER_ID;
-                  sortCommand = (UILink) ComponentUtils.createComponent(
-                          facesContext, UILink.COMPONENT_TYPE, RendererTypes.Link, sorterId);
+                  final String sorterId = column.getId() + "_" + AbstractUISheet.SORTER_ID;
+                  sortCommand = (AbstractUILink) ComponentUtils.createComponent(
+                          facesContext, Tags.link.componentType(), RendererTypes.Link, sorterId);
                   sortCommand.setTransient(true);
                   final AjaxBehavior reloadBehavior = createReloadBehavior(sheet);
                   sortCommand.addClientBehavior("click", reloadBehavior);
@@ -974,7 +971,7 @@ public class SheetRenderer extends RendererBase {
             writer.writeClassAttribute(TobagoClass.SHEET__HEADER, TobagoClass.SHEET__HEADER.createMarkup(markup));
             writer.writeAttribute(HtmlAttributes.TITLE, tip, true);
 
-            if (column instanceof UIColumnSelector && selectable.isMulti()) {
+            if (column instanceof AbstractUIColumnSelector && selectable.isMulti()) {
               writer.startElement(HtmlElements.INPUT);
               writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.CHECKBOX);
 
@@ -1009,7 +1006,7 @@ public class SheetRenderer extends RendererBase {
     }
   }
 
-  private void encodeHeaderFiller(final TobagoResponseWriter writer, final UISheet sheet) throws IOException {
+  private void encodeHeaderFiller(final TobagoResponseWriter writer, final AbstractUISheet sheet) throws IOException {
     writer.startElement(HtmlElements.TH);
     writer.writeClassAttribute(
         TobagoClass.SHEET__HEADER_CELL,
@@ -1067,7 +1064,7 @@ public class SheetRenderer extends RendererBase {
     return true;
   }
 
-  private List<Integer> getSelectedRows(final UISheet data, final SheetState state) {
+  private List<Integer> getSelectedRows(final AbstractUISheet data, final SheetState state) {
     List<Integer> selected = (List<Integer>) ComponentUtils.getAttribute(data, Attributes.selectedListString);
     if (selected == null && state != null) {
       selected = state.getSelectedRows();
@@ -1079,14 +1076,14 @@ public class SheetRenderer extends RendererBase {
   }
 
   private void encodeLink(
-      final FacesContext facesContext, final UISheet data, final Application application,
+      final FacesContext facesContext, final AbstractUISheet data, final Application application,
       final boolean disabled, final SheetAction action, final Integer target, final Icons icon, final CssItem liClass)
       throws IOException {
 
     final String facet = action == SheetAction.toPage || action == SheetAction.toRow
         ? action.name() + "-" + target
         : action.name();
-    final UILink command = ensurePagingCommand(facesContext, data, facet, facet, disabled);
+    final AbstractUILink command = ensurePagingCommand(facesContext, data, facet, facet, disabled);
     if (target != null) {
       ComponentUtils.setAttribute(command, Attributes.pagingTarget, target);
     }
@@ -1133,7 +1130,7 @@ public class SheetRenderer extends RendererBase {
   }
 
   private void encodeDirectPagingLinks(
-      final FacesContext facesContext, final Application application, final UISheet sheet)
+      final FacesContext facesContext, final Application application, final AbstractUISheet sheet)
       throws IOException {
 
     int linkCount = ComponentUtils.getIntAttribute(sheet, Attributes.directLinkCount);
@@ -1205,15 +1202,14 @@ public class SheetRenderer extends RendererBase {
     }
   }
 
-  private UILink ensurePagingCommand(
-      final FacesContext facesContext, final UISheet sheet, final String facet, final String id,
+  private AbstractUILink ensurePagingCommand(
+      final FacesContext facesContext, final AbstractUISheet sheet, final String facet, final String id,
       final boolean disabled) {
 
     final Map<String, UIComponent> facets = sheet.getFacets();
-    UILink command = (UILink) facets.get(facet);
+    AbstractUILink command = (AbstractUILink) facets.get(facet);
     if (command == null) {
-      command =
-              (UILink) ComponentUtils.createComponent(facesContext, UILink.COMPONENT_TYPE,
+      command = (AbstractUILink) ComponentUtils.createComponent(facesContext, Tags.link.componentType(),
                       RendererTypes.Link, SUFFIX_PAGE_ACTION + id);
       command.setRendered(true);
       command.setDisabled(disabled);
@@ -1227,7 +1223,7 @@ public class SheetRenderer extends RendererBase {
     return command;
   }
 
-  private AjaxBehavior createReloadBehavior(final UISheet sheet) {
+  private AjaxBehavior createReloadBehavior(final AbstractUISheet sheet) {
     final AjaxBehavior reloadBehavior = findReloadBehavior(sheet);
     final ArrayList<String> renderIds = new ArrayList<>();
     if (!renderIds.contains(sheet.getId())) {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TabGroupRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TabGroupRenderer.java
index 1b36788..a2053b1 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TabGroupRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TabGroupRenderer.java
@@ -23,13 +23,14 @@ import org.apache.myfaces.tobago.component.Attributes;
 import org.apache.myfaces.tobago.component.ClientBehaviors;
 import org.apache.myfaces.tobago.component.Facets;
 import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.UIEvent;
-import org.apache.myfaces.tobago.component.UITab;
-import org.apache.myfaces.tobago.component.UITabGroup;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.event.TabChangeEvent;
 import org.apache.myfaces.tobago.internal.behavior.EventBehavior;
+import org.apache.myfaces.tobago.internal.component.AbstractUIEvent;
 import org.apache.myfaces.tobago.internal.component.AbstractUIPanelBase;
+import org.apache.myfaces.tobago.internal.component.AbstractUITab;
+import org.apache.myfaces.tobago.internal.component.AbstractUITabGroup;
 import org.apache.myfaces.tobago.internal.renderkit.CommandMap;
 import org.apache.myfaces.tobago.internal.util.AccessKeyLogger;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
@@ -75,11 +76,11 @@ public class TabGroupRenderer extends RendererBase implements ComponentSystemEve
   @Override
   public void processEvent(final ComponentSystemEvent event) {
 
-    final UITabGroup tabGroup = (UITabGroup) event.getComponent();
+    final AbstractUITabGroup tabGroup = (AbstractUITabGroup) event.getComponent();
 
     for (final UIComponent child : tabGroup.getChildren()) {
-      if (child instanceof UITab) {
-        final UITab tab = (UITab) child;
+      if (child instanceof AbstractUITab) {
+        final AbstractUITab tab = (AbstractUITab) child;
         final FacesContext facesContext = FacesContext.getCurrentInstance();
         final ClientBehaviors click = ClientBehaviors.click;
         switch (tabGroup.getSwitchType()) {
@@ -97,8 +98,8 @@ public class TabGroupRenderer extends RendererBase implements ComponentSystemEve
             tab.addClientBehavior(click.name(), ajaxBehavior);
             break;
           case reloadPage:
-            final UIEvent component = (UIEvent) ComponentUtils.createComponent(
-                facesContext, UIEvent.COMPONENT_TYPE, RendererTypes.Event, "_click");
+            final AbstractUIEvent component = (AbstractUIEvent) ComponentUtils.createComponent(
+                facesContext, Tags.event.componentType(), RendererTypes.Event, "_click");
             component.setEvent(click);
             tab.getChildren().add(component);
             final EventBehavior eventBehavior = new EventBehavior();
@@ -118,7 +119,7 @@ public class TabGroupRenderer extends RendererBase implements ComponentSystemEve
       return;
     }
 
-    final int oldIndex = ((UITabGroup) component).getRenderedIndex();
+    final int oldIndex = ((AbstractUITabGroup) component).getRenderedIndex();
 
     final String clientId = component.getClientId(facesContext);
     final Map parameters = facesContext.getExternalContext().getRequestParameterMap();
@@ -137,7 +138,7 @@ public class TabGroupRenderer extends RendererBase implements ComponentSystemEve
   @Override
   public void encodeEnd(final FacesContext facesContext, final UIComponent uiComponent) throws IOException {
 
-    final UITabGroup tabGroup = (UITabGroup) uiComponent;
+    final AbstractUITabGroup tabGroup = (AbstractUITabGroup) uiComponent;
 
     final int activeIndex = ensureRenderedActiveIndex(facesContext, tabGroup);
 
@@ -175,7 +176,7 @@ public class TabGroupRenderer extends RendererBase implements ComponentSystemEve
     writer.endElement(HtmlElements.DIV);
   }
 
-  private int ensureRenderedActiveIndex(final FacesContext context, final UITabGroup tabGroup) {
+  private int ensureRenderedActiveIndex(final FacesContext context, final AbstractUITabGroup tabGroup) {
     final int activeIndex = tabGroup.getSelectedIndex();
     // ensure to select a rendered tab
     int index = -1;
@@ -212,7 +213,7 @@ public class TabGroupRenderer extends RendererBase implements ComponentSystemEve
   }
 
   private void encodeHeader(
-      final FacesContext facesContext, final TobagoResponseWriter writer, final UITabGroup tabGroup,
+      final FacesContext facesContext, final TobagoResponseWriter writer, final AbstractUITabGroup tabGroup,
       final int activeIndex, final SwitchType switchType)
       throws IOException {
 
@@ -229,8 +230,8 @@ public class TabGroupRenderer extends RendererBase implements ComponentSystemEve
 
     int index = 0;
     for (final UIComponent child : tabGroup.getChildren()) {
-      if (child instanceof UITab) {
-        final UITab tab = (UITab) child;
+      if (child instanceof AbstractUITab) {
+        final AbstractUITab tab = (AbstractUITab) child;
         if (tab.isRendered()) {
           final LabelWithAccessKey label = new LabelWithAccessKey(tab);
           final UIComponent labelFacet = ComponentUtils.getFacet(tab, Facets.label);
@@ -332,14 +333,14 @@ public class TabGroupRenderer extends RendererBase implements ComponentSystemEve
   }
 
   protected void encodeContent(
-      final FacesContext facesContext, final TobagoResponseWriter writer, final UITabGroup tabGroup,
+      final FacesContext facesContext, final TobagoResponseWriter writer, final AbstractUITabGroup tabGroup,
       final int activeIndex, final SwitchType switchType) throws IOException {
     writer.startElement(HtmlElements.DIV);
     writer.writeClassAttribute(BootstrapClass.CARD_BODY, BootstrapClass.TAB_CONTENT);
     int index = 0;
     for (final UIComponent child : tabGroup.getChildren()) {
-      if (child instanceof UITab) {
-        final UITab tab = (UITab) child;
+      if (child instanceof AbstractUITab) {
+        final AbstractUITab tab = (AbstractUITab) child;
         if (tab.isRendered() && (switchType == SwitchType.client || index == activeIndex) && !tab.isDisabled()) {
           final Markup markup = tab.getMarkup();
 
@@ -364,7 +365,7 @@ public class TabGroupRenderer extends RendererBase implements ComponentSystemEve
     writer.endElement(HtmlElements.DIV);
   }
 
-  private String getTabPanelId(final FacesContext facesContext, final UITab tab) {
+  private String getTabPanelId(final FacesContext facesContext, final AbstractUITab tab) {
     return tab.getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + "content";
   }
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java
index 9450f96..b991523 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java
@@ -19,7 +19,6 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UITextarea;
 import org.apache.myfaces.tobago.config.TobagoConfig;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUITextarea;
@@ -74,12 +73,12 @@ public class TextareaRenderer extends MessageLayoutRendererBase {
 
   @Override
   public void encodeBeginField(final FacesContext facesContext, final UIComponent component) throws IOException {
-    if (!(component instanceof UITextarea)) {
-      LOG.error("Wrong type: Need " + UITextarea.class.getName() + ", but was " + component.getClass().getName());
+    if (!(component instanceof AbstractUITextarea)) {
+      LOG.error("Wrong type: Need " + AbstractUITextarea.class.getName() + ", but was " + component.getClass().getName());
       return;
     }
 
-    final UITextarea input = (UITextarea) component;
+    final AbstractUITextarea input = (AbstractUITextarea) component;
     final String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, component);
     final String clientId = input.getClientId(facesContext);
     final String fieldId = input.getFieldId(facesContext);
@@ -170,7 +169,7 @@ public class TextareaRenderer extends MessageLayoutRendererBase {
 
   @Override
   protected String getFieldId(final FacesContext facesContext, final UIComponent component) {
-    final UITextarea input = (UITextarea) component;
+    final AbstractUITextarea input = (AbstractUITextarea) component;
     return input.getFieldId(facesContext);
   }
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIconRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIconRenderer.java
index 12ebeae..2d57b2c 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIconRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIconRenderer.java
@@ -19,9 +19,9 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UITreeIcon;
-import org.apache.myfaces.tobago.component.UITreeNode;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
+import org.apache.myfaces.tobago.internal.component.AbstractUITreeIcon;
+import org.apache.myfaces.tobago.internal.component.AbstractUITreeNode;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.internal.util.StringUtils;
@@ -59,9 +59,9 @@ public class TreeIconRenderer extends RendererBase {
   @Override
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UITreeIcon treeIcon = (UITreeIcon) component;
+    final AbstractUITreeIcon treeIcon = (AbstractUITreeIcon) component;
     final AbstractUIData data = ComponentUtils.findAncestor(treeIcon, AbstractUIData.class);
-    final UITreeNode node = ComponentUtils.findAncestor(treeIcon, UITreeNode.class);
+    final AbstractUITreeNode node = ComponentUtils.findAncestor(treeIcon, AbstractUITreeNode.class);
     final boolean folder = node.isFolder();
     final boolean expanded = folder && data.getExpandedState().isExpanded(node.getPath());
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIndentRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIndentRenderer.java
index 4b60e43..9af23cc 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIndentRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIndentRenderer.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UITreeIndent;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
+import org.apache.myfaces.tobago.internal.component.AbstractUITreeIndent;
 import org.apache.myfaces.tobago.internal.component.AbstractUITreeNodeBase;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
@@ -42,7 +42,7 @@ public class TreeIndentRenderer extends RendererBase {
   @Override
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UITreeIndent treeIndent = (UITreeIndent) component;
+    final AbstractUITreeIndent treeIndent = (AbstractUITreeIndent) component;
     final AbstractUITreeNodeBase node = ComponentUtils.findAncestor(treeIndent, AbstractUITreeNodeBase.class);
     final AbstractUIData data = ComponentUtils.findAncestor(treeIndent, AbstractUIData.class);
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeLabelRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeLabelRenderer.java
index 0d829cc..10f5bc4 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeLabelRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeLabelRenderer.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UITreeLabel;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
+import org.apache.myfaces.tobago.internal.component.AbstractUITreeLabel;
 import org.apache.myfaces.tobago.internal.component.AbstractUITreeListbox;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.StringUtils;
@@ -30,8 +30,6 @@ import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
@@ -39,15 +37,13 @@ import java.io.IOException;
 
 public class TreeLabelRenderer extends RendererBase {
 
-  private static final Logger LOG = LoggerFactory.getLogger(TreeLabelRenderer.class);
-
   @Override
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
 
     final AbstractUIData data = ComponentUtils.findAncestor(component, AbstractUIData.class);
     final boolean listbox = data instanceof AbstractUITreeListbox;
 
-    final UITreeLabel label = (UITreeLabel) component;
+    final AbstractUITreeLabel label = (AbstractUITreeLabel) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final String text = StringUtils.defaultString((String) label.getValue());
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeListboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeListboxRenderer.java
index d15d3a1..ec2ca3d 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeListboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeListboxRenderer.java
@@ -19,13 +19,12 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UITreeLabel;
-import org.apache.myfaces.tobago.component.UITreeListbox;
-import org.apache.myfaces.tobago.component.UITreeNode;
-import org.apache.myfaces.tobago.component.UITreeSelect;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUITree;
+import org.apache.myfaces.tobago.internal.component.AbstractUITreeLabel;
 import org.apache.myfaces.tobago.internal.component.AbstractUITreeListbox;
+import org.apache.myfaces.tobago.internal.component.AbstractUITreeNode;
+import org.apache.myfaces.tobago.internal.component.AbstractUITreeSelect;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
@@ -54,7 +53,7 @@ public class TreeListboxRenderer extends RendererBase {
   public void encodeEnd(final FacesContext facesContext, final UIComponent component) throws IOException {
 
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
-    final UITreeListbox tree = (UITreeListbox) component;
+    final AbstractUITreeListbox tree = (AbstractUITreeListbox) component;
     final String clientId = tree.getClientId(facesContext);
     final Markup markup = tree.getMarkup();
     //    final Style scrollDivStyle = new Style();
@@ -152,7 +151,7 @@ public class TreeListboxRenderer extends RendererBase {
 
     tree.setRowIndex(parentRowIndex);
 
-    final UITreeNode node = ComponentUtils.findDescendant(tree, UITreeNode.class);
+    final AbstractUITreeNode node = ComponentUtils.findDescendant(tree, AbstractUITreeNode.class);
     final String parentId = node.getClientId(facesContext);
 
     writer.startElement(HtmlElements.SELECT);
@@ -164,12 +163,12 @@ public class TreeListboxRenderer extends RendererBase {
     writer.writeAttribute(HtmlAttributes.SIZE, size);
 //    writer.writeAttribute(HtmlAttributes.MULTIPLE, siblingMode);
 
-    final UITreeSelect select = ComponentUtils.findDescendant(tree, UITreeSelect.class);
+    final AbstractUITreeSelect select = ComponentUtils.findDescendant(tree, AbstractUITreeSelect.class);
     final String labelValue;
     if (select != null) {
       labelValue = select.getLabel();
     } else {
-      final UITreeLabel label = ComponentUtils.findDescendant(tree, UITreeLabel.class);
+      final AbstractUITreeLabel label = ComponentUtils.findDescendant(tree, AbstractUITreeLabel.class);
       if (label != null) {
         labelValue = label.getLabel();
       } else {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeNodeRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeNodeRenderer.java
index 71edec7..a856662 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeNodeRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeNodeRenderer.java
@@ -19,14 +19,14 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UITreeNode;
-import org.apache.myfaces.tobago.component.UITreeSelect;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
 import org.apache.myfaces.tobago.internal.component.AbstractUITree;
 import org.apache.myfaces.tobago.internal.component.AbstractUITreeListbox;
 import org.apache.myfaces.tobago.internal.component.AbstractUITreeMenu;
+import org.apache.myfaces.tobago.internal.component.AbstractUITreeNode;
 import org.apache.myfaces.tobago.internal.component.AbstractUITreeNodeBase;
+import org.apache.myfaces.tobago.internal.component.AbstractUITreeSelect;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.model.Selectable;
@@ -54,7 +54,7 @@ public class TreeNodeRenderer extends RendererBase {
   @Override
   public void decode(final FacesContext facesContext, final UIComponent component) {
 
-    final UITreeNode node = (UITreeNode) component;
+    final AbstractUITreeNode node = (AbstractUITreeNode) component;
 
     super.decode(facesContext, node);
 
@@ -84,7 +84,7 @@ public class TreeNodeRenderer extends RendererBase {
       if (data.getSelectable() != Selectable.none) { // selection
         final String selected = requestParameterMap.get(clientId + AbstractUITree.SELECT_STATE);
         final String searchString = ";" + node.getClientId(facesContext) + ";";
-        final UITreeSelect treeSelect = ComponentUtils.findDescendant(node, UITreeSelect.class);
+        final AbstractUITreeSelect treeSelect = ComponentUtils.findDescendant(node, AbstractUITreeSelect.class);
         if (treeSelect != null) {
           treeSelect.setSubmittedValue(selected.contains(searchString));
         }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeRenderer.java
index fe26224..17cda78 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeRenderer.java
@@ -19,11 +19,11 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UITreeNode;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
 import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
 import org.apache.myfaces.tobago.internal.component.AbstractUITree;
+import org.apache.myfaces.tobago.internal.component.AbstractUITreeNode;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.internal.util.RenderUtils;
@@ -85,7 +85,7 @@ public class TreeRenderer extends RendererBase {
     final AbstractUITree tree = (AbstractUITree) component;
     final String clientId = tree.getClientId(facesContext);
     final Markup markup = tree.getMarkup();
-    final UIComponent root = ComponentUtils.findDescendant(tree, UITreeNode.class);
+    final UIComponent root = ComponentUtils.findDescendant(tree, AbstractUITreeNode.class);
     if (root == null) {
       LOG.error("Can't find the tree root. This may occur while updating a tree from Tobago 1.0 to 1.5. "
           + "Please refer the documentation to see how to use tree tags.");
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeSelectRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeSelectRenderer.java
index 8eb88a9..d8ddd45 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeSelectRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeSelectRenderer.java
@@ -19,11 +19,11 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.component.UITreeSelect;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
 import org.apache.myfaces.tobago.internal.component.AbstractUITreeListbox;
 import org.apache.myfaces.tobago.internal.component.AbstractUITreeNodeBase;
+import org.apache.myfaces.tobago.internal.component.AbstractUITreeSelect;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
 import org.apache.myfaces.tobago.internal.util.RenderUtils;
@@ -53,7 +53,7 @@ public class TreeSelectRenderer extends RendererBase {
   @Override
   public void decode(final FacesContext facesContext, final UIComponent component) {
 
-    final UITreeSelect select = (UITreeSelect) component;
+    final AbstractUITreeSelect select = (AbstractUITreeSelect) component;
     final AbstractUITreeNodeBase node = ComponentUtils.findAncestor(select, AbstractUITreeNodeBase.class);
     final AbstractUIData data = ComponentUtils.findAncestor(node, AbstractUIData.class);
 
@@ -84,7 +84,7 @@ public class TreeSelectRenderer extends RendererBase {
   @Override
   public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-    final UITreeSelect treeSelect = (UITreeSelect) component;
+    final AbstractUITreeSelect treeSelect = (AbstractUITreeSelect) component;
     final AbstractUITreeNodeBase node = ComponentUtils.findAncestor(treeSelect, AbstractUITreeNodeBase.class);
     final AbstractUIData data = ComponentUtils.findAncestor(node, AbstractUIData.class);
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BadgeTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BadgeTagDeclaration.java
index f41acec..0454276 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BadgeTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BadgeTagDeclaration.java
@@ -36,7 +36,6 @@ import javax.faces.component.UIOutput;
 @Tag(name = "badge")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIBadge",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIBadge",
     uiComponentFacesClass = "javax.faces.component.UIOutput",
     interfaces = {
         // As long as no behavior event names are defined, ClientBehaviorHolder must be implemented for Mojarra.
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BarTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BarTagDeclaration.java
index 75f377d..2bfa4dd 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BarTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BarTagDeclaration.java
@@ -37,7 +37,6 @@ import javax.faces.component.UIPanel;
 @Tag(name = "bar")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIBar",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIBar",
     componentFamily = UIPanel.COMPONENT_FAMILY,
     rendererType = RendererTypes.BAR,
     interfaces = {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BoxTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BoxTagDeclaration.java
index fdfcf59..9299967 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BoxTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BoxTagDeclaration.java
@@ -40,7 +40,6 @@ import javax.faces.component.UIPanel;
 @Tag(name = "box")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIBox",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIBox",
     uiComponentFacesClass = "javax.faces.component.UIPanel",
     componentFamily = UIPanel.COMPONENT_FAMILY,
     rendererType = RendererTypes.BOX,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonTagDeclaration.java
index 95bf6fe..7028a89 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonTagDeclaration.java
@@ -57,7 +57,6 @@ import javax.faces.component.UICommand;
 @BodyContentDescription(anyTagOf = "facestag")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIButton",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIButton",
     uiComponentFacesClass = "javax.faces.component.UICommand",
     interfaces = {
         "org.apache.myfaces.tobago.component.SupportsAccessKey"
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonsTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonsTagDeclaration.java
index b10869d..ce65fd9 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonsTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonsTagDeclaration.java
@@ -34,7 +34,6 @@ import javax.faces.component.UIPanel;
 @Tag(name = "buttons")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIButtons",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIButtons",
     uiComponentFacesClass = "javax.faces.component.UIPanel",
     componentFamily = UIPanel.COMPONENT_FAMILY,
     rendererType = RendererTypes.BUTTONS,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnNodeTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnNodeTagDeclaration.java
index 5c2e56a..f5b3174 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnNodeTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnNodeTagDeclaration.java
@@ -42,7 +42,6 @@ import javax.faces.component.UIColumn;
 @BodyContentDescription(anyTagOf = "<tc:treeIndent>|<tc:treeIcon>|<tc:treeSelect>|<tc:treeLabel>|<tc:treeCommand>")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIColumnNode",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIColumnNode",
     uiComponentFacesClass = "javax.faces.component.UIColumn",
     componentFamily = UIColumn.COMPONENT_FAMILY,
     rendererType = RendererTypes.TREE_NODE,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnSelectorTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnSelectorTagDeclaration.java
index 45eee5a..239149f 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnSelectorTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnSelectorTagDeclaration.java
@@ -34,7 +34,6 @@ import javax.faces.component.UIColumn;
 @Tag(name = "columnSelector")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIColumnSelector",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIColumnSelector",
     uiComponentFacesClass = "javax.faces.component.UIColumn",
     componentFamily = UIColumn.COMPONENT_FAMILY,
     rendererType = RendererTypes.COLUMN_SELECTOR,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnTagDeclaration.java
index 2de2e23..91bac8c 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ColumnTagDeclaration.java
@@ -39,7 +39,6 @@ import javax.faces.component.UIColumn;
 @Tag(name = "column")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIColumn",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIColumn",
     uiComponentFacesClass = "javax.faces.component.UIColumn",
     componentFamily = UIColumn.COMPONENT_FAMILY,
     rendererType = RendererTypes.COLUMN,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/DateTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/DateTagDeclaration.java
index 4d78ea1..4901a69 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/DateTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/DateTagDeclaration.java
@@ -59,7 +59,6 @@ import javax.faces.component.UIInput;
 @Tag(name = "date")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIDate",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIDate",
     uiComponentFacesClass = "javax.faces.component.UIInput",
     componentFamily = UIInput.COMPONENT_FAMILY,
     rendererType = RendererTypes.DATE,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/EventTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/EventTagDeclaration.java
index 0b51844..7a8a72e 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/EventTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/EventTagDeclaration.java
@@ -48,7 +48,6 @@ import javax.faces.component.UICommand;
  */
 @Tag(name = "event")
 @UIComponentTag(uiComponent = "org.apache.myfaces.tobago.component.UIEvent",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIEvent",
     uiComponentFacesClass = "javax.faces.component.UICommand",
     componentFamily = UICommand.COMPONENT_FAMILY,
     rendererType = RendererTypes.EVENT,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FigureTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FigureTagDeclaration.java
index bdd5c0f..a235e54 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FigureTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FigureTagDeclaration.java
@@ -37,7 +37,6 @@ import javax.faces.component.UIPanel;
 @Tag(name = "figure")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIFigure",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIFigure",
     uiComponentFacesClass = "javax.faces.component.UIPanel",
     componentFamily = UIPanel.COMPONENT_FAMILY,
     rendererType = RendererTypes.FIGURE,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FileTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FileTagDeclaration.java
index 1754cc5..b72d6b7 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FileTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FileTagDeclaration.java
@@ -60,7 +60,6 @@ import javax.faces.component.UIInput;
 @Tag(name = "file")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIFile",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIFile",
     uiComponentFacesClass = "javax.faces.component.UIInput",
     componentFamily = UIInput.COMPONENT_FAMILY,
     rendererType = RendererTypes.FILE,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FlexLayoutTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FlexLayoutTagDeclaration.java
index 9782b57..76fa6e9 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FlexLayoutTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FlexLayoutTagDeclaration.java
@@ -39,7 +39,6 @@ import org.apache.myfaces.tobago.layout.JustifyContent;
 @Tag(name = "flexLayout")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIFlexLayout",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIFlexLayout",
     componentFamily = AbstractUIFlexLayout.COMPONENT_FAMILY,
     rendererType = RendererTypes.FLEX_LAYOUT,
     interfaces = {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FlowLayoutTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FlowLayoutTagDeclaration.java
index bad26d0..9e02a6b 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FlowLayoutTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FlowLayoutTagDeclaration.java
@@ -35,7 +35,6 @@ import org.apache.myfaces.tobago.layout.TextAlign;
 @Tag(name = "flowLayout")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIFlowLayout",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIFlowLayout",
     componentFamily = AbstractUIFlowLayout.COMPONENT_FAMILY,
     rendererType = RendererTypes.FLOW_LAYOUT,
     interfaces = {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FooterTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FooterTagDeclaration.java
index 790b081..a259653 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FooterTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FooterTagDeclaration.java
@@ -36,7 +36,6 @@ import javax.faces.component.UIPanel;
 @Tag(name = "footer")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIFooter",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIFooter",
     componentFamily = UIPanel.COMPONENT_FAMILY,
     rendererType = RendererTypes.FOOTER,
     interfaces = {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FormTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FormTagDeclaration.java
index 8e7ad64..3d35566 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FormTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FormTagDeclaration.java
@@ -40,7 +40,6 @@ import javax.faces.component.UIForm;
 @Tag(name = "form")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIForm",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIForm",
     uiComponentFacesClass = "javax.faces.component.UIForm",
     componentFamily = UIForm.COMPONENT_FAMILY,
     rendererType = RendererTypes.FORM,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/GridLayoutTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/GridLayoutTagDeclaration.java
index 79ea2fe..fd21817 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/GridLayoutTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/GridLayoutTagDeclaration.java
@@ -97,7 +97,6 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.IsVisual;
 @Tag(name = "gridLayout")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIGridLayout",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIGridLayout",
     componentFamily = AbstractUIGridLayout.COMPONENT_FAMILY,
     rendererType = RendererTypes.GRID_LAYOUT,
     interfaces = {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/HeaderTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/HeaderTagDeclaration.java
index 1bc3c65..8604546 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/HeaderTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/HeaderTagDeclaration.java
@@ -36,7 +36,6 @@ import javax.faces.component.UIPanel;
 @Tag(name = "header")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIHeader",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIHeader",
     componentFamily = UIPanel.COMPONENT_FAMILY,
     rendererType = RendererTypes.HEADER,
     interfaces = {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/HiddenTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/HiddenTagDeclaration.java
index 2e47193..cd080e8 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/HiddenTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/HiddenTagDeclaration.java
@@ -39,7 +39,6 @@ import javax.faces.component.UIInput;
 @Tag(name = "hidden")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIHidden",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIHidden",
     uiComponentFacesClass = "javax.faces.component.UIInput",
     componentFamily = UIInput.COMPONENT_FAMILY,
     rendererType = RendererTypes.HIDDEN,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ImageTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ImageTagDeclaration.java
index 3be39f1..248ac0e 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ImageTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ImageTagDeclaration.java
@@ -38,7 +38,6 @@ import javax.faces.component.UIGraphic;
 @Tag(name = "image")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIImage",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIImage",
     uiComponentFacesClass = "javax.faces.component.UIGraphic",
     componentFamily = UIGraphic.COMPONENT_FAMILY,
     rendererType = RendererTypes.IMAGE,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/InTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/InTagDeclaration.java
index a4f8f4f..7d69be6 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/InTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/InTagDeclaration.java
@@ -60,7 +60,6 @@ import javax.faces.component.UIInput;
 @BodyContentDescription(anyTagOf = "facestag")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIIn",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIIn",
     uiComponentFacesClass = "javax.faces.component.UIInput",
     componentFamily = UIInput.COMPONENT_FAMILY,
     rendererType = RendererTypes.IN,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LabelTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LabelTagDeclaration.java
index cc7b62f..14d3a5d 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LabelTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LabelTagDeclaration.java
@@ -38,7 +38,6 @@ import javax.faces.component.UIOutput;
 @Tag(name = "label")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UILabel",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUILabel",
     uiComponentFacesClass = "javax.faces.component.UIOutput",
     interfaces = {
         // As long as no behavior event names are defined, ClientBehaviorHolder must be implemented for Mojarra.
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinkTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinkTagDeclaration.java
index 923e504..a7a0413 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinkTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinkTagDeclaration.java
@@ -56,7 +56,6 @@ import javax.faces.component.UICommand;
 @BodyContentDescription(anyTagOf = "facestag")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UILink",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUILink",
     uiComponentFacesClass = "javax.faces.component.UICommand",
     interfaces = "org.apache.myfaces.tobago.component.SupportsAccessKey",
     componentFamily = UICommand.COMPONENT_FAMILY,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinksTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinksTagDeclaration.java
index 9f077c5..3689d45 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinksTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinksTagDeclaration.java
@@ -34,7 +34,6 @@ import javax.faces.component.UIPanel;
 @Tag(name = "links")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UILinks",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUILinks",
     uiComponentFacesClass = "javax.faces.component.UIPanel",
     componentFamily = UIPanel.COMPONENT_FAMILY,
     interfaces = {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MessagesTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MessagesTagDeclaration.java
index 2b4243b..a50795e 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MessagesTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MessagesTagDeclaration.java
@@ -37,7 +37,6 @@ import javax.faces.component.UIMessages;
 @Tag(name = "messages")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIMessages",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIMessages",
     uiComponentFacesClass = "javax.faces.component.UIMessages",
     componentFamily = UIMessages.COMPONENT_FAMILY,
     rendererType = RendererTypes.MESSAGES,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MetaLinkTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MetaLinkTagDeclaration.java
index c40e74a..307fed2 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MetaLinkTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MetaLinkTagDeclaration.java
@@ -34,7 +34,6 @@ import javax.faces.component.UIOutput;
 @Tag(name = "metaLink")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIMetaLink",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIMetaLink",
     componentFamily = UIOutput.COMPONENT_FAMILY,
     rendererType = RendererTypes.META_LINK,
     allowedChildComponenents = "NONE")
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MetaTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MetaTagDeclaration.java
index 1ac9c52..ffaab98 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MetaTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/MetaTagDeclaration.java
@@ -42,7 +42,6 @@ import javax.faces.component.UIOutput;
 @Tag(name = "meta")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIMeta",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIMeta",
     componentFamily = UIOutput.COMPONENT_FAMILY,
     rendererType = RendererTypes.META,
     allowedChildComponenents = "NONE")
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ObjectTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ObjectTagDeclaration.java
index 270ef76..d503c44 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ObjectTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ObjectTagDeclaration.java
@@ -37,7 +37,6 @@ import javax.faces.component.UIOutput;
 @Tag(name = "object")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIObject",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIObject",
     uiComponentFacesClass = "javax.faces.component.UIOutput",
     componentFamily = UIOutput.COMPONENT_FAMILY,
     rendererType = RendererTypes.OBJECT,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OperationTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OperationTagDeclaration.java
index 9f90774..476b5a4 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OperationTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OperationTagDeclaration.java
@@ -38,7 +38,6 @@ import org.apache.myfaces.tobago.component.RendererTypes;
 @Tag(name = "operation")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIOperation",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIOperation",
     componentFamily = "org.apache.myfaces.tobago.Operation",
     rendererType = RendererTypes.OPERATION,
     allowedChildComponenents = "NONE")
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OutTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OutTagDeclaration.java
index fabe8f1..f79d301 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OutTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OutTagDeclaration.java
@@ -44,7 +44,6 @@ import javax.faces.component.UIOutput;
 @BodyContentDescription(anyTagOf = "f:converter|f:convertNumber|f:convertDateTime|...")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIOut",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIOut",
     uiComponentFacesClass = "javax.faces.component.UIOutput",
     componentFamily = UIOutput.COMPONENT_FAMILY,
     rendererType = {RendererTypes.OUT, RendererTypes.OUT_INSIDE_BOX_LABEL, RendererTypes.OUT_INSIDE_IN,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PageTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PageTagDeclaration.java
index 4760e69..12ee543 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PageTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PageTagDeclaration.java
@@ -50,7 +50,6 @@ import javax.faces.component.UIForm;
 @Tag(name = "page")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIPage",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIPage",
     uiComponentFacesClass = "javax.faces.component.UIForm",
     componentFamily = UIForm.COMPONENT_FAMILY,
     rendererType = RendererTypes.PAGE,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PanelTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PanelTagDeclaration.java
index 448ee01..1ef40ef 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PanelTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PanelTagDeclaration.java
@@ -42,7 +42,6 @@ import javax.faces.component.UIPanel;
 @Tag(name = "panel")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIPanel",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIPanel",
     uiComponentFacesClass = "javax.faces.component.UIPanel",
     componentFamily = UIPanel.COMPONENT_FAMILY,
     rendererType = RendererTypes.PANEL,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PopupTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PopupTagDeclaration.java
index ad0514b..d928c5d 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PopupTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/PopupTagDeclaration.java
@@ -37,7 +37,6 @@ import org.apache.myfaces.tobago.model.CollapseMode;
 @Tag(name = "popup")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIPopup",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIPopup",
     uiComponentFacesClass = "javax.faces.component.UIPanel",
     componentFamily = AbstractUIPopup.COMPONENT_FAMILY,
     interfaces = {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ProgressTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ProgressTagDeclaration.java
index 8966767..5fe426a 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ProgressTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ProgressTagDeclaration.java
@@ -39,7 +39,6 @@ import javax.faces.component.UIOutput;
 @Tag(name = "progress")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIProgress",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIProgress",
     uiComponentFacesClass = "javax.faces.component.UIOutput",
     componentFamily = UIOutput.COMPONENT_FAMILY,
     rendererType = RendererTypes.PROGRESS,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ReloadTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ReloadTagDeclaration.java
index 57a1182..7d4ef85 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ReloadTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ReloadTagDeclaration.java
@@ -38,7 +38,6 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.HasIdBindingAndRend
 @Tag(name = "reload")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIReload",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIReload",
     componentFamily = "org.apache.myfaces.tobago.Reload",
     allowedChildComponenents = "NONE")
 public interface ReloadTagDeclaration extends HasIdBindingAndRendered {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/RowTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/RowTagDeclaration.java
index c97acc4..9d6c72c 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/RowTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/RowTagDeclaration.java
@@ -36,7 +36,6 @@ import javax.faces.component.UIColumn;
 @Tag(name = "row")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIRow",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIRow",
     uiComponentFacesClass = "javax.faces.component.UIColumn",
     componentFamily = UIColumn.COMPONENT_FAMILY,
     rendererType = RendererTypes.ROW,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ScriptTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ScriptTagDeclaration.java
index 2bd8775..c62223b 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ScriptTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ScriptTagDeclaration.java
@@ -34,7 +34,6 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.HasIdBindingAndRend
 @Tag(name = "script")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIScript",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIScript",
     componentFamily = "org.apache.myfaces.tobago.Script",
     rendererType = RendererTypes.SCRIPT,
     allowedChildComponenents = "NONE")
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SectionTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SectionTagDeclaration.java
index 6f4e601..50eb1be 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SectionTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SectionTagDeclaration.java
@@ -40,7 +40,6 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.IsVisual;
 @Tag(name = "section")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISection",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISection",
     uiComponentFacesClass = "javax.faces.component.UIPanel",
     componentFamily = "org.apache.myfaces.tobago.Section",
     rendererType = RendererTypes.SECTION,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SegmentLayoutTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SegmentLayoutTagDeclaration.java
index 9b617ed..8bdfa43 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SegmentLayoutTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SegmentLayoutTagDeclaration.java
@@ -39,7 +39,6 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.IsVisual;
 @Tag(name = "segmentLayout")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISegmentLayout",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISegmentLayout",
     componentFamily = AbstractUISegmentLayout.COMPONENT_FAMILY,
     rendererType = RendererTypes.SEGMENT_LAYOUT,
     interfaces = {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java
index 8d0a3f3..3d48299 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java
@@ -55,7 +55,6 @@ import javax.faces.component.UISelectBoolean;
 @BodyContentDescription(anyTagOf = "<f:facet>* ")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISelectBooleanCheckbox",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectBooleanCheckbox",
     uiComponentFacesClass = "javax.faces.component.UISelectBoolean",
     componentFamily = UISelectBoolean.COMPONENT_FAMILY,
     rendererType = {RendererTypes.SELECT_BOOLEAN_CHECKBOX, RendererTypes.SELECT_BOOLEAN_CHECKBOX_INSIDE_COMMAND},
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java
index 51960bd..847d686 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java
@@ -55,7 +55,6 @@ import javax.faces.component.UISelectBoolean;
 @BodyContentDescription(anyTagOf = "<f:facet>* ")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISelectBooleanToggle",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectBooleanToggle",
     uiComponentFacesClass = "javax.faces.component.UISelectBoolean",
     componentFamily = UISelectBoolean.COMPONENT_FAMILY,
     rendererType = {RendererTypes.SELECT_BOOLEAN_TOGGLE},
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemTagDeclaration.java
index 4f6f379..a512786 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemTagDeclaration.java
@@ -38,7 +38,6 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.IsVisual;
 @Tag(name = "selectItem")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISelectItem",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectItem",
     uiComponentFacesClass = "javax.faces.component.UISelectItem",
     allowedChildComponenents = "NONE")
 public interface SelectItemTagDeclaration extends HasBinding, HasId, IsVisual, HasItemLabel, HasTip {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemsTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemsTagDeclaration.java
index 1f883d4..8f532ac 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemsTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemsTagDeclaration.java
@@ -37,7 +37,6 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.HasTip;
 @Tag(name = "selectItems")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISelectItems",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectItems",
     uiComponentFacesClass = "javax.faces.component.UISelectItems",
     isComponentAlreadyDefined = false,
     allowedChildComponenents = "NONE")
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyCheckboxTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyCheckboxTagDeclaration.java
index f24ed40..060bdb8 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyCheckboxTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyCheckboxTagDeclaration.java
@@ -58,7 +58,6 @@ import javax.faces.component.UISelectMany;
 @BodyContentDescription(anyTagOf = "(<f:selectItems>|<f:selectItem>|<tc:selectItem>)+ <f:facet>* ")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISelectManyCheckbox",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectManyCheckbox",
     uiComponentFacesClass = "javax.faces.component.UISelectMany",
     componentFamily = UISelectMany.COMPONENT_FAMILY,
     rendererType = {RendererTypes.SELECT_MANY_CHECKBOX, RendererTypes.SELECT_MANY_CHECKBOX_INSIDE_COMMAND},
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyListboxTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyListboxTagDeclaration.java
index 47c8c37..a5b7d10 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyListboxTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyListboxTagDeclaration.java
@@ -56,7 +56,6 @@ import javax.faces.component.UISelectMany;
 @Tag(name = "selectManyListbox")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISelectManyListbox",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectManyListbox",
     uiComponentFacesClass = "javax.faces.component.UISelectMany",
     componentFamily = UISelectMany.COMPONENT_FAMILY,
     rendererType = RendererTypes.SELECT_MANY_LISTBOX,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyShuttleTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyShuttleTagDeclaration.java
index deda5a1..46f4dde 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyShuttleTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyShuttleTagDeclaration.java
@@ -55,7 +55,6 @@ import javax.faces.component.UISelectMany;
 @BodyContentDescription(anyTagOf = "(<f:selectItems>|<f:selectItem>|<tc:selectItem>)+ <f:facet>* ")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISelectManyShuttle",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectManyShuttle",
     uiComponentFacesClass = "javax.faces.component.UISelectMany",
     componentFamily = UISelectMany.COMPONENT_FAMILY,
     rendererType = RendererTypes.SELECT_MANY_SHUTTLE,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneChoiceTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneChoiceTagDeclaration.java
index 104fece..14f27c3 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneChoiceTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneChoiceTagDeclaration.java
@@ -56,7 +56,6 @@ import javax.faces.component.UISelectOne;
 @BodyContentDescription(anyTagOf = "(<f:selectItems>|<f:selectItem>|<tc:selectItem>)+ <f:facet>* ")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISelectOneChoice",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectOneChoice",
     uiComponentFacesClass = "javax.faces.component.UISelectOne",
     componentFamily = UISelectOne.COMPONENT_FAMILY,
     rendererType = {RendererTypes.SELECT_ONE_CHOICE, RendererTypes.SELECT_ONE_CHOICE_INSIDE_IN},
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneListboxTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneListboxTagDeclaration.java
index 5218fb7..1d373b3 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneListboxTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneListboxTagDeclaration.java
@@ -58,7 +58,6 @@ import javax.faces.component.UISelectOne;
 @BodyContentDescription(anyTagOf = "(<f:selectItems>|<f:selectItem>|<tc:selectItem>)+ <f:facet>* ")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISelectOneListbox",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectOneListbox",
     uiComponentFacesClass = "javax.faces.component.UISelectOne",
     componentFamily = UISelectOne.COMPONENT_FAMILY,
     rendererType = RendererTypes.SELECT_ONE_LISTBOX,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneRadioTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneRadioTagDeclaration.java
index fcfe741..0078dfc 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneRadioTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneRadioTagDeclaration.java
@@ -58,7 +58,6 @@ import javax.faces.component.UISelectOne;
 @BodyContentDescription(anyTagOf = "(<f:selectItems>|<f:selectItem>|<tc:selectItem>)+ <f:facet>* ")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISelectOneRadio",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectOneRadio",
     uiComponentFacesClass = "javax.faces.component.UISelectOne",
     componentFamily = UISelectOne.COMPONENT_FAMILY,
     rendererType = {RendererTypes.SELECT_ONE_RADIO, RendererTypes.SELECT_ONE_RADIO_INSIDE_COMMAND},
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectReferenceTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectReferenceTagDeclaration.java
index 39fa3f5..dc889b8 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectReferenceTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectReferenceTagDeclaration.java
@@ -35,7 +35,6 @@ import javax.faces.component.UIOutput;
 @Tag(name = "selectReference")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISelectReference",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectReference",
     uiComponentFacesClass = "javax.faces.component.UIOutput",
     componentFamily = UIOutput.COMPONENT_FAMILY,
     rendererType = RendererTypes.SELECT_REFERENCE,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SeparatorTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SeparatorTagDeclaration.java
index 85ebad7..24921d6 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SeparatorTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SeparatorTagDeclaration.java
@@ -34,7 +34,6 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.IsVisual;
 @Tag(name = "separator")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISeparator",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISeparator",
     componentFamily = "org.apache.myfaces.tobago.Separator",
     rendererType = {RendererTypes.SEPARATOR, RendererTypes.SEPARATOR_INSIDE_COMMAND},
     allowedChildComponenents = "NONE",
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SheetTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SheetTagDeclaration.java
index 866f1aa..d845e5b 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SheetTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SheetTagDeclaration.java
@@ -48,7 +48,6 @@ import javax.faces.component.UIData;
 @BodyContentDescription(anyTagOf = "<tc:column>* <tc:columnSelector>? <tc:row>?")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISheet",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISheet",
     uiComponentFacesClass = "javax.faces.component.UIData",
     componentFamily = UIData.COMPONENT_FAMILY,
     rendererType = RendererTypes.SHEET,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SplitLayoutTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SplitLayoutTagDeclaration.java
index e6bf63e..f40622f 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SplitLayoutTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SplitLayoutTagDeclaration.java
@@ -44,7 +44,6 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.IsVisual;
 @Tag(name = "splitLayout")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISplitLayout",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISplitLayout",
     componentFamily = AbstractUIGridLayout.COMPONENT_FAMILY,
     rendererType = "SplitLayout",
     allowedChildComponenents = "NONE",
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/StarsTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/StarsTagDeclaration.java
index fde564a..74cce07 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/StarsTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/StarsTagDeclaration.java
@@ -53,7 +53,6 @@ import javax.faces.component.UIInput;
 @Tag(name = "stars")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIStars",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIStars",
     uiComponentFacesClass = "javax.faces.component.UIInput",
     componentFamily = UIInput.COMPONENT_FAMILY,
     rendererType = RendererTypes.STARS,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/StyleTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/StyleTagDeclaration.java
index 67b90ab..298bd08 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/StyleTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/StyleTagDeclaration.java
@@ -39,7 +39,6 @@ import org.apache.myfaces.tobago.layout.TextAlign;
 @Tag(name = "style")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UIStyle",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIStyle",
     componentFamily = "org.apache.myfaces.tobago.Style",
     rendererType = RendererTypes.STYLE,
     allowedChildComponenents = "NONE")
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SuggestTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SuggestTagDeclaration.java
index d95140a..cd503e1 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SuggestTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SuggestTagDeclaration.java
@@ -47,7 +47,6 @@ import javax.faces.component.UIInput;
 @Tag(name = "suggest")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISuggest",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISuggest",
     componentFamily = UIInput.COMPONENT_FAMILY,
     rendererType = RendererTypes.SUGGEST,
     allowedChildComponenents = {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TabGroupTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TabGroupTagDeclaration.java
index bf01294..41afba5 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TabGroupTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TabGroupTagDeclaration.java
@@ -46,7 +46,6 @@ import javax.faces.component.UIPanel;
 @BodyContentDescription(anyTagOf = "(<tc:tab>* ")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITabGroup",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUITabGroup",
     uiComponentFacesClass = "javax.faces.component.UIPanel",
     componentFamily = UIPanel.COMPONENT_FAMILY,
     rendererType = RendererTypes.TAB_GROUP,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TabTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TabTagDeclaration.java
index ee3796f..f23b142 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TabTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TabTagDeclaration.java
@@ -42,12 +42,7 @@ import javax.faces.component.UIPanel;
 @Tag(name = "tab")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITab",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUITab",
     uiComponentFacesClass = "javax.faces.component.UIPanel",
-    interfaces = {
-        "javax.faces.component.NamingContainer",
-        "org.apache.myfaces.tobago.component.SupportsAccessKey"
-    },
     componentFamily = UIPanel.COMPONENT_FAMILY,
     rendererType = RendererTypes.TAB,
     facets = {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TextareaTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TextareaTagDeclaration.java
index 8f851be..6a853dd 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TextareaTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TextareaTagDeclaration.java
@@ -57,7 +57,6 @@ import javax.faces.component.UIInput;
 @Tag(name = "textarea")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITextarea",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUITextarea",
     uiComponentFacesClass = "javax.faces.component.UIInput",
     componentFamily = UIInput.COMPONENT_FAMILY,
     rendererType = RendererTypes.TEXTAREA,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeCommandTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeCommandTagDeclaration.java
index c80b44a..18e6478 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeCommandTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeCommandTagDeclaration.java
@@ -57,7 +57,6 @@ import javax.faces.component.UICommand;
 @BodyContentDescription(anyTagOf = "facestag")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITreeCommand",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUITreeCommand",
     uiComponentFacesClass = "javax.faces.component.UICommand",
     interfaces = {
         "org.apache.myfaces.tobago.component.SupportsAccessKey"
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeIconTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeIconTagDeclaration.java
index 1db14c2..5e39ae5 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeIconTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeIconTagDeclaration.java
@@ -38,7 +38,6 @@ import javax.faces.component.UIGraphic;
 @Tag(name = "treeIcon")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITreeIcon",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUIImage",
     uiComponentFacesClass = "javax.faces.component.UIGraphic",
     componentFamily = UIGraphic.COMPONENT_FAMILY,
     rendererType = RendererTypes.TREE_ICON,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeIndentTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeIndentTagDeclaration.java
index b5887b8..d482d9d 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeIndentTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeIndentTagDeclaration.java
@@ -36,7 +36,6 @@ import javax.faces.component.UIGraphic;
 @Tag(name = "treeIndent")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITreeIndent",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUITreeIndent",
     uiComponentFacesClass = "javax.faces.component.UIGraphic",
     componentFamily = UIGraphic.COMPONENT_FAMILY,
     rendererType = RendererTypes.TREE_INDENT,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeLabelTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeLabelTagDeclaration.java
index 9ebdb8b..493a491 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeLabelTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeLabelTagDeclaration.java
@@ -36,7 +36,6 @@ import javax.faces.component.UIOutput;
 @Tag(name = "treeLabel")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITreeLabel",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUILabel",
     uiComponentFacesClass = "javax.faces.component.UIOutput",
     componentFamily = UIOutput.COMPONENT_FAMILY,
     rendererType = RendererTypes.TREE_LABEL,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeListboxTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeListboxTagDeclaration.java
index a09520b..6f72ecf 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeListboxTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeListboxTagDeclaration.java
@@ -43,7 +43,6 @@ import javax.faces.component.UIData;
 @BodyContentDescription(anyTagOf = "<tc:treeNode>")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITreeListbox",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUITreeListbox",
     uiComponentFacesClass = "javax.faces.component.UIData",
     componentFamily = UIData.COMPONENT_FAMILY,
     rendererType = RendererTypes.TREE_LISTBOX,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeMenuTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeMenuTagDeclaration.java
index 8dd26e3..81134c1 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeMenuTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeMenuTagDeclaration.java
@@ -45,7 +45,6 @@ import javax.faces.component.UIData;
 @BodyContentDescription(anyTagOf = "<tc:treeNode>")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITreeMenu",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUITreeMenu",
     uiComponentFacesClass = "javax.faces.component.UIData",
     componentFamily = UIData.COMPONENT_FAMILY,
     rendererType = RendererTypes.TREE_MENU,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeNodeTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeNodeTagDeclaration.java
index bac3b49..94cf07f 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeNodeTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeNodeTagDeclaration.java
@@ -41,7 +41,6 @@ import javax.faces.component.UIColumn;
 @BodyContentDescription(anyTagOf = "<tc:treeIndent>|<tc:treeIcon>|<tc:treeSelect>|<tc:treeLabel>|<tc:treeCommand>")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITreeNode",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUITreeNode",
     uiComponentFacesClass = "javax.faces.component.UIColumn",
     componentFamily = UIColumn.COMPONENT_FAMILY,
     rendererType = RendererTypes.TREE_NODE,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeSelectTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeSelectTagDeclaration.java
index 5a54b61..9d47426 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeSelectTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeSelectTagDeclaration.java
@@ -47,7 +47,6 @@ import javax.faces.component.UISelectBoolean;
 @Tag(name = "treeSelect")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITreeSelect",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUITreeSelect",
     uiComponentFacesClass = "javax.faces.component.UISelectBoolean",
     componentFamily = UISelectBoolean.COMPONENT_FAMILY,
     rendererType = RendererTypes.TREE_SELECT,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeTagDeclaration.java
index 056c8b0..ba65fde 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/TreeTagDeclaration.java
@@ -44,7 +44,6 @@ import javax.faces.component.UIData;
 @BodyContentDescription(anyTagOf = "<tc:treeNode>")
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UITree",
-    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUITree",
     uiComponentFacesClass = "javax.faces.component.UIData",
     componentFamily = UIData.COMPONENT_FAMILY,
     rendererType = RendererTypes.TREE,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
index af7a6e2..b4bcdb5 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
@@ -21,10 +21,11 @@ package org.apache.myfaces.tobago.internal.util;
 
 import org.apache.myfaces.tobago.component.Attributes;
 import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.UIStyle;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.component.Visual;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.context.TobagoContext;
+import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
 import org.apache.myfaces.tobago.internal.webapp.TobagoResponseWriterWrapper;
 import org.apache.myfaces.tobago.renderkit.LabelWithAccessKey;
 import org.apache.myfaces.tobago.renderkit.css.Icons;
@@ -256,8 +257,8 @@ public final class HtmlRendererUtils {
         if (item instanceof org.apache.myfaces.tobago.model.SelectItem) {
           final String image = ((org.apache.myfaces.tobago.model.SelectItem) item).getImage();
           if (image != null) {
-            final UIStyle style = (UIStyle) facesContext.getApplication()
-                .createComponent(facesContext, UIStyle.COMPONENT_TYPE, RendererTypes.Style.name());
+            final AbstractUIStyle style = (AbstractUIStyle) facesContext.getApplication()
+                .createComponent(facesContext, Tags.style.componentType(), RendererTypes.Style.name());
             style.setTransient(true);
             style.setBackgroundImage(image);
             style.setSelector(
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/Style.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/Style.java
index dbd0569..18e606e 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/Style.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/Style.java
@@ -19,7 +19,7 @@
 
 package org.apache.myfaces.tobago.renderkit.css;
 
-import org.apache.myfaces.tobago.component.UIStyle;
+import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
 import org.apache.myfaces.tobago.layout.Display;
 import org.apache.myfaces.tobago.layout.Measure;
 import org.apache.myfaces.tobago.layout.Overflow;
@@ -115,7 +115,7 @@ public class Style implements Serializable {
    * @deprecated since 4.0.0
    */
   @Deprecated
-  public Style(final UIStyle style) {
+  public Style(final AbstractUIStyle style) {
 
     width = style.getWidth();
     height = style.getHeight();
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeListbox.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/component/TagsUnitTest.java
similarity index 59%
copy from tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeListbox.java
copy to tobago-core/src/test/java/org/apache/myfaces/tobago/component/TagsUnitTest.java
index 818cbd8..d5e24e4 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeListbox.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/component/TagsUnitTest.java
@@ -17,15 +17,27 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.internal.component;
+package org.apache.myfaces.tobago.component;
 
-/**
- * {@link org.apache.myfaces.tobago.internal.taglib.component.TreeListboxTagDeclaration}
- */
-public abstract class AbstractUITreeListbox extends AbstractUITree {
+import org.apache.myfaces.tobago.internal.util.StringUtils;
+import org.apache.myfaces.tobago.util.EnumUnitTest;
+import org.junit.Test;
+
+public class TagsUnitTest extends EnumUnitTest {
+
+  @Test
+  public void testNames() throws IllegalAccessException, NoSuchFieldException {
+
+    testNames(Tags.class);
+  }
+
+  @Override
+  protected String getEnumRegexp() {
+    return "[a-z][a-zA-Z]*";
+  }
 
   @Override
-  public boolean isShowRoot() {
-    return false;
+  protected String constantCaseToEnum(final String constant) {
+    return StringUtils.constantToLowerCamelCase(constant);
   }
 }
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/component/AbstractUIGridLayoutUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/component/AbstractUIGridLayoutUnitTest.java
index 7857bf4..844b04e 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/component/AbstractUIGridLayoutUnitTest.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/component/AbstractUIGridLayoutUnitTest.java
@@ -21,8 +21,7 @@ package org.apache.myfaces.tobago.internal.component;
 
 import org.apache.myfaces.tobago.component.Attributes;
 import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.UIGridLayout;
-import org.apache.myfaces.tobago.component.UIPanel;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.internal.config.AbstractTobagoTestBase;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 import org.junit.Assert;
@@ -38,7 +37,8 @@ public class AbstractUIGridLayoutUnitTest extends AbstractTobagoTestBase {
 
   @Test
   public void test1() {
-    final UIGridLayout grid = new UIGridLayout();
+    final AbstractUIGridLayout grid = (AbstractUIGridLayout) ComponentUtils.createComponent(
+        facesContext, Tags.gridLayout.componentType(), RendererTypes.GridLayout, null);
 
     final UIComponent a = createComponent("a");
     final UIComponent b = createComponent("b");
@@ -65,12 +65,13 @@ public class AbstractUIGridLayoutUnitTest extends AbstractTobagoTestBase {
     Assert.assertEquals(X, cells[1][1]);
     Assert.assertEquals(e, cells[2][0]);
     Assert.assertEquals(d, cells[2][1]);
-
   }
 
+
   @Test
   public void test2() {
-    final UIGridLayout grid = new UIGridLayout();
+    final AbstractUIGridLayout grid = (AbstractUIGridLayout) ComponentUtils.createComponent(
+        facesContext, Tags.gridLayout.componentType(), RendererTypes.GridLayout, null);
 
     final UIComponent a = createComponent("a");
     final UIComponent b = createComponent("b");
@@ -101,7 +102,8 @@ public class AbstractUIGridLayoutUnitTest extends AbstractTobagoTestBase {
 
   @Test
   public void test3() {
-    final UIGridLayout grid = new UIGridLayout();
+    final AbstractUIGridLayout grid = (AbstractUIGridLayout) ComponentUtils.createComponent(
+        facesContext, Tags.gridLayout.componentType(), RendererTypes.GridLayout, null);
 
     final UIComponent a = createComponent("a");
     a.getAttributes().put(Attributes.rowSpan.getName(), 7);
@@ -150,7 +152,8 @@ public class AbstractUIGridLayoutUnitTest extends AbstractTobagoTestBase {
 
   @Test
   public void test4() {
-    final UIGridLayout grid = new UIGridLayout();
+    final AbstractUIGridLayout grid = (AbstractUIGridLayout) ComponentUtils.createComponent(
+        facesContext, Tags.gridLayout.componentType(), RendererTypes.GridLayout, null);
 
     final UIComponent a = createComponent("a");
     final UIComponent b = createComponent("b");
@@ -170,7 +173,8 @@ public class AbstractUIGridLayoutUnitTest extends AbstractTobagoTestBase {
 
   @Test
   public void test5() {
-    final UIGridLayout grid = new UIGridLayout();
+    final AbstractUIGridLayout grid = (AbstractUIGridLayout) ComponentUtils.createComponent(
+        facesContext, Tags.gridLayout.componentType(), RendererTypes.GridLayout, null);
 
     final UIComponent a = createComponent("a");
     final UIComponent b = createComponent("b");
@@ -217,7 +221,8 @@ public class AbstractUIGridLayoutUnitTest extends AbstractTobagoTestBase {
 
   @Test
   public void testExpand() {
-    final UIGridLayout grid = new UIGridLayout();
+    final AbstractUIGridLayout grid = (AbstractUIGridLayout) ComponentUtils.createComponent(
+        facesContext, Tags.gridLayout.componentType(), RendererTypes.GridLayout, null);
 
     final UIComponent a = createComponent("a");
     final UIComponent b = createComponent("b");
@@ -238,12 +243,12 @@ public class AbstractUIGridLayoutUnitTest extends AbstractTobagoTestBase {
     Assert.assertEquals(7, expand.length);
     Assert.assertEquals(5, expand[0].length);
 
-    Assert.assertEquals(null, expand[1][1]);
-    Assert.assertEquals(null, expand[6][1]);
+    Assert.assertNull(expand[1][1]);
+    Assert.assertNull(expand[6][1]);
   }
 
   private UIComponent createComponent(final String id) {
-    return ComponentUtils.createComponent(facesContext, UIPanel.COMPONENT_TYPE, RendererTypes.Panel, id);
+    return ComponentUtils.createComponent(facesContext, Tags.panel.componentType(), RendererTypes.Panel, id);
   }
 
   private static String toString(final UIComponent[][] cells) {
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
index e2fa01a..f7011bd 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
@@ -22,7 +22,9 @@ package org.apache.myfaces.tobago.internal.config;
 import org.apache.myfaces.test.base.junit4.AbstractJsfTestCase;
 import org.apache.myfaces.test.mock.MockFacesContext;
 import org.apache.myfaces.test.mock.MockHttpServletRequest;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.component.UIButton;
+import org.apache.myfaces.tobago.component.UIGridLayout;
 import org.apache.myfaces.tobago.component.UIIn;
 import org.apache.myfaces.tobago.component.UILink;
 import org.apache.myfaces.tobago.component.UIOut;
@@ -97,15 +99,14 @@ public abstract class AbstractTobagoTestBase extends AbstractJsfTestCase {
     request.setAttribute(TobagoContext.BEAN_NAME, tobagoContext);
 
     // XXX is there a better way? Get it from Tobagos generated faces-config.xml?
-    application.addComponent(UIIn.COMPONENT_TYPE, UIIn.class.getName());
-    application.addComponent(UIOut.COMPONENT_TYPE, UIOut.class.getName());
-    application.addComponent(UIPanel.COMPONENT_TYPE, UIPanel.class.getName());
-    application.addComponent(
-        javax.faces.component.UICommand.COMPONENT_TYPE, javax.faces.component.UICommand.class.getName());
-    application.addComponent(UILink.COMPONENT_TYPE, UILink.class.getName());
-    application.addComponent(UIButton.COMPONENT_TYPE, UIButton.class.getName());
-    application.addComponent(UIPopup.COMPONENT_TYPE, UIPopup.class.getName());
-    application.addComponent(UIStyle.COMPONENT_TYPE, UIStyle.class.getName());
+    application.addComponent(Tags.in.componentType(), UIIn.class.getName());
+    application.addComponent(Tags.out.componentType(), UIOut.class.getName());
+    application.addComponent(Tags.panel.componentType(), UIPanel.class.getName());
+    application.addComponent(Tags.link.componentType(), UILink.class.getName());
+    application.addComponent(Tags.button.componentType(), UIButton.class.getName());
+    application.addComponent(Tags.popup.componentType(), UIPopup.class.getName());
+    application.addComponent(Tags.style.componentType(), UIStyle.class.getName());
+    application.addComponent(Tags.gridLayout.componentType(), UIGridLayout.class.getName());
 
     tobagoConfig.lock();
   }
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/util/JsonUtilsUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/util/JsonUtilsUnitTest.java
index 49bc9f7..48c988d 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/util/JsonUtilsUnitTest.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/util/JsonUtilsUnitTest.java
@@ -22,7 +22,7 @@ package org.apache.myfaces.tobago.internal.util;
 import org.apache.myfaces.tobago.component.Attributes;
 import org.apache.myfaces.tobago.component.ClientBehaviors;
 import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.UIButton;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUICommand;
 import org.apache.myfaces.tobago.internal.config.AbstractTobagoTestBase;
@@ -84,7 +84,7 @@ public class JsonUtilsUnitTest extends AbstractTobagoTestBase {
   public void more() {
     final CommandMap map = new CommandMap();
     final AbstractUICommand command = (AbstractUICommand)
-        ComponentUtils.createComponent(facesContext, UIButton.COMPONENT_TYPE, RendererTypes.Button, "command");
+        ComponentUtils.createComponent(facesContext, Tags.button.componentType(), RendererTypes.Button, "command");
     ComponentUtils.setAttribute(command, Attributes.popupClose, "immediate");
 
     map.setClick(new Command(
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/util/ComponentUtilsUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/util/ComponentUtilsUnitTest.java
index fe160d5..4cd6544 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/util/ComponentUtilsUnitTest.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/util/ComponentUtilsUnitTest.java
@@ -20,9 +20,9 @@
 package org.apache.myfaces.tobago.util;
 
 import org.apache.myfaces.tobago.component.RendererTypes;
+import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.component.UIIn;
 import org.apache.myfaces.tobago.component.UIOut;
-import org.apache.myfaces.tobago.component.UIPanel;
 import org.apache.myfaces.tobago.internal.config.AbstractTobagoTestBase;
 import org.junit.Assert;
 import org.junit.Test;
@@ -46,9 +46,9 @@ public class ComponentUtilsUnitTest extends AbstractTobagoTestBase {
   public void testFindDescendant() {
     final FacesContext facesContext = FacesContext.getCurrentInstance();
     final UIComponent p = ComponentUtils.createComponent(
-        facesContext, UIPanel.COMPONENT_TYPE, RendererTypes.Panel, "p");
+        facesContext, Tags.panel.componentType(), RendererTypes.Panel, "p");
     final UIComponent i = ComponentUtils.createComponent(
-        facesContext, UIIn.COMPONENT_TYPE, RendererTypes.In, "i");
+        facesContext, Tags.in.componentType(), RendererTypes.In, "i");
     p.getChildren().add(i);
 
     final UIIn in = ComponentUtils.findDescendant(p, UIIn.class);
diff --git a/tobago-tool/tobago-tool-annotation/src/main/java/org/apache/myfaces/tobago/apt/annotation/UIComponentTag.java b/tobago-tool/tobago-tool-annotation/src/main/java/org/apache/myfaces/tobago/apt/annotation/UIComponentTag.java
index 310bb6c..ee929ab 100644
--- a/tobago-tool/tobago-tool-annotation/src/main/java/org/apache/myfaces/tobago/apt/annotation/UIComponentTag.java
+++ b/tobago-tool/tobago-tool-annotation/src/main/java/org/apache/myfaces/tobago/apt/annotation/UIComponentTag.java
@@ -31,10 +31,18 @@ public @interface UIComponentTag {
 
   String uiComponent();
 
-  String uiComponentBaseClass() default "javax.faces.component.UIComponentBase";
+  /**
+   * @deprecated since 4.4.0. Will set automatically.
+   */
+  @Deprecated
+  String uiComponentBaseClass() default "";
 
   String uiComponentFacesClass() default "javax.faces.component.UIComponentBase";
 
+  /**
+   * @deprecated since 4.4.0. Will set automatically.
+   */
+  @Deprecated
   String componentType() default "";
 
   String componentFamily() default "";
diff --git a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/AnnotationUtils.java b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/AnnotationUtils.java
index 222b941..d55be7c 100644
--- a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/AnnotationUtils.java
+++ b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/AnnotationUtils.java
@@ -28,6 +28,10 @@ public final class AnnotationUtils {
   private AnnotationUtils() {
   }
 
+  /**
+   * @deprecated since 4.4.0. Will set automatically.
+   */
+  @Deprecated
   public static String componentType(final UIComponentTag componentTag) {
     final String s = componentTag.componentType();
     if (s != null && s.length() > 0) {
diff --git a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/ClassUtils.java b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/ClassUtils.java
index e2a6f3d..2c1d367 100644
--- a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/ClassUtils.java
+++ b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/ClassUtils.java
@@ -57,6 +57,15 @@ public class ClassUtils {
     return null;
   }
 
+  public static String getSmallSimpleName(final String qualifiedName) {
+    final String simpleName = getSimpleName(qualifiedName);
+    if (simpleName != null && simpleName.length() > 2) {
+      return simpleName.substring(2, 3).toLowerCase() + simpleName.substring(3);
+    } else {
+      return simpleName;
+    }
+  }
+
   public static boolean isSystemClass(final String qualifiedClassName) {
     return qualifiedClassName.startsWith("java.lang.");
   }
diff --git a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/TagInfo.java b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/TagInfo.java
index de60885..876f534 100644
--- a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/TagInfo.java
+++ b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/TagInfo.java
@@ -26,15 +26,25 @@ import java.util.List;
 public class TagInfo extends RendererInfo {
   private List<PropertyInfo> properties = new ArrayList<>();
   private String componentClassName;
+  /**
+   * @deprecated since 4.4.0
+   */
+  @Deprecated
   private String componentType;
+  private String tagName;
   private String componentFamily;
   private PropertyInfo bodyContent;
   private boolean checkBodyContent;
 
   public TagInfo(final String sourceClass, final String qualifiedName, final String[] rendererType) {
     super(sourceClass, qualifiedName, rendererType);
+    tagName = ClassUtils.getSmallSimpleName(qualifiedName);
   }
 
+  /**
+   * @deprecated since 4.4.0
+   */
+  @Deprecated
   public TagInfo(final String sourceClass, final String qualifiedName) {
     super(sourceClass, qualifiedName);
   }
@@ -92,4 +102,8 @@ public class TagInfo extends RendererInfo {
   public void setComponentFamily(final String componentFamily) {
     this.componentFamily = componentFamily;
   }
+
+  public String getTagName() {
+    return tagName;
+  }
 }
diff --git a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/ClassesGenerator.java b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/ClassesGenerator.java
index c1c6a71..9868c47 100644
--- a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/ClassesGenerator.java
+++ b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/ClassesGenerator.java
@@ -24,6 +24,7 @@ import org.antlr.stringtemplate.StringTemplateGroup;
 import org.apache.commons.io.IOUtils;
 import org.apache.myfaces.tobago.apt.annotation.Behavior;
 import org.apache.myfaces.tobago.apt.annotation.DynamicExpression;
+import org.apache.myfaces.tobago.apt.annotation.Tag;
 import org.apache.myfaces.tobago.apt.annotation.TagAttribute;
 import org.apache.myfaces.tobago.apt.annotation.UIComponentTag;
 import org.apache.myfaces.tobago.apt.annotation.UIComponentTagAttribute;
@@ -105,9 +106,24 @@ public class ClassesGenerator extends AbstractGenerator {
     addProperties(declaration, properties);
 
     if (componentTag.generate()) {
+      final Tag tag = declaration.getAnnotation(Tag.class);
+      final String generic = "org.apache.myfaces.tobago.internal.component.AbstractUI"
+          +  tag.name().substring(0,1).toUpperCase() + tag.name().substring(1);
       final StringTemplate componentStringTemplate = componentStringTemplateGroup.getInstanceOf("component");
       final ComponentInfo componentInfo = new ComponentInfo(declaration, componentTag);
-      componentInfo.setSuperClass(componentTag.uiComponentBaseClass());
+      String componentBaseClass = componentTag.uiComponentBaseClass();
+      if ("".equals(componentBaseClass)) {
+        componentBaseClass = generic;
+      }
+      componentInfo.setSuperClass(componentBaseClass);
+
+      // check
+      if (! componentBaseClass.equals(generic)) {
+        warn("**********************************************************************************");
+        warn("generic name is unequal to the defined name: " + componentBaseClass + " != " + generic);
+        warn("**********************************************************************************");
+      }
+
       componentInfo.setDescription(getDescription(declaration));
       componentInfo.setDeprecated(declaration.getAnnotation(Deprecated.class) != null);
       for (final String interfaces : componentTag.interfaces()) {
diff --git a/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component.stg b/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component.stg
index ab6c417..9d3937e 100644
--- a/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component.stg
+++ b/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component.stg
@@ -43,6 +43,7 @@ package <componentInfo.packageName>;
 import org.apache.myfaces.tobago.internal.util.ArrayUtils;
 import org.apache.myfaces.tobago.internal.util.StringUtils;
 import org.apache.myfaces.tobago.internal.util.Deprecation;
+import org.apache.myfaces.tobago.component.Tags;
 import javax.annotation.Generated;
 import javax.el.ELException;
 import javax.faces.FacesException;
@@ -72,7 +73,7 @@ public class <componentInfo.className>
     extends <componentInfo.superClassName> <first(componentInfo.interfaces):{ n | implements <n>}><rest(componentInfo.interfaces):{ n |, <n>}> {
 
   <if(componentInfo.componentType)>
-  public static final String COMPONENT_TYPE = "<componentInfo.componentType>";
+  public static final String COMPONENT_TYPE = Tags.<componentInfo.tagName>.componentType();
 
   <endif>
   <if(componentInfo.componentFamily)>