You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2026/06/18 16:11:39 UTC

(myfaces) branch main updated: cosmetics

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

tandraschko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/myfaces.git


The following commit(s) were added to refs/heads/main by this push:
     new 29fc7352f cosmetics
29fc7352f is described below

commit 29fc7352f4b0543346338e89e7de75bc9a20eba8
Author: tandraschko <ta...@apache.org>
AuthorDate: Thu Jun 18 18:11:29 2026 +0200

    cosmetics
---
 api/src/client/package-lock.json                   |  40 ++++-
 .../java/jakarta/faces/component/UICommand.java    |   4 +-
 .../java/jakarta/faces/component/UIComponent.java  |  12 +-
 .../jakarta/faces/component/UIComponentBase.java   |  25 ++--
 .../main/java/jakarta/faces/component/UIForm.java  |   4 +-
 .../jakarta/faces/component/UIImportConstants.java |   4 +-
 .../main/java/jakarta/faces/component/UIInput.java |  10 +-
 .../jakarta/faces/component/UINamingContainer.java |   2 +-
 .../jakarta/faces/component/UIOutcomeTarget.java   |   8 +-
 .../java/jakarta/faces/component/UIOutput.java     |   5 +-
 .../java/jakarta/faces/component/UISelectOne.java  |   2 +-
 .../java/jakarta/faces/component/UIViewAction.java |  10 +-
 .../jakarta/faces/component/UIViewParameter.java   |   2 +-
 .../java/jakarta/faces/component/UIViewRoot.java   |  22 +--
 .../faces/component/behavior/AjaxBehavior.java     |  18 +--
 .../core/api/shared/SharedRendererUtils.java       |  12 +-
 .../myfaces/push/WebsocketComponentRenderer.java   |   4 +-
 .../apache/myfaces/push/WebsocketInitRenderer.java |  10 +-
 .../apache/myfaces/renderkit/LazyRenderKit.java    |   2 +-
 .../apache/myfaces/renderkit/RendererUtils.java    |  40 ++---
 .../renderkit/html/HtmlDoctypeRenderer.java        |   2 +-
 .../myfaces/renderkit/html/HtmlFormRenderer.java   |   3 +-
 .../myfaces/renderkit/html/HtmlFormatRenderer.java |   8 +-
 .../myfaces/renderkit/html/HtmlHeadRenderer.java   |   2 +-
 .../myfaces/renderkit/html/HtmlHiddenRenderer.java |   2 +-
 .../renderkit/html/base/HtmlBodyRendererBase.java  |   8 +-
 .../html/base/HtmlButtonRendererBase.java          |   6 +-
 .../html/base/HtmlCheckboxRendererBase.java        |  10 +-
 .../renderkit/html/base/HtmlFormRendererBase.java  |  59 ++++----
 .../renderkit/html/base/HtmlGridRendererBase.java  |   8 +-
 .../renderkit/html/base/HtmlGroupRendererBase.java |  10 +-
 .../renderkit/html/base/HtmlImageRendererBase.java |  43 +++---
 .../html/base/HtmlInputFileRendererBase.java       |  21 ++-
 .../renderkit/html/base/HtmlLinkRendererBase.java  |   8 +-
 .../html/base/HtmlListboxRendererBase.java         |  20 ++-
 .../renderkit/html/base/HtmlMenuRendererBase.java  |  18 +--
 .../html/base/HtmlMessageRendererBase.java         |  20 +--
 .../html/base/HtmlMessagesRendererBase.java        |   2 +-
 .../base/HtmlOutcomeTargetButtonRendererBase.java  |  68 +++++----
 .../renderkit/html/base/HtmlRadioRendererBase.java |  14 +-
 .../myfaces/renderkit/html/base/HtmlRenderer.java  |   4 +-
 .../html/base/HtmlSecretRendererBase.java          |  12 +-
 .../html/base/HtmlSelectableRendererBase.java      |   5 +-
 .../renderkit/html/util/HtmlRendererUtils.java     | 164 ++++++++++-----------
 .../view/facelets/component/RepeatRenderer.java    |   8 +-
 .../myfaces/view/facelets/component/UIRepeat.java  |  16 +-
 .../faces/ClearBindingValueExpressionListener.java |   6 +-
 47 files changed, 388 insertions(+), 395 deletions(-)

diff --git a/api/src/client/package-lock.json b/api/src/client/package-lock.json
index d3d4bd52e..966da778b 100644
--- a/api/src/client/package-lock.json
+++ b/api/src/client/package-lock.json
@@ -125,6 +125,7 @@
       "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@babel/code-frame": "^7.29.0",
         "@babel/generator": "^7.29.0",
@@ -500,6 +501,7 @@
         }
       ],
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">=20.19.0"
       },
@@ -548,6 +550,7 @@
         }
       ],
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">=20.19.0"
       }
@@ -2127,6 +2130,7 @@
       "integrity": "sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "undici-types": ">=7.24.0 <7.24.7"
       }
@@ -2420,6 +2424,7 @@
       "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "bin": {
         "acorn": "bin/acorn"
       },
@@ -2468,6 +2473,7 @@
       "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "fast-deep-equal": "^3.1.3",
         "fast-uri": "^3.0.1",
@@ -2835,6 +2841,7 @@
         }
       ],
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "baseline-browser-mapping": "^2.9.0",
         "caniuse-lite": "^1.0.30001759",
@@ -5236,6 +5243,7 @@
       "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@asamuzakjp/css-color": "^5.1.11",
         "@asamuzakjp/dom-selector": "^7.1.1",
@@ -5878,6 +5886,7 @@
       "integrity": "sha512-G5UyHinFkB1BxqGTrmZdB6uIYH0+v7ZnVssuflUDi+J+RhKWyAhRT1RCehBSI6jLFLuUUgFDyLt49mUtdO1XeQ==",
       "dev": true,
       "license": "ISC",
+      "peer": true,
       "dependencies": {
         "@istanbuljs/load-nyc-config": "^1.0.0",
         "@istanbuljs/schema": "^0.1.2",
@@ -7811,6 +7820,7 @@
       "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">=12"
       },
@@ -7994,7 +8004,8 @@
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
       "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
       "dev": true,
-      "license": "0BSD"
+      "license": "0BSD",
+      "peer": true
     },
     "node_modules/tsx": {
       "version": "4.22.4",
@@ -8145,6 +8156,7 @@
       "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
       "dev": true,
       "license": "Apache-2.0",
+      "peer": true,
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
@@ -8325,6 +8337,7 @@
       "integrity": "sha512-v7RhXaJbpMlV0D7hC7lb2EbnxkoeUqf9qhKr6lozx3Q48pmFrqqNRmZFUEGmi7pSwm6fCQ2H1IjvCkHqdpVdjQ==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@types/estree": "^1.0.8",
         "@types/json-schema": "^7.0.15",
@@ -8478,6 +8491,7 @@
       "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.4.tgz",
       "integrity": "sha512-GqDPGZN9bRqKBTkp4aWkobDDHMsrXKoGSdOH56smIri8qR0JG8gfL8/v/f/OZR3/OKXjG8uwJbFVhKm/FNU/UA==",
       "dev": true,
+      "peer": true,
       "dependencies": {
         "@types/bonjour": "^3.5.13",
         "@types/connect-history-api-fallback": "^1.5.4",
@@ -8939,6 +8953,7 @@
       "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
       "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
       "dev": true,
+      "peer": true,
       "requires": {
         "@babel/code-frame": "^7.29.0",
         "@babel/generator": "^7.29.0",
@@ -9178,6 +9193,7 @@
       "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz",
       "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==",
       "dev": true,
+      "peer": true,
       "requires": {}
     },
     "@csstools/css-syntax-patches-for-csstree": {
@@ -9191,7 +9207,8 @@
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz",
       "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==",
-      "dev": true
+      "dev": true,
+      "peer": true
     },
     "@discoveryjs/json-ext": {
       "version": "1.1.0",
@@ -10250,6 +10267,7 @@
       "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.3.tgz",
       "integrity": "sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==",
       "dev": true,
+      "peer": true,
       "requires": {
         "undici-types": ">=7.24.0 <7.24.7"
       }
@@ -10513,7 +10531,8 @@
       "version": "8.16.0",
       "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
       "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
-      "dev": true
+      "dev": true,
+      "peer": true
     },
     "acorn-import-phases": {
       "version": "1.0.4",
@@ -10543,6 +10562,7 @@
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
       "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
       "dev": true,
+      "peer": true,
       "requires": {
         "fast-deep-equal": "^3.1.3",
         "fast-uri": "^3.0.1",
@@ -10805,6 +10825,7 @@
       "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
       "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
       "dev": true,
+      "peer": true,
       "requires": {
         "baseline-browser-mapping": "^2.9.0",
         "caniuse-lite": "^1.0.30001759",
@@ -12463,6 +12484,7 @@
       "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz",
       "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==",
       "dev": true,
+      "peer": true,
       "requires": {
         "@asamuzakjp/css-color": "^5.1.11",
         "@asamuzakjp/dom-selector": "^7.1.1",
@@ -12926,6 +12948,7 @@
       "resolved": "https://registry.npmjs.org/nyc/-/nyc-18.0.0.tgz",
       "integrity": "sha512-G5UyHinFkB1BxqGTrmZdB6uIYH0+v7ZnVssuflUDi+J+RhKWyAhRT1RCehBSI6jLFLuUUgFDyLt49mUtdO1XeQ==",
       "dev": true,
+      "peer": true,
       "requires": {
         "@istanbuljs/load-nyc-config": "^1.0.0",
         "@istanbuljs/schema": "^0.1.2",
@@ -14282,7 +14305,8 @@
           "version": "4.0.4",
           "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
           "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
-          "dev": true
+          "dev": true,
+          "peer": true
         }
       }
     },
@@ -14393,7 +14417,8 @@
       "version": "2.8.1",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
       "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
-      "dev": true
+      "dev": true,
+      "peer": true
     },
     "tsx": {
       "version": "4.22.4",
@@ -14496,7 +14521,8 @@
       "version": "6.0.3",
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz",
       "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
-      "dev": true
+      "dev": true,
+      "peer": true
     },
     "uc.micro": {
       "version": "2.1.0",
@@ -14613,6 +14639,7 @@
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.107.2.tgz",
       "integrity": "sha512-v7RhXaJbpMlV0D7hC7lb2EbnxkoeUqf9qhKr6lozx3Q48pmFrqqNRmZFUEGmi7pSwm6fCQ2H1IjvCkHqdpVdjQ==",
       "dev": true,
+      "peer": true,
       "requires": {
         "@types/estree": "^1.0.8",
         "@types/json-schema": "^7.0.15",
@@ -14713,6 +14740,7 @@
       "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.4.tgz",
       "integrity": "sha512-GqDPGZN9bRqKBTkp4aWkobDDHMsrXKoGSdOH56smIri8qR0JG8gfL8/v/f/OZR3/OKXjG8uwJbFVhKm/FNU/UA==",
       "dev": true,
+      "peer": true,
       "requires": {
         "@types/bonjour": "^3.5.13",
         "@types/connect-history-api-fallback": "^1.5.4",
diff --git a/api/src/main/java/jakarta/faces/component/UICommand.java b/api/src/main/java/jakarta/faces/component/UICommand.java
index edf28480a..b629cb507 100644
--- a/api/src/main/java/jakarta/faces/component/UICommand.java
+++ b/api/src/main/java/jakarta/faces/component/UICommand.java
@@ -101,7 +101,7 @@ public void queueEvent(FacesEvent event)
     @Override
     public boolean isImmediate()
     {
-        return (Boolean) getStateHelper().eval(PropertyKeys.immediate, Boolean.FALSE);
+        return getStateHelper().eval(PropertyKeys.immediate, Boolean.FALSE);
     }
 
     @Override
@@ -141,7 +141,7 @@ public void setValue(Object value)
     @Override
     public MethodExpression getActionExpression()
     {
-        return (MethodExpression) getStateHelper().eval(PropertyKeys.actionExpression);
+        return getStateHelper().eval(PropertyKeys.actionExpression);
     }
 
     @Override
diff --git a/api/src/main/java/jakarta/faces/component/UIComponent.java b/api/src/main/java/jakarta/faces/component/UIComponent.java
index 1e926acf5..e8747181d 100755
--- a/api/src/main/java/jakarta/faces/component/UIComponent.java
+++ b/api/src/main/java/jakarta/faces/component/UIComponent.java
@@ -419,8 +419,7 @@ public String getContainerClientId(FacesContext ctx)
      */
     public static UIComponent getCurrentComponent(FacesContext context)
     {
-        List<UIComponent> componentStack
-                = (List<UIComponent>) context.getAttributes().get(UIComponent._COMPONENT_STACK);
+        List<UIComponent> componentStack = (List<UIComponent>) context.getAttributes().get(UIComponent._COMPONENT_STACK);
         if (componentStack != null && !componentStack.isEmpty())
         {
             return componentStack.get(componentStack.size()-1);
@@ -618,8 +617,7 @@ public ValueExpression getValueExpression(String name)
     {
         Assert.notNull(name, "name");
 
-        Map<String, Object> valueExpressions = (Map<String, Object>)
-                getStateHelper().get(PropertyKeys.valueExpressions);
+        Map<String, Object> valueExpressions = getStateHelper().get(PropertyKeys.valueExpressions);
         if (valueExpressions != null)
         {
             return (ValueExpression) valueExpressions.get(name);
@@ -775,8 +773,7 @@ public void processEvent(ComponentSystemEvent event) throws AbortProcessingExcep
                         // avoid StackoverflowException
                         boolean shouldProcessEvent = true;
                         if (listener instanceof _EventListenerWrapper wrapper && 
-                            wrapper.getListenerCapability() ==
-                                _EventListenerWrapper.LISTENER_TYPE_COMPONENT)
+                            wrapper.getListenerCapability() == _EventListenerWrapper.LISTENER_TYPE_COMPONENT)
                         {
                             shouldProcessEvent = false;
                         }
@@ -854,8 +851,7 @@ public void unsubscribeFromEvent(Class<? extends SystemEvent> eventClass,
             {
                 for (Iterator<SystemEventListener> it = listeners.iterator(); it.hasNext(); )
                 {
-                    ComponentSystemEventListener listener
-                            = ((_EventListenerWrapper) it.next()).getComponentSystemEventListener();
+                    ComponentSystemEventListener listener = ((_EventListenerWrapper) it.next()).getComponentSystemEventListener();
                     if (listener != null && listener.equals(componentListener))
                     {
                         it.remove();
diff --git a/api/src/main/java/jakarta/faces/component/UIComponentBase.java b/api/src/main/java/jakarta/faces/component/UIComponentBase.java
index 84f190344..345eb7787 100755
--- a/api/src/main/java/jakarta/faces/component/UIComponentBase.java
+++ b/api/src/main/java/jakarta/faces/component/UIComponentBase.java
@@ -131,7 +131,7 @@ public abstract class UIComponentBase extends UIComponent
     
     private transient FacesContext _facesContext;
     private transient Boolean _cachedIsRendered;
-    private transient Renderer _cachedRenderer;
+    private transient Renderer<? extends UIComponent> _cachedRenderer;
     
     public UIComponentBase()
     {
@@ -608,7 +608,6 @@ public void encodeChildren(FacesContext context) throws IOException
                 else
                 {
                     // If a Renderer is associated with this UIComponent, the actual encoding will be delegated to
-                    // Renderer.encodeChildren(FacesContext, UIComponent).
                     renderer.encodeChildren(context, this);
                 }
             }
@@ -676,7 +675,7 @@ public UIComponent findComponent(String expr)
     {
         Assert.notNull(expr, "expr");
 
-        if (expr.length() == 0)
+        if (expr.isEmpty())
         {
             return null;
         }
@@ -929,7 +928,7 @@ public String getClientId(FacesContext context)
             _clientId = id;
         }
 
-        Renderer renderer = getRenderer(context);
+        Renderer<?> renderer = getRenderer(context);
         if (renderer != null)
         {
             _clientId = renderer.convertClientId(context, _clientId);
@@ -1100,7 +1099,7 @@ public String getRendererType()
     public boolean getRendersChildren()
     {
         Renderer renderer = getRenderer(getFacesContext());
-        return renderer != null ? renderer.getRendersChildren() : false;
+        return renderer != null && renderer.getRendersChildren();
     }
 
     /**
@@ -1158,9 +1157,9 @@ public boolean isRendered()
     {
         if (_cachedIsRendered != null)
         {
-            return Boolean.TRUE.equals(_cachedIsRendered);
+            return _cachedIsRendered;
         }
-        return (Boolean) getStateHelper().eval(PropertyKeys.rendered, DEFAULT_RENDERED);
+        return getStateHelper().eval(PropertyKeys.rendered, DEFAULT_RENDERED);
     }
 
     @JSFProperty(literalOnly = true, istransient = true, tagExcluded = true)
@@ -1176,7 +1175,7 @@ public void markInitialState()
         super.markInitialState();
         
         // Enable copyFullInitialState behavior when delta is written into this component.
-        ((_DeltaStateHelper)getStateHelper()).setCopyFullInitialState(true);
+        ((_DeltaStateHelper) getStateHelper()).setCopyFullInitialState(true);
         
         if (_facesListeners != null && !_facesListeners.isEmpty())
         {
@@ -1264,11 +1263,11 @@ protected FacesListener[] getFacesListeners(Class<? extends FacesListener> clazz
     }
 
     @Override
-    protected Renderer getRenderer(FacesContext context)
+    protected <T extends UIComponent> Renderer<T> getRenderer(FacesContext context)
     {
         Assert.notNull(context, "context");
 
-        Renderer renderer = getCachedRenderer();
+        Renderer<T> renderer = (Renderer<T>) getCachedRenderer();
         if (renderer != null)
         {
             return renderer;
@@ -1280,7 +1279,7 @@ protected Renderer getRenderer(FacesContext context)
         }
         
         RenderKit renderKit = context.getRenderKit();
-        renderer = renderKit.getRenderer(getFamily(), rendererType);
+        renderer = (Renderer<T>) renderKit.getRenderer(getFamily(), rendererType);
         if (renderer == null)
         {
             String location = getComponentLocation(this);
@@ -2349,12 +2348,12 @@ void setCachedFacesContext(FacesContext facesContext)
         _facesContext = facesContext;
     }
     
-    Renderer getCachedRenderer()
+    Renderer<? extends UIComponent> getCachedRenderer()
     {
         return _cachedRenderer;
     }
     
-    void setCachedRenderer(Renderer renderer)
+    void setCachedRenderer(Renderer<? extends UIComponent> renderer)
     {
         _cachedRenderer = renderer;
     }
diff --git a/api/src/main/java/jakarta/faces/component/UIForm.java b/api/src/main/java/jakarta/faces/component/UIForm.java
index 584d39b7c..a1cb17bad 100755
--- a/api/src/main/java/jakarta/faces/component/UIForm.java
+++ b/api/src/main/java/jakarta/faces/component/UIForm.java
@@ -94,7 +94,7 @@ public String createUniqueId(FacesContext context, String seed)
         // UNIQUE_ID_PREFIX, and will be unique within this UIViewRoot.
         if(seed == null)
         {
-            Integer uniqueIdCounter = (Integer) getStateHelper().get(PropertyKeys.uniqueIdCounter);
+            Integer uniqueIdCounter = getStateHelper().get(PropertyKeys.uniqueIdCounter);
             uniqueIdCounter = (uniqueIdCounter == null) ? 0 : uniqueIdCounter;
             getStateHelper().put(PropertyKeys.uniqueIdCounter, (uniqueIdCounter+1));
             return bld.append(UIViewRoot.UNIQUE_ID_PREFIX).append(uniqueIdCounter).toString();    
@@ -427,7 +427,7 @@ public String getContainerClientId(FacesContext ctx)
     @JSFProperty(defaultValue = "true")
     public boolean isPrependId()
     {
-        return (Boolean) getStateHelper().eval(PropertyKeys.prependId, true);
+        return getStateHelper().eval(PropertyKeys.prependId, true);
     }
 
     public void setPrependId(boolean prependId)
diff --git a/api/src/main/java/jakarta/faces/component/UIImportConstants.java b/api/src/main/java/jakarta/faces/component/UIImportConstants.java
index b7bf41885..f40a14fc3 100644
--- a/api/src/main/java/jakarta/faces/component/UIImportConstants.java
+++ b/api/src/main/java/jakarta/faces/component/UIImportConstants.java
@@ -46,7 +46,7 @@ public String getFamily()
     @JSFProperty
     public String getType()
     {
-        return (String) getStateHelper().eval(PropertyKeys.type);
+        return getStateHelper().eval(PropertyKeys.type);
     }
     
     public void setType(String type)
@@ -57,7 +57,7 @@ public void setType(String type)
     @JSFProperty
     public String getVar()
     {
-        return (String) getStateHelper().eval(PropertyKeys.var);
+        return getStateHelper().eval(PropertyKeys.var);
     }
     
     public void setVar(String var)
diff --git a/api/src/main/java/jakarta/faces/component/UIInput.java b/api/src/main/java/jakarta/faces/component/UIInput.java
index 513cfbd33..78521b8fe 100644
--- a/api/src/main/java/jakarta/faces/component/UIInput.java
+++ b/api/src/main/java/jakarta/faces/component/UIInput.java
@@ -834,7 +834,7 @@ public void resetValue()
     @Override
     public boolean isImmediate()
     {
-        return (Boolean) getStateHelper().eval(PropertyKeys.immediate, Boolean.FALSE);
+        return getStateHelper().eval(PropertyKeys.immediate, Boolean.FALSE);
     }
 
     @Override
@@ -857,7 +857,7 @@ public void setImmediate(boolean immediate)
     @Override
     public boolean isRequired()
     {
-        return (Boolean) getStateHelper().eval(PropertyKeys.required, Boolean.FALSE);
+        return getStateHelper().eval(PropertyKeys.required, Boolean.FALSE);
     }
 
     @Override
@@ -875,7 +875,7 @@ public void setRequired(boolean required)
     @JSFProperty
     public String getConverterMessage()
     {
-        return (String) getStateHelper().eval(PropertyKeys.converterMessage);
+        return getStateHelper().eval(PropertyKeys.converterMessage);
     }
 
     public void setConverterMessage(String converterMessage)
@@ -890,7 +890,7 @@ public void setConverterMessage(String converterMessage)
     @JSFProperty
     public String getRequiredMessage()
     {
-        return (String) getStateHelper().eval(PropertyKeys.requiredMessage);
+        return getStateHelper().eval(PropertyKeys.requiredMessage);
     }
 
     public void setRequiredMessage(String requiredMessage)
@@ -979,7 +979,7 @@ public Validator[] getValidators()
     @JSFProperty
     public String getValidatorMessage()
     {
-        return (String) getStateHelper().eval(PropertyKeys.validatorMessage);
+        return getStateHelper().eval(PropertyKeys.validatorMessage);
     }
 
     public void setValidatorMessage(String validatorMessage)
diff --git a/api/src/main/java/jakarta/faces/component/UINamingContainer.java b/api/src/main/java/jakarta/faces/component/UINamingContainer.java
index 3bd21f638..1d4c4a8b3 100644
--- a/api/src/main/java/jakarta/faces/component/UINamingContainer.java
+++ b/api/src/main/java/jakarta/faces/component/UINamingContainer.java
@@ -76,7 +76,7 @@ public String createUniqueId(FacesContext context, String seed)
         // and will be unique within this UIViewRoot.
         if(seed == null)
         {
-            Integer uniqueIdCounter = (Integer) getStateHelper().get(PropertyKeys.uniqueIdCounter);
+            Integer uniqueIdCounter = getStateHelper().get(PropertyKeys.uniqueIdCounter);
             uniqueIdCounter = (uniqueIdCounter == null) ? 0 : uniqueIdCounter;
             getStateHelper().put(PropertyKeys.uniqueIdCounter, (uniqueIdCounter+1));
             return bld.append(UIViewRoot.UNIQUE_ID_PREFIX).append(uniqueIdCounter).toString();    
diff --git a/api/src/main/java/jakarta/faces/component/UIOutcomeTarget.java b/api/src/main/java/jakarta/faces/component/UIOutcomeTarget.java
index 5dc039ba2..a49ff670e 100644
--- a/api/src/main/java/jakarta/faces/component/UIOutcomeTarget.java
+++ b/api/src/main/java/jakarta/faces/component/UIOutcomeTarget.java
@@ -49,9 +49,9 @@ public String getFamily()
     @JSFProperty
     public String getOutcome()
     {
-        String outcome = (String) getStateHelper().eval(PropertyKeys.outcome);
+        String outcome = getStateHelper().eval(PropertyKeys.outcome);
         
-        if(outcome == null && isInView())  //default to the view id
+        if (outcome == null && isInView())  //default to the view id
         {
             return getFacesContext().getViewRoot().getViewId();
         }
@@ -67,7 +67,7 @@ public void setOutcome(String outcome)
     @JSFProperty(defaultValue="false")
     public boolean isIncludeViewParams()
     {        
-        return (Boolean) getStateHelper().eval(PropertyKeys.includeViewParams, DEFAULT_INCLUDEVIEWPARAMS);
+        return getStateHelper().eval(PropertyKeys.includeViewParams, DEFAULT_INCLUDEVIEWPARAMS);
     }
 
     public void setIncludeViewParams(boolean includeViewParams)
@@ -82,7 +82,7 @@ public void setIncludeViewParams(boolean includeViewParams)
     @JSFProperty(defaultValue="false")
     public boolean isDisableClientWindow()
     {        
-        return (Boolean) getStateHelper().eval(PropertyKeys.disableClientWindow, DEFAULT_DISABLE_CLIENT_WINDOW);
+        return getStateHelper().eval(PropertyKeys.disableClientWindow, DEFAULT_DISABLE_CLIENT_WINDOW);
     }
 
     /**
diff --git a/api/src/main/java/jakarta/faces/component/UIOutput.java b/api/src/main/java/jakarta/faces/component/UIOutput.java
index 7a59a62fb..35d8cc747 100644
--- a/api/src/main/java/jakarta/faces/component/UIOutput.java
+++ b/api/src/main/java/jakarta/faces/component/UIOutput.java
@@ -123,7 +123,7 @@ public void setConverter(Converter converter)
     
     private boolean _isSetConverter()
     {
-        Boolean value = (Boolean) getStateHelper().get(PropertyKeys.converterSet);
+        Boolean value = getStateHelper().get(PropertyKeys.converterSet);
         return value == null ? false : value;
     }
     
@@ -131,8 +131,7 @@ private boolean _isSetConverter()
     public void markInitialState()
     {
         super.markInitialState();
-        if (_converter != null && 
-            _converter instanceof PartialStateHolder holder)
+        if (_converter != null && _converter instanceof PartialStateHolder holder)
         {
             holder.markInitialState();
         }
diff --git a/api/src/main/java/jakarta/faces/component/UISelectOne.java b/api/src/main/java/jakarta/faces/component/UISelectOne.java
index fba4feaf2..58679c88c 100644
--- a/api/src/main/java/jakarta/faces/component/UISelectOne.java
+++ b/api/src/main/java/jakarta/faces/component/UISelectOne.java
@@ -229,7 +229,7 @@ public VisitResult visit(VisitContext visitContext, UIComponent target)
 
     public String getGroup()
     {
-        return (String) getStateHelper().eval(PropertyKeys.group);
+        return getStateHelper().eval(PropertyKeys.group);
     }
     
     public void setGroup(String group)
diff --git a/api/src/main/java/jakarta/faces/component/UIViewAction.java b/api/src/main/java/jakarta/faces/component/UIViewAction.java
index 2e85a917f..30b251fa5 100644
--- a/api/src/main/java/jakarta/faces/component/UIViewAction.java
+++ b/api/src/main/java/jakarta/faces/component/UIViewAction.java
@@ -62,7 +62,7 @@ public UIViewAction()
     @Override
     public boolean isRendered() 
     {
-        return (Boolean) getStateHelper().eval(PropertyKeys.renderedAttr, true);
+        return getStateHelper().eval(PropertyKeys.renderedAttr, true);
     }
 
     @Override
@@ -204,7 +204,7 @@ public void decode(FacesContext context)
     @Override
     public boolean isImmediate()
     {
-        return (Boolean) getStateHelper().eval(PropertyKeys.immediate, Boolean.FALSE);
+        return getStateHelper().eval(PropertyKeys.immediate, Boolean.FALSE);
     }
 
     @Override
@@ -217,7 +217,7 @@ public void setImmediate(boolean immediate)
     @Override
     public MethodExpression getActionExpression()
     {
-        return (MethodExpression) getStateHelper().eval(PropertyKeys.actionExpression);
+        return getStateHelper().eval(PropertyKeys.actionExpression);
     }
 
     @Override
@@ -249,7 +249,7 @@ public ActionListener[] getActionListeners()
     @JSFProperty
     public String getPhase()
     {
-        return (String) getStateHelper().get(PropertyKeys.phase);
+        return getStateHelper().get(PropertyKeys.phase);
     }
     
     public void setPhase(String phase)
@@ -260,7 +260,7 @@ public void setPhase(String phase)
     @JSFProperty
     public boolean isOnPostback()
     {
-        return (Boolean) getStateHelper().eval(PropertyKeys.onPostback, Boolean.FALSE);
+        return getStateHelper().eval(PropertyKeys.onPostback, Boolean.FALSE);
     }
 
     public void setOnPostback(boolean onPostback)
diff --git a/api/src/main/java/jakarta/faces/component/UIViewParameter.java b/api/src/main/java/jakarta/faces/component/UIViewParameter.java
index f3381e53b..b9315389f 100644
--- a/api/src/main/java/jakarta/faces/component/UIViewParameter.java
+++ b/api/src/main/java/jakarta/faces/component/UIViewParameter.java
@@ -99,7 +99,7 @@ public void encodeAll(FacesContext context) throws IOException
 
     public String getName()
     {
-        return (String) getStateHelper().eval(PropertyKeys.name);
+        return getStateHelper().eval(PropertyKeys.name);
     }
 
     public String getStringValue(FacesContext context)
diff --git a/api/src/main/java/jakarta/faces/component/UIViewRoot.java b/api/src/main/java/jakarta/faces/component/UIViewRoot.java
index 9cf88f36e..a1933ff7e 100644
--- a/api/src/main/java/jakarta/faces/component/UIViewRoot.java
+++ b/api/src/main/java/jakarta/faces/component/UIViewRoot.java
@@ -479,8 +479,7 @@ public String createUniqueId(FacesContext context, String seed)
         {
             if (isResourceDependencyUniqueId())
             {
-                Integer uniqueIdCounter = (Integer) getStateHelper().get(
-                        PropertyKeys.resourceDependencyUniqueIdCounter);
+                Integer uniqueIdCounter = getStateHelper().get(PropertyKeys.resourceDependencyUniqueIdCounter);
                 uniqueIdCounter = (uniqueIdCounter == null) ? 0 : uniqueIdCounter;
                 getStateHelper().put(PropertyKeys.resourceDependencyUniqueIdCounter, (uniqueIdCounter+1));
                 if (uniqueIdCounter >= ComponentUtils.UNIQUE_COMPONENT_RD_IDS_SIZE)
@@ -495,7 +494,7 @@ public String createUniqueId(FacesContext context, String seed)
             }
             else
             {
-                Integer uniqueIdCounter = (Integer) getStateHelper().get(PropertyKeys.uniqueIdCounter);
+                Integer uniqueIdCounter = getStateHelper().get(PropertyKeys.uniqueIdCounter);
                 uniqueIdCounter = (uniqueIdCounter == null) ? 0 : uniqueIdCounter;
                 getStateHelper().put(PropertyKeys.uniqueIdCounter, (uniqueIdCounter+1));
                 if (uniqueIdCounter >= ComponentUtils.UNIQUE_COMPONENT_V_IDS_SIZE)
@@ -655,7 +654,7 @@ public void encodeEnd(FacesContext context) throws IOException
     @JSFProperty(returnSignature = "void", methodSignature = "jakarta.faces.event.PhaseEvent", stateHolder=true)
     public MethodExpression getAfterPhaseListener()
     {
-        return (MethodExpression) getStateHelper().eval(PropertyKeys.afterPhaseListener);
+        return getStateHelper().eval(PropertyKeys.afterPhaseListener);
     }
 
     /**
@@ -667,7 +666,7 @@ public MethodExpression getAfterPhaseListener()
     @JSFProperty(returnSignature = "void", methodSignature = "jakarta.faces.event.PhaseEvent", stateHolder=true)
     public MethodExpression getBeforePhaseListener()
     {
-        return (MethodExpression) getStateHelper().eval(PropertyKeys.beforePhaseListener);
+        return getStateHelper().eval(PropertyKeys.beforePhaseListener);
     }
 
     /**
@@ -832,7 +831,7 @@ else if (locale instanceof String string)
      */
     public List<PhaseListener> getPhaseListeners()
     {
-        List<PhaseListener> listeners = (List<PhaseListener>) getStateHelper().get(PropertyKeys.phaseListeners);
+        List<PhaseListener> listeners = getStateHelper().get(PropertyKeys.phaseListeners);
         if (listeners == null)
         {
             listeners = Collections.emptyList();
@@ -851,7 +850,7 @@ public List<PhaseListener> getPhaseListeners()
     @JSFProperty
     public String getRenderKitId()
     {
-        return (String) getStateHelper().eval(PropertyKeys.renderKitId);
+        return getStateHelper().eval(PropertyKeys.renderKitId);
     }
 
     /**
@@ -876,7 +875,7 @@ public boolean getRendersChildren()
     @JSFProperty(tagExcluded = true)
     public String getViewId()
     {
-        return (String) getStateHelper().get(PropertyKeys.viewId);
+        return getStateHelper().get(PropertyKeys.viewId);
     }
 
     /**
@@ -956,7 +955,8 @@ public void queueEvent(FacesEvent event)
         }
 
         List<FacesEvent> eventsByPhaseId = _events.get(event.getPhaseId());
-        if (eventsByPhaseId == null) {
+        if (eventsByPhaseId == null)
+        {
             eventsByPhaseId = new ArrayList<>(5);
             _events.put(event.getPhaseId(), eventsByPhaseId);
         }
@@ -1001,7 +1001,7 @@ public void setLocale(Locale locale)
     private boolean notifyListeners(FacesContext context, PhaseId phaseId, MethodExpression listener,
                                     boolean beforePhase)
     {
-        List<PhaseListener> phaseListeners = (List<PhaseListener>) getStateHelper().get(PropertyKeys.phaseListeners);
+        List<PhaseListener> phaseListeners = getStateHelper().get(PropertyKeys.phaseListeners);
         // Check if any listener was called
         boolean listenerCalled = false;
         if (listener != null || (phaseListeners != null && !phaseListeners.isEmpty()))
@@ -1708,7 +1708,7 @@ public void subscribeToViewEvent(Class<? extends SystemEvent> systemEvent, Syste
         listeners = _systemEventListeners.get(systemEvent);
         if (listeners == null)
         {
-            listeners = new ArrayList<SystemEventListener>();
+            listeners = new ArrayList<>();
 
             _systemEventListeners.put(systemEvent, listeners);
         }
diff --git a/api/src/main/java/jakarta/faces/component/behavior/AjaxBehavior.java b/api/src/main/java/jakarta/faces/component/behavior/AjaxBehavior.java
index 329dae8ab..2868537c4 100644
--- a/api/src/main/java/jakarta/faces/component/behavior/AjaxBehavior.java
+++ b/api/src/main/java/jakarta/faces/component/behavior/AjaxBehavior.java
@@ -101,7 +101,7 @@ public void setExecute(Collection<String> execute)
 
     public String getOnerror() 
     {
-        return (String) getStateHelper().eval(ATTR_ON_ERROR);
+        return getStateHelper().eval(ATTR_ON_ERROR);
     }
 
     public void setOnerror(String onError) 
@@ -111,7 +111,7 @@ public void setOnerror(String onError)
 
     public String getOnevent() 
     {
-        return (String) getStateHelper().eval(ATTR_ON_EVENT);
+        return getStateHelper().eval(ATTR_ON_EVENT);
     }
 
     public void setOnevent(String onEvent) 
@@ -132,13 +132,11 @@ public void setRender(Collection<String> render)
         getStateHelper().put(ATTR_RENDER, render);
     }
 
-    @SuppressWarnings("unchecked")
     public ValueExpression getValueExpression(String name) 
     {
         Assert.notNull(name, "name");
 
-        Map<String,Object> bindings = (Map<String,Object>) getStateHelper().
-            get(PropertyKeys.bindings);
+        Map<String,Object> bindings = getStateHelper().get(PropertyKeys.bindings);
         if (bindings != null)
         {
             return (ValueExpression) bindings.get(name);
@@ -165,7 +163,7 @@ public void setValueExpression(String name, ValueExpression expression)
 
     public boolean isDisabled() 
     {
-        Boolean retVal = (Boolean) getStateHelper().eval(ATTR_DISABLED);
+        Boolean retVal = getStateHelper().eval(ATTR_DISABLED);
         retVal = (retVal == null) ? false : retVal;
         return retVal;
     }
@@ -177,7 +175,7 @@ public void setDisabled(boolean disabled)
 
     public boolean isImmediate() 
     {
-        Boolean retVal = (Boolean) getStateHelper().eval(ATTR_IMMEDIATE);
+        Boolean retVal = getStateHelper().eval(ATTR_IMMEDIATE);
         retVal = (retVal == null) ? false : retVal;
         return retVal;
     }
@@ -198,7 +196,7 @@ public boolean isImmediateSet()
      */
     public boolean isResetValues()
     {
-        Boolean retVal = (Boolean) getStateHelper().eval(ATTR_RESET_VALUES);
+        Boolean retVal = getStateHelper().eval(ATTR_RESET_VALUES);
         retVal = (retVal == null) ? false : retVal;
         return retVal;
     }
@@ -226,7 +224,7 @@ public boolean isResetValuesSet()
      */
     public String getDelay()
     {
-        return (String) getStateHelper().eval(ATTR_DELAY);
+        return getStateHelper().eval(ATTR_DELAY);
     }
 
     /**
@@ -249,7 +247,7 @@ public void setDelay(String delay)
      */
     public boolean isClearModel()
     {
-        Boolean result = (Boolean) getStateHelper().eval(ATTR_CLEAR_MODEL);
+        Boolean result = getStateHelper().eval(ATTR_CLEAR_MODEL);
         return result != null ? result : false;
     }
 
diff --git a/api/src/main/java/org/apache/myfaces/core/api/shared/SharedRendererUtils.java b/api/src/main/java/org/apache/myfaces/core/api/shared/SharedRendererUtils.java
index 907a185d2..70f29f025 100755
--- a/api/src/main/java/org/apache/myfaces/core/api/shared/SharedRendererUtils.java
+++ b/api/src/main/java/org/apache/myfaces/core/api/shared/SharedRendererUtils.java
@@ -121,10 +121,10 @@ public static Object getConvertedUISelectManyValue(FacesContext facesContext, UI
         ValueExpression expression = component.getValueExpression("value");
         Object targetForConvertedValues = null;
 
-        Boolean isCollectionCase = false;
+        boolean isCollectionCase = false;
 
         // if the component has an attached converter, use it
-        Converter converter = component.getConverter();
+        Converter<?> converter = component.getConverter();
         // at this point the valueType attribute is handled in shared.
         if (converter == null && considerValueType)
         {
@@ -410,9 +410,9 @@ else if (attribute instanceof Class class1)
      * @param component
      * @return
      */
-    public static Converter getValueTypeConverter(FacesContext facesContext, UISelectMany component)
+    public static <T extends UISelectMany> Converter<?> getValueTypeConverter(FacesContext facesContext, T component)
     {
-        Converter converter = null;
+        Converter<?> converter = null;
         
         Object valueTypeAttr = component.getAttributes().get(VALUE_TYPE_KEY);
         if (valueTypeAttr != null)
@@ -455,13 +455,13 @@ public static Converter getValueTypeConverter(FacesContext facesContext, UISelec
      * @param facesContext
      * @return The first suitable Converter for the given SelectItems or null.
      */
-    public static Converter getSelectItemsValueConverter(Iterator<SelectItem> iterator, FacesContext facesContext)
+    public static Converter<?> getSelectItemsValueConverter(Iterator<SelectItem> iterator, FacesContext facesContext)
     {
         // Attention!
         // This code is duplicated in jsfapi component package.
         // If you change something here please do the same in the other class!
         
-        Converter converter = null;
+        Converter<?> converter = null;
         while (converter == null && iterator.hasNext())
         {
             SelectItem item = iterator.next();
diff --git a/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java b/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java
index e04981e53..b9a78be82 100644
--- a/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java
@@ -98,7 +98,7 @@ public void encodeBegin(FacesContext facesContext, UIComponent component) throws
         // Render the tag that will be embedded into the DOM tree that helps to detect if the message
         // must be processed or not and if the connection must be closed.
         writer.startElement(HTML.DIV_ELEM, component);
-        writer.writeAttribute(HTML.ID_ATTR, component.getClientId() ,null);
+        writer.writeAttribute(HTML.ID_ATTR, component.getClientId(facesContext) ,null);
         writer.writeAttribute(HTML.STYLE_ATTR, "display:none", null);
         writer.endElement(HTML.DIV_ELEM);
         
@@ -211,7 +211,7 @@ public void encodeEnd(FacesContext facesContext, UIComponent c) throws IOExcepti
         StringBuilder sb = new StringBuilder(50);
         sb.append("faces.push.init(");
         sb.append('\'');
-        sb.append(component.getClientId());
+        sb.append(component.getClientId(facesContext));
         sb.append('\'');
         sb.append(',');
         sb.append('\'');
diff --git a/impl/src/main/java/org/apache/myfaces/push/WebsocketInitRenderer.java b/impl/src/main/java/org/apache/myfaces/push/WebsocketInitRenderer.java
index 402518471..ddf744ae3 100644
--- a/impl/src/main/java/org/apache/myfaces/push/WebsocketInitRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/push/WebsocketInitRenderer.java
@@ -20,7 +20,6 @@
 package org.apache.myfaces.push;
 
 import java.io.IOException;
-import jakarta.faces.component.UIComponent;
 import jakarta.faces.context.FacesContext;
 import jakarta.faces.context.ResponseWriter;
 import jakarta.faces.render.Renderer;
@@ -29,20 +28,19 @@
 @JSFRenderer(renderKitId = "HTML_BASIC",
     family = "jakarta.faces.Output",
     type = "org.apache.myfaces.WebsocketInit")
-public class WebsocketInitRenderer extends Renderer
+public class WebsocketInitRenderer extends Renderer<WebsocketInit>
 {
 
     @Override
-    public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException
+    public void encodeEnd(FacesContext facesContext, WebsocketInit component) throws IOException
     {
         super.encodeEnd(facesContext, component); //check for NP
-        WebsocketInit init = (WebsocketInit) component;
   
         ResponseWriter writer = facesContext.getResponseWriter();
         // If two websocket share the same channel and scope, share init.
-        for (int i = 0; i < init.getUIWebsocketMarkupList().size(); i++)
+        for (int i = 0; i < component.getUIWebsocketMarkupList().size(); i++)
         {
-            String markup = (String) init.getUIWebsocketMarkupList().get(i);
+            String markup = (String) component.getUIWebsocketMarkupList().get(i);
             writer.write(markup);
         }
     }
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/LazyRenderKit.java b/impl/src/main/java/org/apache/myfaces/renderkit/LazyRenderKit.java
index 036ee1d2c..a8bcbc7c9 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/LazyRenderKit.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/LazyRenderKit.java
@@ -27,5 +27,5 @@
  */
 public interface LazyRenderKit
 {
-    public void addRenderer(String componentFamily, String rendererType, String rendererClass);
+    void addRenderer(String componentFamily, String rendererType, String rendererClass);
 }
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java b/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java
index 568d11812..a940df62a 100755
--- a/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java
@@ -381,10 +381,10 @@ else if (value instanceof Short short1)
      * @return the Converter or null if no Converter specified or needed
      * @throws FacesException if the Converter could not be created
      */
-    public static Converter findUIOutputConverter(FacesContext facesContext,
-            UIOutput component) throws FacesException
+    public static <T extends UIOutput> Converter<?> findUIOutputConverter(FacesContext facesContext,
+            T component) throws FacesException
     {
-        Converter converter = component.getConverter();
+        Converter<?> converter = component.getConverter();
         if (converter != null)
         {
             return converter;
@@ -428,12 +428,12 @@ public static Converter findUIOutputConverter(FacesContext facesContext,
      * @return the Converter or null if no Converter specified or needed
      * @throws FacesException if the Converter could not be created
      */
-    public static Converter findUISelectManyConverter(
-            FacesContext facesContext, UISelectMany component,
-            boolean considerValueType)
+    public static <T extends UISelectMany> Converter<?> findUISelectManyConverter(FacesContext facesContext,
+                                                                                  T component,
+                                                                                  boolean considerValueType)
     {
         // If the component has an attached Converter, use it.
-        Converter converter = component.getConverter();
+        Converter<?> converter = component.getConverter();
         if (converter != null)
         {
             return converter;
@@ -472,7 +472,8 @@ public static Converter findUISelectManyConverter(
         if (Collection.class.isAssignableFrom(valueType) || Object.class.equals(valueType))
         {
             // try to get the by-type-converter from the type of the SelectItems
-            return SharedRendererUtils.getSelectItemsValueConverter(new SelectItemsIterator(component, facesContext),
+            return SharedRendererUtils.getSelectItemsValueConverter(
+                    new SelectItemsIterator(component, facesContext),
                     facesContext);
         }
 
@@ -494,7 +495,8 @@ public static Converter findUISelectManyConverter(
         {
             // There is no converter for Object class
             // try to get the by-type-converter from the type of the SelectItems
-            return SharedRendererUtils.getSelectItemsValueConverter(new SelectItemsIterator(component, facesContext),
+            return SharedRendererUtils.getSelectItemsValueConverter(
+                    new SelectItemsIterator(component, facesContext),
                     facesContext);
         }
 
@@ -504,9 +506,7 @@ public static Converter findUISelectManyConverter(
         }
         catch (FacesException e)
         {
-            log.log(Level.SEVERE,
-                    "No Converter for type " + arrayComponentType.getName() + " found",
-                    e);
+            log.log(Level.SEVERE, "No Converter for type " + arrayComponentType.getName() + " found", e);
             return null;
         }
     }
@@ -587,7 +587,7 @@ public static Set getSubmittedValuesAsSet(FacesContext context,
      * @return Set containing all currently selected values
      */
     public static Set getSelectedValuesAsSet(FacesContext context,
-            UIComponent component, Converter converter,
+            UIComponent component, Converter<?> converter,
             UISelectMany uiSelectMany)
     {
         Object selectedValues = uiSelectMany.getValue();
@@ -596,7 +596,7 @@ public static Set getSelectedValuesAsSet(FacesContext context,
     }
 
     private static Set internalSubmittedOrSelectedValuesAsSet(
-            FacesContext context, UIComponent component, Converter converter,
+            FacesContext context, UIComponent component, Converter<?> converter,
             UISelectMany uiSelectMany, Object values,
             boolean allowNonArrayOrCollectionValue)
     {
@@ -666,12 +666,12 @@ public static Object getConvertedUISelectOneValue(
             FacesContext facesContext, UISelectOne output, Object submittedValue)
     {
 
-        if(submittedValue == null || "".equals(submittedValue))
+        if (submittedValue == null || "".equals(submittedValue))
         {
             if (log.isLoggable(Level.FINE))
             {
                 log.fine("No conversion necessary for null / empty string UISelectOne value: client id "
-                            + output.getClientId());
+                            + output.getClientId(facesContext));
             }
             return null;
         }
@@ -683,7 +683,7 @@ public static Object getConvertedUISelectOneValue(
                             + ComponentUtils.getPathToComponent(output) + "expected");
         }
 
-        Converter converter;
+        Converter<?> converter;
         try
         {
             converter = findUIOutputConverter(facesContext, output);
@@ -808,14 +808,14 @@ public static String getIconSrc(final FacesContext facesContext,
         // Faces 2.0: if "name" attribute is available, treat as a resource reference.
         final Map<String, Object> attributes = component.getAttributes();
         final String resourceName = (String) attributes.get(ComponentAttrs.NAME_ATTR);
-        if (resourceName != null && (resourceName.length() > 0))
+        if (resourceName != null && !resourceName.isEmpty())
         {
 
             final ResourceHandler resourceHandler = facesContext.getApplication().getResourceHandler();
             final Resource resource;
 
             final String libraryName = (String) attributes.get(ComponentAttrs.LIBRARY_ATTR);
-            if ((libraryName != null) && (libraryName.length() > 0))
+            if (libraryName != null && !libraryName.isEmpty())
             {
                 resource = resourceHandler.createResource(resourceName, libraryName);
             }
@@ -873,7 +873,7 @@ static public String toResourceUri(FacesContext facesContext, Object o)
         // requested resource does not exist)
         // EL implementation turns null into ""
         // see http://www.irian.at/blog/blogid/unifiedElCoercion/#unifiedElCoercion
-        if (uri.length() == 0)
+        if (uri.isEmpty())
         {
             return null;
         }
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRenderer.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRenderer.java
index 52a501f82..8e89c108a 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRenderer.java
@@ -36,7 +36,7 @@
  *
  */
 @JSFRenderer(renderKitId = "HTML_BASIC", family = "jakarta.faces.Output", type = "jakarta.faces.Doctype")
-public class HtmlDoctypeRenderer extends Renderer
+public class HtmlDoctypeRenderer extends Renderer<UIComponent>
 {
 
     @Override
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlFormRenderer.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlFormRenderer.java
index 36c05976a..6bdc60823 100755
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlFormRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlFormRenderer.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 
 import jakarta.faces.component.UIComponent;
+import jakarta.faces.component.UIForm;
 import jakarta.faces.context.FacesContext;
 
 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFRenderer;
@@ -36,7 +37,7 @@
  */
 @JSFRenderer(renderKitId = "HTML_BASIC", family = "jakarta.faces.Form", type = "jakarta.faces.Form")
 public class HtmlFormRenderer
-        extends HtmlFormRendererBase
+        extends HtmlFormRendererBase<UIForm>
 {
     @Override
     protected void afterFormElementsEnd(FacesContext facesContext, UIComponent component) throws IOException
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlFormatRenderer.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlFormatRenderer.java
index d4bc081c8..44a504b2c 100755
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlFormatRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlFormatRenderer.java
@@ -50,7 +50,7 @@
  * @version $Revision$ $Date$
  */
 @JSFRenderer(renderKitId = "HTML_BASIC", family = "jakarta.faces.Output", type = "jakarta.faces.Format")
-public class HtmlFormatRenderer extends HtmlRenderer
+public class HtmlFormatRenderer extends HtmlRenderer<UIOutput>
 {
     private static final Logger log = Logger.getLogger(HtmlFormatRenderer.class.getName());
 
@@ -69,17 +69,17 @@ protected boolean isCommonEventsOptimizationEnabled(FacesContext facesContext)
     }
 
     @Override
-    public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException
+    public void encodeBegin(FacesContext facesContext, UIOutput uiComponent) throws IOException
     {
     }
 
     @Override
-    public void encodeChildren(FacesContext facescontext, UIComponent uicomponent) throws IOException
+    public void encodeChildren(FacesContext facescontext, UIOutput uicomponent) throws IOException
     {
     }
 
     @Override
-    public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException
+    public void encodeEnd(FacesContext facesContext, UIOutput component) throws IOException
     {
         RendererUtils.checkParamValidity(facesContext, component, UIOutput.class);
 
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHeadRenderer.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHeadRenderer.java
index ee0d8f6ba..9e775c0d2 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHeadRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHeadRenderer.java
@@ -40,7 +40,7 @@
  * @version $Revision$ $Date$
  */
 @JSFRenderer(renderKitId = "HTML_BASIC", family = "jakarta.faces.Output", type = "jakarta.faces.Head")
-public class HtmlHeadRenderer extends Renderer
+public class HtmlHeadRenderer extends Renderer<UIComponent>
 {
     private final static String PROFILE_ATTR = "profile";
 
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHiddenRenderer.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHiddenRenderer.java
index 427c194f6..35dc537a3 100755
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHiddenRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlHiddenRenderer.java
@@ -41,7 +41,7 @@
  * @version $Revision$ $Date$
  */
 @JSFRenderer(renderKitId = "HTML_BASIC", family = "jakarta.faces.Input", type = "jakarta.faces.Hidden")
-public class HtmlHiddenRenderer extends HtmlRenderer
+public class HtmlHiddenRenderer extends HtmlRenderer<UIComponent>
 {
     @Override
     public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlBodyRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlBodyRendererBase.java
index 0aa71e7b3..976704ca3 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlBodyRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlBodyRendererBase.java
@@ -42,11 +42,11 @@
  * 
  * @since 2.0
  */
-public class HtmlBodyRendererBase extends HtmlRenderer
+public class HtmlBodyRendererBase<T extends UIComponent> extends HtmlRenderer<T>
 {
 
     @Override
-    public void decode(FacesContext context, UIComponent component)
+    public void decode(FacesContext context, T component)
     {
         // check for npe
         super.decode(context, component);
@@ -55,7 +55,7 @@ public void decode(FacesContext context, UIComponent component)
     }
 
     @Override
-    public void encodeBegin(FacesContext facesContext, UIComponent component) throws IOException
+    public void encodeBegin(FacesContext facesContext, T component) throws IOException
     {
         super.encodeBegin(facesContext, component); //check for NP
 
@@ -121,7 +121,7 @@ else if (HtmlRendererUtils.isOutputHtml5Doctype(facesContext))
     }
 
     @Override
-    public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException
+    public void encodeEnd(FacesContext facesContext, T component) throws IOException
     {
         super.encodeEnd(facesContext, component); //check for NP
 
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java
index cfba1e8ac..01050e31b 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java
@@ -51,7 +51,7 @@
 import org.apache.myfaces.core.api.shared.lang.SharedStringBuilder;
 import org.apache.myfaces.renderkit.html.util.ComponentAttrs;
 
-public class HtmlButtonRendererBase extends HtmlRenderer
+public class HtmlButtonRendererBase<T extends UIComponent> extends HtmlRenderer<T>
 {
     private static final String SB_BUILD_BEHAVIORIZED_ONCLICK = HtmlButtonRendererBase.class.getName()
             + "#buildBehaviorizedOnClick";
@@ -64,7 +64,7 @@ public class HtmlButtonRendererBase extends HtmlRenderer
     private static final String IMAGE_BUTTON_SUFFIX_Y = ".y";
 
     @Override
-    public void decode(FacesContext facesContext, UIComponent uiComponent)
+    public void decode(FacesContext facesContext, T uiComponent)
     {
         RendererUtils.checkParamValidity(facesContext, uiComponent, UICommand.class);
 
@@ -113,7 +113,7 @@ private static boolean isSubmitted(FacesContext facesContext, UIComponent uiComp
     }
 
     @Override
-    public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException
+    public void encodeBegin(FacesContext facesContext, T uiComponent) throws IOException
     {
         RendererUtils.checkParamValidity(facesContext, uiComponent, UICommand.class);
 
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlCheckboxRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlCheckboxRendererBase.java
index f60a95528..c14d1a54f 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlCheckboxRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlCheckboxRendererBase.java
@@ -556,15 +556,15 @@ else if (component instanceof UISelectMany many)
      * @param component
      * @return
      */
-    protected Converter getConverter(FacesContext facesContext, UIComponent component)
+    protected <T extends UIComponent> Converter<?> getConverter(FacesContext facesContext, T component)
     {
-        if (component instanceof UISelectMany)
+        if (component instanceof UISelectMany selectMany)
         {
-            return HtmlRendererUtils.findUISelectManyConverterFailsafe(facesContext, component);
+            return HtmlRendererUtils.findUISelectManyConverterFailsafe(facesContext, selectMany);
         }
-        else if (component instanceof UISelectOne)
+        else if (component instanceof UISelectOne selectOne)
         {
-            return HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, component);
+            return HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, selectOne);
         }
         return null;
     }
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlFormRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlFormRendererBase.java
index c5c70ab32..ab2728597 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlFormRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlFormRendererBase.java
@@ -41,7 +41,7 @@
 import org.apache.myfaces.renderkit.html.util.HTML;
 import org.apache.myfaces.renderkit.html.util.ComponentAttrs;
 
-public class HtmlFormRendererBase extends HtmlRenderer
+public class HtmlFormRendererBase<T extends UIForm> extends HtmlRenderer<T>
 {
     private static final Logger LOGGER = Logger.getLogger(HtmlFormRendererBase.class.getName());
 
@@ -52,7 +52,7 @@ public class HtmlFormRendererBase extends HtmlRenderer
     private static final String SCROLL_HIDDEN_INPUT = "org.apache.myfaces.SCROLL_HIDDEN_INPUT";
 
     private static final String SHARED_STRING_BUILDER = HtmlFormRendererBase.class.getName() + ".SHARED_STRING_BUILDER";
-    
+
     private MyfacesConfig myfacesConfig;
     
     public HtmlFormRendererBase()
@@ -61,12 +61,10 @@ public HtmlFormRendererBase()
     }
     
     @Override
-    public void encodeBegin(FacesContext facesContext, UIComponent component) throws IOException
+    public void encodeBegin(FacesContext facesContext, T component) throws IOException
     {
         RendererUtils.checkParamValidity(facesContext, component, UIForm.class);
 
-        UIForm htmlForm = (UIForm)component;
-
         if (facesContext.isProjectStage(ProjectStage.Development) && !((UIForm) component).isPrependId())
         {
             LOGGER.warning(
@@ -74,10 +72,10 @@ public void encodeBegin(FacesContext facesContext, UIComponent component) throws
         }
 
         ResponseWriter writer = facesContext.getResponseWriter();
-        String clientId = htmlForm.getClientId(facesContext);
-        String acceptCharset = getAcceptCharset(facesContext, htmlForm);
-        String actionURL = getActionUrl(facesContext, htmlForm);
-        String method = getMethod(facesContext, htmlForm);
+        String clientId = component.getClientId(facesContext);
+        String acceptCharset = getAcceptCharset(facesContext, component);
+        String actionURL = getActionUrl(facesContext, component);
+        String method = getMethod(facesContext, component);
 
         Map<String, List<ClientBehavior>> behaviors = getClientBehaviors(component);
         if (behaviors != null && !behaviors.isEmpty())
@@ -85,7 +83,7 @@ public void encodeBegin(FacesContext facesContext, UIComponent component) throws
             ResourceUtils.renderDefaultJsfJsInlineIfNecessary(facesContext, writer);
         }
         
-        writer.startElement(HTML.FORM_ELEM, htmlForm);
+        writer.startElement(HTML.FORM_ELEM, component);
         writer.writeAttribute(HTML.ID_ATTR, clientId, null);
         writer.writeAttribute(HTML.NAME_ATTR, clientId, null);
         writer.writeAttribute(HTML.METHOD_ATTR, method, null);
@@ -97,11 +95,11 @@ public void encodeBegin(FacesContext facesContext, UIComponent component) throws
         String encodedActionURL = facesContext.getExternalContext().encodeActionURL(actionURL);
         writer.writeURIAttribute(HTML.ACTION_ATTR, encodedActionURL, null);
         
-        Long commonPropertiesMarked = getCommonPropertiesMarked(facesContext, htmlForm);
+        Long commonPropertiesMarked = getCommonPropertiesMarked(facesContext, component);
 
         if (behaviors != null)
         {
-            renderEventHandlers(facesContext, writer, htmlForm, behaviors, commonPropertiesMarked);
+            renderEventHandlers(facesContext, writer, component, behaviors, commonPropertiesMarked);
         }
 
         if (commonPropertiesMarked != null)
@@ -116,11 +114,11 @@ public void encodeBegin(FacesContext facesContext, UIComponent component) throws
                 CommonHtmlAttributesUtil.renderCommonPassthroughProperties(
                         writer, commonPropertiesMarked, component);
             }
-            HtmlRendererUtils.renderHTMLAttributes(writer, htmlForm, HTML.FORM_ATTRIBUTES);
+            HtmlRendererUtils.renderHTMLAttributes(writer, component, HTML.FORM_ATTRIBUTES);
         }
         else
         {
-            HtmlRendererUtils.renderHTMLAttributes(writer, htmlForm,
+            HtmlRendererUtils.renderHTMLAttributes(writer, component,
                     behaviors != null
                         ? HTML.FORM_PASSTHROUGH_ATTRIBUTES_WITHOUT_EVENTS
                         : HTML.FORM_PASSTHROUGH_ATTRIBUTES);
@@ -149,23 +147,23 @@ public void encodeBegin(FacesContext facesContext, UIComponent component) throws
         afterFormElementsStart(facesContext, component);
     }
 
-    protected String getActionUrl(FacesContext facesContext, UIForm form)
+    protected String getActionUrl(FacesContext facesContext, T form)
     {
         return getActionUrl(facesContext);
     }
 
-    protected String getMethod(FacesContext facesContext, UIForm form)
+    protected String getMethod(FacesContext facesContext, T form)
     {
         return "post";
     }
 
-    protected String getAcceptCharset(FacesContext facesContext, UIForm form )
+    protected String getAcceptCharset(FacesContext facesContext, T form)
     {
         return (String)form.getAttributes().get(ComponentAttrs.ACCEPTCHARSET_ATTR );
     }
 
     @Override
-    public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException
+    public void encodeEnd(FacesContext facesContext, T component) throws IOException
     {
         ResponseWriter writer = facesContext.getResponseWriter();
 
@@ -181,7 +179,7 @@ public void encodeEnd(FacesContext facesContext, UIComponent component) throws I
         writer.endElement(HTML.FORM_ELEM);
     }
     
-    protected void renderViewStateAndHiddenFields(FacesContext facesContext, UIComponent component) throws IOException
+    protected void renderViewStateAndHiddenFields(FacesContext facesContext, T component) throws IOException
     {
         ResponseWriter writer = facesContext.getResponseWriter();
         
@@ -212,7 +210,7 @@ protected void renderViewStateAndHiddenFields(FacesContext facesContext, UICompo
         }
     }
 
-    private static String getScrollHiddenInputName(FacesContext facesContext, UIComponent form)
+    private static String getScrollHiddenInputName(FacesContext facesContext, UIForm form)
     {
         StringBuilder sb = SharedStringBuilder.get(facesContext, SHARED_STRING_BUILDER,
                 SCROLL_HIDDEN_INPUT.length() + 20);
@@ -223,13 +221,11 @@ private static String getScrollHiddenInputName(FacesContext facesContext, UIComp
     }
 
     @Override
-    public void decode(FacesContext facesContext, UIComponent component)
+    public void decode(FacesContext facesContext, T component)
     {
         RendererUtils.checkParamValidity(facesContext, component, UIForm.class);
 
-        UIForm htmlForm = (UIForm)component;
-
-        Map paramMap = facesContext.getExternalContext().getRequestParameterMap();
+        Map<String, String> paramMap = facesContext.getExternalContext().getRequestParameterMap();
         // Perf: initialize StringBuilder to maximal length used in this renderer, render_response
         // method will re-use it without capacity expanding 
         StringBuilder sb = SharedStringBuilder.get(facesContext, SHARED_STRING_BUILDER, 100);
@@ -237,20 +233,19 @@ public void decode(FacesContext facesContext, UIComponent component)
                 sb.append(component.getClientId(facesContext)).append(HIDDEN_SUBMIT_INPUT_SUFFIX));
         if (submittedValue != null && submittedValue.equals(HIDDEN_SUBMIT_INPUT_VALUE))
         {
-            htmlForm.setSubmitted(true);
+            component.setSubmitted(true);
         }
         else
         {
-            htmlForm.setSubmitted(false);
+            component.setSubmitted(false);
         }
         
         ClientBehaviorRendererUtils.decodeClientBehaviors(facesContext, component);
     }
 
 
-    public static void renderScrollHiddenInputIfNecessary(
-            UIComponent form, FacesContext facesContext, ResponseWriter writer)
-        throws IOException
+    public static void renderScrollHiddenInputIfNecessary(UIForm form, FacesContext facesContext, ResponseWriter writer)
+            throws IOException
     {
         if (form == null)
         {
@@ -269,7 +264,7 @@ public static void renderScrollHiddenInputIfNecessary(
      * Called before the state and any elements are added to the form tag in the
      * encodeBegin method
      */
-    protected void beforeFormElementsStart(FacesContext facesContext, UIComponent component)
+    protected void beforeFormElementsStart(FacesContext facesContext, T component)
             throws IOException
     {
         
@@ -279,7 +274,7 @@ protected void beforeFormElementsStart(FacesContext facesContext, UIComponent co
      * Called after the state and any elements are added to the form tag in the
      * encodeBegin method
      */
-    protected void afterFormElementsStart(FacesContext facesContext, UIComponent component)
+    protected void afterFormElementsStart(FacesContext facesContext, T component)
             throws IOException
     {
         
@@ -289,7 +284,7 @@ protected void afterFormElementsStart(FacesContext facesContext, UIComponent com
      * Called before the state and any elements are added to the form tag in the
      * encodeEnd method
      */
-    protected void beforeFormElementsEnd(FacesContext facesContext, UIComponent component)
+    protected void beforeFormElementsEnd(FacesContext facesContext, T component)
             throws IOException
     {
         
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlGridRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlGridRendererBase.java
index fadee2a5a..0df85b2f0 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlGridRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlGridRendererBase.java
@@ -43,7 +43,7 @@
 import org.apache.myfaces.renderkit.html.util.HTML;
 import org.apache.myfaces.renderkit.html.util.ComponentAttrs;
 
-public class HtmlGridRendererBase extends HtmlRenderer
+public class HtmlGridRendererBase<T extends UIComponent> extends HtmlRenderer<T>
 {
     private static final Logger log = Logger.getLogger(HtmlGridRendererBase.class.getName());
     
@@ -56,7 +56,7 @@ public boolean getRendersChildren()
     }
 
     @Override
-    public void decode(FacesContext context, UIComponent component)
+    public void decode(FacesContext context, T component)
     {
         // Check for npe
         super.decode(context, component);
@@ -65,13 +65,13 @@ public void decode(FacesContext context, UIComponent component)
     }
 
     @Override
-    public void encodeBegin(FacesContext facesContext, UIComponent component) throws IOException
+    public void encodeBegin(FacesContext facesContext, T component) throws IOException
     {
         // all work done in encodeEnd()
     }
 
     @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
+    public void encodeChildren(FacesContext context, T component)
         throws IOException
     {
         // all work done in encodeEnd()
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlGroupRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlGroupRendererBase.java
index 46e35d5a1..44984786b 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlGroupRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlGroupRendererBase.java
@@ -36,7 +36,7 @@
 import org.apache.myfaces.renderkit.html.util.ResourceUtils;
 import org.apache.myfaces.renderkit.html.util.HTML;
 
-public class HtmlGroupRendererBase extends HtmlRenderer 
+public class HtmlGroupRendererBase<T extends UIComponent> extends HtmlRenderer<T>
 {
     private static final String LAYOUT_BLOCK_VALUE = "block";
 
@@ -47,7 +47,7 @@ public boolean getRendersChildren()
     }
 
     @Override
-    public void decode(FacesContext context, UIComponent component)
+    public void decode(FacesContext context, T component)
     {
         // Check for npe
         super.decode(context, component);
@@ -56,7 +56,7 @@ public void decode(FacesContext context, UIComponent component)
     }
 
     @Override
-    public void encodeBegin(FacesContext context, UIComponent component) throws IOException
+    public void encodeBegin(FacesContext context, T component) throws IOException
     {
         RendererUtils.checkParamValidity(context, component, UIPanel.class);
         if (!needsWrapper(context, component))
@@ -67,13 +67,13 @@ public void encodeBegin(FacesContext context, UIComponent component) throws IOEx
     }
 
     @Override
-    public void encodeChildren(FacesContext context, UIComponent component) throws IOException
+    public void encodeChildren(FacesContext context, T component) throws IOException
     {
         RendererUtils.renderChildren(context, component);
     }
 
     @Override
-    public void encodeEnd(FacesContext context, UIComponent component) throws IOException
+    public void encodeEnd(FacesContext context, T component) throws IOException
     {
         if (!needsWrapper(context, component))
         {
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlImageRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlImageRendererBase.java
index c3205402b..13fa2a266 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlImageRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlImageRendererBase.java
@@ -28,7 +28,6 @@
 import java.util.logging.Logger;
 
 import jakarta.faces.application.ProjectStage;
-import jakarta.faces.component.UIComponent;
 import jakarta.faces.component.UIGraphic;
 import jakarta.faces.component.behavior.ClientBehavior;
 import jakarta.faces.component.behavior.ClientBehaviorHolder;
@@ -41,12 +40,12 @@
 import org.apache.myfaces.renderkit.html.util.HTML;
 import org.apache.myfaces.renderkit.html.util.ComponentAttrs;
 
-public class HtmlImageRendererBase extends HtmlRenderer
+public class HtmlImageRendererBase<T extends UIGraphic> extends HtmlRenderer<T>
 {
     private static final Logger log = Logger.getLogger(HtmlImageRendererBase.class.getName());
     
     @Override
-    public void decode(FacesContext context, UIComponent component)
+    public void decode(FacesContext context, T component)
     {
         super.decode(context, component);
         
@@ -54,30 +53,30 @@ public void decode(FacesContext context, UIComponent component)
     }
 
     @Override
-    public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException
+    public void encodeEnd(FacesContext facesContext, T component) throws IOException
     {
-        RendererUtils.checkParamValidity(facesContext, uiComponent, UIGraphic.class);
+        RendererUtils.checkParamValidity(facesContext, component, UIGraphic.class);
 
         ResponseWriter writer = facesContext.getResponseWriter();
         
-        Map<String, List<ClientBehavior>> behaviors = getClientBehaviors(uiComponent);
+        Map<String, List<ClientBehavior>> behaviors = getClientBehaviors(component);
         if (behaviors != null && !behaviors.isEmpty())
         {
             ResourceUtils.renderDefaultJsfJsInlineIfNecessary(facesContext, writer);
         }
         
-        writer.startElement(HTML.IMG_ELEM, uiComponent);
+        writer.startElement(HTML.IMG_ELEM, component);
 
-        if (uiComponent instanceof ClientBehaviorHolder && !behaviors.isEmpty())
+        if (component instanceof ClientBehaviorHolder && !behaviors.isEmpty())
         {
-            HtmlRendererUtils.writeIdAndName(writer, uiComponent, facesContext);
+            HtmlRendererUtils.writeIdAndName(writer, component, facesContext);
         }
         else
         {
-            HtmlRendererUtils.writeIdIfNecessary(writer, uiComponent, facesContext);
+            HtmlRendererUtils.writeIdIfNecessary(writer, component, facesContext);
         }
 
-        final String url = RendererUtils.getIconSrc(facesContext, uiComponent, ComponentAttrs.URL_ATTR);
+        final String url = RendererUtils.getIconSrc(facesContext, component, ComponentAttrs.URL_ATTR);
         if (url != null)
         {
             writer.writeURIAttribute(HTML.SRC_ATTR, url,ComponentAttrs.VALUE_ATTR);
@@ -89,52 +88,52 @@ public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) throws
                     : Level.WARNING;
             if (log.isLoggable(level))
             {
-                log.log(level, "Component UIGraphic " + uiComponent.getClientId(facesContext) 
+                log.log(level, "Component UIGraphic " + component.getClientId(facesContext)
                         + " has no attribute url, value, name or attribute resolves to null. Path to component " 
-                        + ComponentUtils.getPathToComponent(uiComponent));
+                        + ComponentUtils.getPathToComponent(component));
             }
         }
 
         /* 
          * Warn the user if the ALT attribute is missing.
          */                
-        if (uiComponent.getAttributes().get(HTML.ALT_ATTR) == null) 
+        if (component.getAttributes().get(HTML.ALT_ATTR) == null)
         {
             Level level = facesContext.isProjectStage(ProjectStage.Production)
                     ? Level.FINE
                     : Level.WARNING;
             if (log.isLoggable(level))
             {
-                log.log(level, "Component UIGraphic " + uiComponent.getClientId(facesContext) 
+                log.log(level, "Component UIGraphic " + component.getClientId(facesContext)
                         + " has no attribute alt or attribute resolves to null. Path to component " 
-                        + ComponentUtils.getPathToComponent(uiComponent));
+                        + ComponentUtils.getPathToComponent(component));
             }
         }
 
-        Long commonPropertiesMarked = getCommonPropertiesMarked(facesContext, uiComponent);
+        Long commonPropertiesMarked = getCommonPropertiesMarked(facesContext, component);
 
         if (behaviors != null)
         {
-            renderEventHandlers(facesContext, writer, uiComponent, behaviors, commonPropertiesMarked);
+            renderEventHandlers(facesContext, writer, component, behaviors, commonPropertiesMarked);
         }
 
         if (commonPropertiesMarked != null)
         {
-            HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, HTML.IMG_ATTRIBUTES);
+            HtmlRendererUtils.renderHTMLAttributes(writer, component, HTML.IMG_ATTRIBUTES);
             if (behaviors != null)
             {
                 CommonHtmlAttributesUtil.renderCommonPassthroughPropertiesWithoutEvents(
-                        writer, commonPropertiesMarked, uiComponent);
+                        writer, commonPropertiesMarked, component);
             }
             else
             {
                 CommonHtmlAttributesUtil.renderCommonPassthroughProperties(
-                        writer, commonPropertiesMarked, uiComponent);
+                        writer, commonPropertiesMarked, component);
             }
         }
         else
         {
-            HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent,
+            HtmlRendererUtils.renderHTMLAttributes(writer, component,
                     behaviors != null
                         ? HTML.IMG_PASSTHROUGH_ATTRIBUTES_WITHOUT_EVENTS
                         : HTML.IMG_PASSTHROUGH_ATTRIBUTES);
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
index 7acc6de20..aac879673 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
@@ -22,7 +22,6 @@
 import org.apache.myfaces.renderkit.html.util.ClientBehaviorRendererUtils;
 import org.apache.myfaces.renderkit.html.util.CommonHtmlAttributesUtil;
 import jakarta.faces.component.UIComponent;
-import jakarta.faces.component.UIInput;
 import jakarta.faces.context.FacesContext;
 import jakarta.faces.context.ResponseWriter;
 import jakarta.faces.convert.ConverterException;
@@ -51,16 +50,16 @@
 import org.apache.myfaces.renderkit.html.util.HTML;
 import org.apache.myfaces.core.api.shared.lang.Assert;
 
-public class HtmlInputFileRendererBase extends HtmlRenderer
+public class HtmlInputFileRendererBase<T extends HtmlInputFile> extends HtmlRenderer<T>
 {
     private static final Logger log = Logger.getLogger(HtmlInputFileRendererBase.class.getName());
 
     @Override
-    public void decode(FacesContext facesContext, UIComponent component)
+    public void decode(FacesContext facesContext, T component)
     {
         try
         {
-            String clientId = component.getClientId();
+            String clientId = component.getClientId(facesContext);
             HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
             Collection<Part> parts = request.getParts();
             Collection<Part> submittedValues = new ArrayList<>(parts.size());
@@ -72,13 +71,13 @@ public void decode(FacesContext facesContext, UIComponent component)
                     submittedValues.add(wrapper);
                 }
             }
-            if (((HtmlInputFile) component).isMultiple())
+            if (component.isMultiple())
             {
-                ((UIInput) component).setSubmittedValue(submittedValues);
+                component.setSubmittedValue(submittedValues);
             }
             else if (!submittedValues.isEmpty())
             {
-                ((UIInput) component).setSubmittedValue(submittedValues.iterator().next());
+                component.setSubmittedValue(submittedValues.iterator().next());
             }
         }
         catch (IOException | ServletException e)
@@ -93,7 +92,7 @@ else if (!submittedValues.isEmpty())
     }
     
     @Override
-    public void encodeEnd(FacesContext facesContext, UIComponent component)
+    public void encodeEnd(FacesContext facesContext, T component)
         throws IOException
     {   
         renderInput(facesContext, component);
@@ -104,21 +103,21 @@ public void encodeEnd(FacesContext facesContext, UIComponent component)
                     facesContext.getPartialViewContext().isAjaxRequest()))
         {
             UIForm form = ComponentUtils.findClosest(UIForm.class, component);
-            if (form != null && form instanceof HtmlForm htmlForm)
+            if (form instanceof HtmlForm htmlForm)
             {
                 String content = htmlForm.getEnctype();
                 if (content == null || !content.contains("multipart/form-data"))
                 {
                      FacesMessage message = new FacesMessage("file upload requires a form with"+
                             " enctype equal to multipart/form-data");
-                     facesContext.addMessage(component.getClientId(), message);
+                     facesContext.addMessage(component.getClientId(facesContext), message);
                 }
             }
         }
     }
    
     @Override
-    public Object getConvertedValue(FacesContext context, UIComponent component, Object submittedValue)
+    public Object getConvertedValue(FacesContext context, T component, Object submittedValue)
             throws ConverterException
     {
         Assert.notNull(context, "context");
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java
index 8a7ed7a58..9c7679799 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java
@@ -55,7 +55,7 @@
 import org.apache.myfaces.core.api.shared.lang.SharedStringBuilder;
 import org.apache.myfaces.renderkit.html.util.ComponentAttrs;
 
-public abstract class HtmlLinkRendererBase extends HtmlRenderer
+public abstract class HtmlLinkRendererBase<T extends UIComponent> extends HtmlRenderer<T>
 {
     public static final String END_LINK_OUTCOME_AS_SPAN = 
         "oam.shared.HtmlLinkRendererBase.END_LINK_OUTCOME_AS_SPAN";
@@ -81,7 +81,7 @@ public boolean getRendersChildren()
     }
 
     @Override
-    public void decode(FacesContext facesContext, UIComponent component)
+    public void decode(FacesContext facesContext, T component)
     {
         super.decode(facesContext, component);  //check for NP
 
@@ -123,7 +123,7 @@ else if (component instanceof UIOutput)
     }
 
     @Override
-    public void encodeBegin(FacesContext facesContext, UIComponent component) throws IOException
+    public void encodeBegin(FacesContext facesContext, T component) throws IOException
     {
         super.encodeBegin(facesContext, component);  //check for NP
 
@@ -194,7 +194,7 @@ public void encodeChildren(FacesContext facesContext, UIComponent component) thr
     }
 
     @Override
-    public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException
+    public void encodeEnd(FacesContext facesContext, T component) throws IOException
     {
         super.encodeEnd(facesContext, component);  //check for NP
 
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlListboxRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlListboxRendererBase.java
index 5bc94578b..4f2690f4d 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlListboxRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlListboxRendererBase.java
@@ -120,13 +120,13 @@ public void decode(FacesContext facesContext, UIComponent uiComponent)
     {
         RendererUtils.checkParamValidity(facesContext, uiComponent, null);
 
-        if (uiComponent instanceof UISelectMany)
+        if (uiComponent instanceof UISelectMany selectMany)
         {
-            HtmlRendererUtils.decodeUISelectMany(facesContext, uiComponent);
+            HtmlRendererUtils.decodeUISelectMany(facesContext, selectMany);
         }
-        else if (uiComponent instanceof UISelectOne)
+        else if (uiComponent instanceof UISelectOne selectOne)
         {
-            HtmlRendererUtils.decodeUISelectOne(facesContext, uiComponent);
+            HtmlRendererUtils.decodeUISelectOne(facesContext, selectOne);
         }
         else
         {
@@ -168,17 +168,15 @@ else if (uiComponent instanceof UISelectOne one)
      * @param component
      * @return
      */
-    protected Converter getConverter(FacesContext facesContext,
-            UIComponent component)
+    protected <T extends UIComponent> Converter<?> getConverter(FacesContext facesContext, T component)
     {
-        if (component instanceof UISelectMany)
+        if (component instanceof UISelectMany selectMany)
         {
-            return HtmlRendererUtils.findUISelectManyConverterFailsafe(facesContext,
-                    component);
+            return HtmlRendererUtils.findUISelectManyConverterFailsafe(facesContext, selectMany);
         }
-        else if (component instanceof UISelectOne)
+        else if (component instanceof UISelectOne selectOne)
         {
-            return HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, component);
+            return HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, selectOne);
         }
         return null;
     }
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMenuRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMenuRendererBase.java
index 390969cfd..eccea1a90 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMenuRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMenuRendererBase.java
@@ -111,13 +111,13 @@ public void decode(FacesContext facesContext, UIComponent uiComponent)
     {
         RendererUtils.checkParamValidity(facesContext, uiComponent, null);
 
-        if (uiComponent instanceof UISelectMany)
+        if (uiComponent instanceof UISelectMany selectMany)
         {
-            HtmlRendererUtils.decodeUISelectMany(facesContext, uiComponent);
+            HtmlRendererUtils.decodeUISelectMany(facesContext, selectMany);
         }
-        else if (uiComponent instanceof UISelectOne)
+        else if (uiComponent instanceof UISelectOne selectOne)
         {
-            HtmlRendererUtils.decodeUISelectOne(facesContext, uiComponent);
+            HtmlRendererUtils.decodeUISelectOne(facesContext, selectOne);
         }
         else
         {
@@ -160,15 +160,15 @@ else if (uiComponent instanceof UISelectOne one)
      * @param component
      * @return
      */
-    protected Converter getConverter(FacesContext facesContext, UIComponent component)
+    protected <T extends UIComponent> Converter<?> getConverter(FacesContext facesContext, T component)
     {
-        if (component instanceof UISelectMany)
+        if (component instanceof UISelectMany selectMany)
         {
-            return HtmlRendererUtils.findUISelectManyConverterFailsafe(facesContext, component);
+            return HtmlRendererUtils.findUISelectManyConverterFailsafe(facesContext, selectMany);
         }
-        else if (component instanceof UISelectOne)
+        else if (component instanceof UISelectOne selectOne)
         {
-            return HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, component);
+            return HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, selectOne);
         }
         return null;
     }
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMessageRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMessageRendererBase.java
index bcc720e4c..3829fca6b 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMessageRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMessageRendererBase.java
@@ -43,8 +43,8 @@
 import org.apache.myfaces.renderkit.html.util.HTML;
 import org.apache.myfaces.renderkit.html.util.ComponentAttrs;
 
-public abstract class HtmlMessageRendererBase
-        extends HtmlRenderer
+public abstract class HtmlMessageRendererBase<T extends UIComponent>
+        extends HtmlRenderer<T>
 {
     private static final Logger log = Logger.getLogger(HtmlMessageRendererBase.class.getName());
 
@@ -329,22 +329,22 @@ public static String[] getStyleAndStyleClass(UIComponent message,
         String styleClass = null;
         if (message instanceof HtmlMessage htmlMessage)
         {
-            if (severity == FacesMessage.SEVERITY_INFO)
+            if (severity == FacesMessage.Severity.INFO)
             {
                 style = htmlMessage.getInfoStyle();
                 styleClass = htmlMessage.getInfoClass();
             }
-            else if (severity == FacesMessage.SEVERITY_WARN)
+            else if (severity == FacesMessage.Severity.WARN)
             {
                 style = htmlMessage.getWarnStyle();
                 styleClass = htmlMessage.getWarnClass();
             }
-            else if (severity == FacesMessage.SEVERITY_ERROR)
+            else if (severity == FacesMessage.Severity.ERROR)
             {
                 style = htmlMessage.getErrorStyle();
                 styleClass = htmlMessage.getErrorClass();
             }
-            else if (severity == FacesMessage.SEVERITY_FATAL)
+            else if (severity == FacesMessage.Severity.FATAL)
             {
                 style = htmlMessage.getFatalStyle();
                 styleClass = htmlMessage.getFatalClass();
@@ -363,22 +363,22 @@ else if (severity == FacesMessage.SEVERITY_FATAL)
         else
         {
             Map<String, Object> attr = message.getAttributes();
-            if (severity == FacesMessage.SEVERITY_INFO)
+            if (severity == FacesMessage.Severity.INFO)
             {
                 style = (String) attr.get(ComponentAttrs.INFO_STYLE_ATTR);
                 styleClass = (String) attr.get(ComponentAttrs.INFO_CLASS_ATTR);
             }
-            else if (severity == FacesMessage.SEVERITY_WARN)
+            else if (severity == FacesMessage.Severity.WARN)
             {
                 style = (String) attr.get(ComponentAttrs.WARN_STYLE_ATTR);
                 styleClass = (String) attr.get(ComponentAttrs.WARN_CLASS_ATTR);
             }
-            else if (severity == FacesMessage.SEVERITY_ERROR)
+            else if (severity == FacesMessage.Severity.ERROR)
             {
                 style = (String) attr.get(ComponentAttrs.ERROR_STYLE_ATTR);
                 styleClass = (String) attr.get(ComponentAttrs.ERROR_CLASS_ATTR);
             }
-            else if (severity == FacesMessage.SEVERITY_FATAL)
+            else if (severity == FacesMessage.Severity.FATAL)
             {
                 style = (String) attr.get(ComponentAttrs.FATAL_STYLE_ATTR);
                 styleClass = (String) attr.get(ComponentAttrs.FATAL_CLASS_ATTR);
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMessagesRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMessagesRendererBase.java
index ebb728056..4a939fb0d 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMessagesRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlMessagesRendererBase.java
@@ -45,7 +45,7 @@
 import org.apache.myfaces.renderkit.html.util.HTML;
 import org.apache.myfaces.renderkit.html.util.ComponentAttrs;
 
-public abstract class HtmlMessagesRendererBase extends HtmlMessageRendererBase
+public abstract class HtmlMessagesRendererBase<T extends UIComponent> extends HtmlMessageRendererBase<T>
 {
     private static final Logger log = Logger.getLogger(HtmlMessagesRendererBase.class.getName());
 
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlOutcomeTargetButtonRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlOutcomeTargetButtonRendererBase.java
index 054aae5bd..1499f3006 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlOutcomeTargetButtonRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlOutcomeTargetButtonRendererBase.java
@@ -40,7 +40,7 @@
 import org.apache.myfaces.renderkit.html.util.HTML;
 import org.apache.myfaces.renderkit.html.util.ComponentAttrs;
 
-public class HtmlOutcomeTargetButtonRendererBase extends HtmlRenderer
+public class HtmlOutcomeTargetButtonRendererBase<T extends UIComponent> extends HtmlRenderer<T>
 {
     @Override
     public boolean getRendersChildren()
@@ -49,16 +49,16 @@ public boolean getRendersChildren()
     }
 
     @Override
-    public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException
+    public void encodeBegin(FacesContext facesContext, T component) throws IOException
     {
-        super.encodeBegin(facesContext, uiComponent); //check for NP
+        super.encodeBegin(facesContext, component); //check for NP
 
-        String clientId = uiComponent.getClientId(facesContext);
+        String clientId = component.getClientId(facesContext);
 
         ResponseWriter writer = facesContext.getResponseWriter();
 
         Map<String, List<ClientBehavior>> behaviors = null;
-        if (uiComponent instanceof ClientBehaviorHolder holder)
+        if (component instanceof ClientBehaviorHolder holder)
         {
             behaviors = holder.getClientBehaviors();
             if (!behaviors.isEmpty())
@@ -67,12 +67,12 @@ public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) thro
             }
         }
 
-        writer.startElement(HTML.INPUT_ELEM, uiComponent);
+        writer.startElement(HTML.INPUT_ELEM, component);
 
         writer.writeAttribute(HTML.ID_ATTR, clientId, ComponentAttrs.ID_ATTR);
         writer.writeAttribute(HTML.NAME_ATTR, clientId, ComponentAttrs.ID_ATTR);
 
-        String image = getImage(uiComponent);
+        String image = getImage(component);
         ExternalContext externalContext = facesContext.getExternalContext();
 
         if (image != null)
@@ -86,7 +86,7 @@ public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) thro
         {
             // type="button"
             writer.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_BUTTON, ComponentAttrs.TYPE_ATTR);
-            Object value = RendererUtils.getStringValue(facesContext, uiComponent);
+            Object value = RendererUtils.getStringValue(facesContext, component);
             if (value != null)
             {
                 writer.writeAttribute(HTML.VALUE_ATTR, value, ComponentAttrs.VALUE_ATTR);
@@ -94,9 +94,9 @@ public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) thro
         }
 
         String outcomeTargetHref = HtmlRendererUtils.getOutcomeTargetHref(
-                    facesContext, (UIOutcomeTarget) uiComponent);
+                    facesContext, (UIOutcomeTarget) component);
 
-        if (HtmlRendererUtils.isDisabled(uiComponent) || outcomeTargetHref == null)
+        if (HtmlRendererUtils.isDisabled(component) || outcomeTargetHref == null)
         {
             // disable the button - if disabled is true or no fitting NavigationCase was found
             HtmlRendererUtils.renderHTMLAttribute(writer, HTML.DISABLED_ATTR, HTML.DISABLED_ATTR, true);
@@ -106,13 +106,13 @@ public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) thro
             // render onClick attribute
             String href = facesContext.getExternalContext().encodeResourceURL(outcomeTargetHref);
 
-            String commandOnClick = (String) uiComponent.getAttributes().get(HTML.ONCLICK_ATTR);
+            String commandOnClick = (String) component.getAttributes().get(HTML.ONCLICK_ATTR);
             String navigationJavaScript = "window.location.href = '" + href + '\'';
 
             if (behaviors != null && !behaviors.isEmpty())
             {
                 HtmlRendererUtils.renderBehaviorizedAttribute(facesContext, writer, HTML.ONCLICK_ATTR, 
-                        uiComponent, ClientBehaviorEvents.CLICK, null, behaviors, HTML.ONCLICK_ATTR, 
+                        component, ClientBehaviorEvents.CLICK, null, behaviors, HTML.ONCLICK_ATTR,
                         commandOnClick, navigationJavaScript);
             }
             else
@@ -130,75 +130,73 @@ public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) thro
             }
         }
 
-        if (isCommonPropertiesOptimizationEnabled(facesContext))
+        Long commonPropertiesMarked = getCommonPropertiesMarked(facesContext, component);
+        if (commonPropertiesMarked != null)
         {
-            long commonPropertiesMarked = CommonHtmlAttributesUtil.getMarkedAttributes(uiComponent);
-            
-            if (behaviors != null && !behaviors.isEmpty() && uiComponent instanceof ClientBehaviorHolder)
+            if (behaviors != null && !behaviors.isEmpty() && component instanceof ClientBehaviorHolder)
             {
                 HtmlRendererUtils.renderBehaviorizedEventHandlersWithoutOnclick(
-                        facesContext, writer, uiComponent, behaviors);
+                        facesContext, writer, component, behaviors);
                 HtmlRendererUtils.renderBehaviorizedFieldEventHandlersWithoutOnchangeAndOnselect(
-                        facesContext, writer, uiComponent, behaviors);
+                        facesContext, writer, component, behaviors);
             }
             else
             {
                 CommonHtmlAttributesUtil.renderEventPropertiesWithoutOnclick(
-                        writer, commonPropertiesMarked, uiComponent);
-                CommonHtmlAttributesUtil.renderFocusBlurEventProperties(writer, commonPropertiesMarked, uiComponent);
+                        writer, commonPropertiesMarked, component);
+                CommonHtmlAttributesUtil.renderFocusBlurEventProperties(writer, commonPropertiesMarked, component);
             }
             
             CommonHtmlAttributesUtil.renderCommonFieldPassthroughPropertiesWithoutDisabledAndEvents(
-                    writer, commonPropertiesMarked, uiComponent);
+                    writer, commonPropertiesMarked, component);
             if ((commonPropertiesMarked & CommonHtmlAttributes.ALT) != 0)
             {
-                HtmlRendererUtils.renderHTMLStringAttribute(writer, uiComponent,
+                HtmlRendererUtils.renderHTMLStringAttribute(writer, component,
                         HTML.ALT_ATTR, HTML.ALT_ATTR);
             }
         }
         else
         {
-            if (uiComponent instanceof ClientBehaviorHolder)
+            if (component instanceof ClientBehaviorHolder)
             {
                 HtmlRendererUtils.renderBehaviorizedEventHandlersWithoutOnclick(
-                        facesContext, writer, uiComponent, behaviors);
+                        facesContext, writer, component, behaviors);
                 HtmlRendererUtils.renderBehaviorizedFieldEventHandlersWithoutOnchangeAndOnselect(
-                        facesContext, writer, uiComponent, behaviors);
+                        facesContext, writer, component, behaviors);
             }
             else
             {
-                HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent,
+                HtmlRendererUtils.renderHTMLAttributes(writer, component,
                         HTML.EVENT_HANDLER_ATTRIBUTES_WITHOUT_ONCLICK);
-                HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent,
+                HtmlRendererUtils.renderHTMLAttributes(writer, component,
                         HTML.COMMON_FIELD_EVENT_ATTRIBUTES_WITHOUT_ONSELECT_AND_ONCHANGE);
-    
             }
-            HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent,
+            HtmlRendererUtils.renderHTMLAttributes(writer, component,
                     HTML.COMMON_FIELD_PASSTROUGH_ATTRIBUTES_WITHOUT_DISABLED_AND_EVENTS);
-            HtmlRendererUtils.renderHTMLStringAttribute(writer, uiComponent,
+            HtmlRendererUtils.renderHTMLStringAttribute(writer, component,
                     HTML.ALT_ATTR, HTML.ALT_ATTR);
         }
 
         writer.flush();
     }
 
-    private String getImage(UIComponent uiComponent)
+    private String getImage(UIComponent component)
     {
-        if (uiComponent instanceof HtmlOutcomeTargetButton button)
+        if (component instanceof HtmlOutcomeTargetButton button)
         {
             return button.getImage();
         }
-        return (String) uiComponent.getAttributes().get(ComponentAttrs.IMAGE_ATTR);
+        return (String) component.getAttributes().get(ComponentAttrs.IMAGE_ATTR);
     }
 
     @Override
-    public void encodeChildren(FacesContext facesContext, UIComponent component) throws IOException
+    public void encodeChildren(FacesContext facesContext, T component) throws IOException
     {
         RendererUtils.renderChildren(facesContext, component);
     }
 
     @Override
-    public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException
+    public void encodeEnd(FacesContext facesContext, T component) throws IOException
     {
         super.encodeEnd(facesContext, component); //check for NP
 
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java
index 1d46726ce..c68188748 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java
@@ -58,7 +58,7 @@
 import org.apache.myfaces.renderkit.html.util.HTML;
 import org.apache.myfaces.renderkit.html.util.ComponentAttrs;
 
-public class HtmlRadioRendererBase extends HtmlRenderer
+public class HtmlRadioRendererBase<T extends UIComponent> extends HtmlRenderer<T>
 {
     private static final Logger log = Logger.getLogger(HtmlRadioRendererBase.class.getName());
 
@@ -71,7 +71,7 @@ public class HtmlRadioRendererBase extends HtmlRenderer
             Collections.unmodifiableSet(EnumSet.of(VisitHint.SKIP_UNRENDERED, VisitHint.SKIP_ITERATION));
 
     @Override
-    public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException
+    public void encodeEnd(FacesContext facesContext, T uiComponent) throws IOException
     {
         RendererUtils.checkParamValidity(facesContext, uiComponent, UISelectOne.class);
 
@@ -561,12 +561,12 @@ protected boolean isDisabled(FacesContext facesContext, UIComponent uiComponent)
     }
 
     @Override
-    public void decode(FacesContext facesContext, UIComponent uiComponent)
+    public void decode(FacesContext facesContext, T uiComponent)
     {
         RendererUtils.checkParamValidity(facesContext, uiComponent, null);
-        if (uiComponent instanceof UIInput)
+        if (uiComponent instanceof UISelectOne selectOne)
         {
-            HtmlRendererUtils.decodeUISelectOne(facesContext, uiComponent);
+            HtmlRendererUtils.decodeUISelectOne(facesContext, selectOne);
         }
         if (uiComponent instanceof ClientBehaviorHolder && !HtmlRendererUtils.isDisabled(uiComponent))
         {
@@ -575,7 +575,7 @@ public void decode(FacesContext facesContext, UIComponent uiComponent)
     }
 
     @Override
-    public Object getConvertedValue(FacesContext facesContext, UIComponent uiComponent, Object submittedValue)
+    public Object getConvertedValue(FacesContext facesContext, T uiComponent, Object submittedValue)
         throws ConverterException
     {
         RendererUtils.checkParamValidity(facesContext, uiComponent, UISelectOne.class);
@@ -608,7 +608,7 @@ public VisitResult visit(VisitContext context, UIComponent target)
         {
             if (target instanceof UISelectOne one)
             {
-                UISelectOne targetSelectOneRadio =one;
+                UISelectOne targetSelectOneRadio = one;
                 String targetGroup = targetSelectOneRadio.getGroup();
                 if (group.equals(targetGroup))
                 {
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRenderer.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRenderer.java
index d9b3f037a..310c59638 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRenderer.java
@@ -36,8 +36,8 @@
 import org.apache.myfaces.renderkit.html.util.HtmlRendererUtils;
 import org.apache.myfaces.renderkit.html.util.ComponentAttrs;
 
-public abstract class HtmlRenderer
-        extends Renderer
+public abstract class HtmlRenderer<T extends UIComponent>
+        extends Renderer<T>
 {
 
     /**
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlSecretRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlSecretRendererBase.java
index 9633e2e4f..650f3f3d1 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlSecretRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlSecretRendererBase.java
@@ -43,12 +43,12 @@
 /**
  * see Spec.1.0 EA - Faces.7.6.4 Renderer Types for UIInput Components
  */
-public class HtmlSecretRendererBase extends HtmlRenderer
+public class HtmlSecretRendererBase<T extends UIInput> extends HtmlRenderer<T>
 {
     private static final String AUTOCOMPLETE_VALUE_OFF = "off";
 
     @Override
-    public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException
+    public void encodeBegin(FacesContext facesContext, T uiComponent) throws IOException
     {
       RendererUtils.checkParamValidity(facesContext, uiComponent, UIInput.class);
 
@@ -68,7 +68,7 @@ public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) thro
     }
 
     @Override
-    public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
+    public void encodeEnd(FacesContext facesContext, T uiComponent)
             throws IOException
     {
         renderInputEnd(facesContext, uiComponent);
@@ -76,7 +76,7 @@ public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
 
 
     //Subclasses can set the value of an attribute before, or can render a custom attribute after calling this method
-    protected void renderInputBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException
+    protected void renderInputBegin(FacesContext facesContext, T uiComponent) throws IOException
     {
         ResponseWriter writer = facesContext.getResponseWriter();
         
@@ -184,7 +184,7 @@ protected boolean isAutocompleteOff(FacesContext facesContext, UIComponent compo
     }
 
     @Override
-    public void decode(FacesContext facesContext, UIComponent component)
+    public void decode(FacesContext facesContext, T component)
     {
         RendererUtils.checkParamValidity(facesContext, component, UIInput.class);
 
@@ -196,7 +196,7 @@ public void decode(FacesContext facesContext, UIComponent component)
     }
 
     @Override
-    public Object getConvertedValue(FacesContext facesContext, UIComponent uiComponent, Object submittedValue)
+    public Object getConvertedValue(FacesContext facesContext, T uiComponent, Object submittedValue)
         throws ConverterException
     {
         RendererUtils.checkParamValidity(facesContext, uiComponent, UIOutput.class);
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlSelectableRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlSelectableRendererBase.java
index a6b6236c5..743c90ea8 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlSelectableRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlSelectableRendererBase.java
@@ -37,7 +37,7 @@
 import org.apache.myfaces.renderkit.html.util.SelectItemsUtils;
 import org.apache.myfaces.renderkit.html.util.HTML;
 
-public class HtmlSelectableRendererBase extends HtmlRenderer
+public class HtmlSelectableRendererBase<T extends UIComponent> extends HtmlRenderer<T>
 {
     
     protected void internalRenderSelect(FacesContext facesContext,
@@ -122,8 +122,7 @@ protected void internalRenderSelect(FacesContext facesContext,
             writer.writeAttribute(HTML.READONLY_ATTR, HTML.READONLY_ATTR, null);
         }
 
-        Set lookupSet = HtmlRendererUtils.getSubmittedOrSelectedValuesAsSet(selectMany,
-                uiComponent, facesContext, converter);
+        Set lookupSet = HtmlRendererUtils.getSubmittedOrSelectedValuesAsSet(uiComponent, facesContext, converter);
 
         SelectItemsUtils.renderSelectOptions(facesContext, uiComponent, converter, lookupSet, selectItemList);
         // bug #970747: force separate end tag
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/util/HtmlRendererUtils.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/util/HtmlRendererUtils.java
index 417fd03a2..c24bb423e 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/util/HtmlRendererUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/util/HtmlRendererUtils.java
@@ -118,13 +118,13 @@ public static void decodeUIInput(FacesContext facesContext, UIComponent componen
                     + component.getClientId(facesContext)
                     + " is not an EditableValueHolder");
         }
-        Map paramMap = facesContext.getExternalContext().getRequestParameterMap();
+        Map<String, String> paramMap = facesContext.getExternalContext().getRequestParameterMap();
         String clientId = component.getClientId(facesContext);
         if (isDisabledOrReadOnly(component))
         {
             return;
         }
-        String submittedValue = (String) paramMap.get(clientId);
+        String submittedValue = paramMap.get(clientId);
         if (submittedValue != null)
         {
             ((EditableValueHolder) component).setSubmittedValue(submittedValue);
@@ -153,9 +153,9 @@ public static void decodeUISelectBoolean(FacesContext facesContext, UIComponent
         {
             return;
         }
-        Map paramMap = facesContext.getExternalContext().getRequestParameterMap();
+        Map<String, String> paramMap = facesContext.getExternalContext().getRequestParameterMap();
         String clientId = component.getClientId(facesContext);
-        String reqValue = (String) paramMap.get(clientId);
+        String reqValue = paramMap.get(clientId);
         if (reqValue != null)
         {
             if ((reqValue.equalsIgnoreCase("on")
@@ -331,18 +331,18 @@ public static void decodeUISelectMany(FacesContext facesContext, UIComponent com
                     + component.getClientId(facesContext)
                     + " is not an EditableValueHolder");
         }
-        
-        Map paramValuesMap = facesContext.getExternalContext().getRequestParameterValuesMap();
+
+        Map<String, String[]> paramValuesMap = facesContext.getExternalContext().getRequestParameterValuesMap();
         String clientId = component.getClientId(facesContext);
         if (isDisabledOrReadOnly(component))
         {
             return;
         }
         
-        String[] paramValues = (String[]) paramValuesMap.get(clientId);
+        String[] paramValues = paramValuesMap.get(clientId);
         if (paramValues != null)
         {
-            ArrayList<String> reqValues = new ArrayList<String>(Arrays.asList(paramValues));
+            ArrayList<String> reqValues = new ArrayList<>(Arrays.asList(paramValues));
 
             List<SelectItemInfo> selections = SelectItemsUtils.getSelectItemInfoList(
                 (UISelectMany) component, facesContext);
@@ -378,63 +378,54 @@ public static void decodeUISelectMany(FacesContext facesContext, UIComponent com
      * @param facesContext
      * @param component
      */
-    public static void decodeUISelectOne(FacesContext facesContext, UIComponent component)
+    public static void decodeUISelectOne(FacesContext facesContext, UISelectOne component)
     {
-        if (!(component instanceof EditableValueHolder))
-        {
-            throw new IllegalArgumentException("Component "
-                    + component.getClientId(facesContext)
-                    + " is not an EditableValueHolder");
-        }
         if (isDisabledOrReadOnly(component))
         {
             return;
         }
         
-        Map paramMap = facesContext.getExternalContext().getRequestParameterMap();
-        if (component instanceof UISelectOne one)
+        Map<String, String> paramMap = facesContext.getExternalContext().getRequestParameterMap();
+
+        String group = component.getGroup();
+        if (group != null && !group.isEmpty())
         {
-            String group = one.getGroup();
-            if (group != null && !group.isEmpty())
+            UIForm form = ComponentUtils.findClosest(UIForm.class, component);
+            String fullGroupId = form.getClientId(facesContext) +
+                    facesContext.getNamingContainerSeparatorChar() + group;
+            String submittedValue = paramMap.get(fullGroupId);
+            if (submittedValue != null)
             {
-                UIForm form = ComponentUtils.findClosest(UIForm.class, component);
-                String fullGroupId = form.getClientId(facesContext) +
-                        facesContext.getNamingContainerSeparatorChar() + group;
-                String submittedValue = (String) paramMap.get(fullGroupId);
-                if (submittedValue != null)
+                String componentClientId = component.getClientId(facesContext);
+                String submittedValueNamespace = componentClientId +
+                        facesContext.getNamingContainerSeparatorChar();
+                if (submittedValue.startsWith(submittedValueNamespace))
                 {
-                    String componentClientId = component.getClientId(facesContext);
-                    String submittedValueNamespace = componentClientId +
-                            facesContext.getNamingContainerSeparatorChar();
-                    if (submittedValue.startsWith(submittedValueNamespace))
-                    {
-                        submittedValue = submittedValue.substring(submittedValueNamespace.length());
-                        SelectOneGroupSetSubmittedValueCallback callback = 
-                                new SelectOneGroupSetSubmittedValueCallback(group,
-                                        submittedValue,
-                                        componentClientId,
-                                        component.getValueExpression("value") != null);
-                        form.visitTree(VisitContext.createVisitContext(facesContext,
-                                null, MyFacesVisitHints.SET_SKIP_UNRENDERED),
-                                callback);
-                    }
+                    submittedValue = submittedValue.substring(submittedValueNamespace.length());
+                    SelectOneGroupSetSubmittedValueCallback callback =
+                            new SelectOneGroupSetSubmittedValueCallback(group,
+                                    submittedValue,
+                                    componentClientId,
+                                    component.getValueExpression("value") != null);
+                    form.visitTree(VisitContext.createVisitContext(facesContext,
+                            null, MyFacesVisitHints.SET_SKIP_UNRENDERED),
+                            callback);
                 }
-                else 
-                {
-                    // means input was not submitted. set to empty string so we can validate required fields
-                    // if not set, a null value will skip validation -- see beginning of UIInput#validate
-                    one.setSubmittedValue(RendererUtils.EMPTY_STRING);
-                } 
-                return;
             }
+            else
+            {
+                // means input was not submitted. set to empty string so we can validate required fields
+                // if not set, a null value will skip validation -- see beginning of UIInput#validate
+                component.setSubmittedValue(RendererUtils.EMPTY_STRING);
+            }
+            return;
         }
         
         String clientId = component.getClientId(facesContext);
-        String submittedValue = (String) paramMap.get(clientId);
+        String submittedValue = paramMap.get(clientId);
         if (submittedValue != null)
         {
-            List<SelectItemInfo> selections = SelectItemsUtils.getSelectItemInfoList(
-                (UISelectOne) component, facesContext);
+            List<SelectItemInfo> selections = SelectItemsUtils.getSelectItemInfoList(component, facesContext);
 
             // if disabled value is submitted, do not use it
             for(SelectItemInfo itemInfo: selections)
@@ -451,12 +442,12 @@ public static void decodeUISelectOne(FacesContext facesContext, UIComponent comp
                 }
             }
             //request parameter found, set submitted value
-            ((EditableValueHolder) component).setSubmittedValue(submittedValue);
+            component.setSubmittedValue(submittedValue);
         }
         else
         {
             //see reason for this action at decodeUISelectMany
-            ((EditableValueHolder) component).setSubmittedValue(RendererUtils.EMPTY_STRING);
+            component.setSubmittedValue(RendererUtils.EMPTY_STRING);
         }
     }
     
@@ -483,7 +474,7 @@ public VisitResult visit(VisitContext context, UIComponent target)
         {
             if (target instanceof UISelectOne one)
             {
-                UISelectOne targetSelectOneRadio =one;
+                UISelectOne targetSelectOneRadio = one;
                 String targetGroup = targetSelectOneRadio.getGroup();
                 if (group.equals(targetGroup))
                 {
@@ -528,23 +519,20 @@ public VisitResult visit(VisitContext context, UIComponent target)
         }
     }
 
-    public static Set getSubmittedOrSelectedValuesAsSet(boolean selectMany,
-            UIComponent uiComponent, FacesContext facesContext, Converter converter)
+    public static Set getSubmittedOrSelectedValuesAsSet(UIComponent uiComponent, FacesContext facesContext,
+                                                        Converter<?> converter)
     {
-        Set lookupSet;
-        if (selectMany)
+        Set lookupSet = null;
+        if (uiComponent instanceof UISelectMany uiSelectMany)
         {
-            UISelectMany uiSelectMany = (UISelectMany) uiComponent;
             lookupSet = RendererUtils.getSubmittedValuesAsSet(facesContext, uiComponent, converter, uiSelectMany);
             if (lookupSet == null)
             {
-                lookupSet = RendererUtils.getSelectedValuesAsSet(facesContext,
-                        uiComponent, converter, uiSelectMany);
+                lookupSet = RendererUtils.getSelectedValuesAsSet(facesContext, uiComponent, converter, uiSelectMany);
             }
         }
-        else
+        else if (uiComponent instanceof UISelectOne uiSelectOne)
         {
-            UISelectOne uiSelectOne = (UISelectOne) uiComponent;
             Object lookup = uiSelectOne.getSubmittedValue();
             if (lookup == null)
             {
@@ -565,44 +553,45 @@ else if (RendererUtils.EMPTY_STRING.equals(lookup))
         return lookupSet;
     }
 
-    public static Converter findUISelectManyConverterFailsafe(FacesContext facesContext, UIComponent uiComponent)
+    public static <T extends UISelectMany> Converter<?> findUISelectManyConverterFailsafe(FacesContext facesContext,
+                                                                                          T component)
     {
         // invoke with considerValueType = false
-        return findUISelectManyConverterFailsafe(facesContext, uiComponent, false);
+        return findUISelectManyConverterFailsafe(facesContext, component, false);
     }
 
-    public static Converter findUISelectManyConverterFailsafe(FacesContext facesContext, UIComponent uiComponent,
+    public static <T extends UISelectMany> Converter<?> findUISelectManyConverterFailsafe(FacesContext facesContext,
+                                                                                          T component,
             boolean considerValueType)
     {
-        Converter converter;
+        Converter<?> converter;
         try
         {
-            converter = RendererUtils.findUISelectManyConverter(facesContext,
-                    (UISelectMany) uiComponent, considerValueType);
+            converter = RendererUtils.findUISelectManyConverter(facesContext, component, considerValueType);
         }
         catch (FacesException e)
         {
             log.log(Level.SEVERE,
-                    "Error finding Converter for component with id "
-                            + uiComponent.getClientId(facesContext), e);
+                    "Error finding Converter for component with id " + component.getClientId(facesContext), e);
             converter = null;
         }
         return converter;
     }
 
-    public static Converter findUIOutputConverterFailSafe(FacesContext facesContext, UIComponent uiComponent)
+    public static <T extends UIOutput> Converter<?> findUIOutputConverterFailSafe(FacesContext facesContext,
+                                                                                     T component)
     {
-        Converter converter;
+        Converter<?> converter;
         try
         {
-            converter = RendererUtils.findUIOutputConverter(facesContext, (UIOutput) uiComponent);
+            converter = RendererUtils.findUIOutputConverter(facesContext, component);
         }
         catch (FacesException e)
         {
             log.log(Level.SEVERE,
                     "Error finding Converter for component with id "
-                            + uiComponent.getClientId(facesContext) + " "
-                            + ComponentUtils.getPathToComponent(uiComponent), e);
+                            + component.getClientId(facesContext) + " "
+                            + ComponentUtils.getPathToComponent(component), e);
             converter = null;
         }
         return converter;
@@ -887,12 +876,12 @@ public static void renderDisplayValueOnlyForSelects(FacesContext facesContext, U
         ResponseWriter writer = facesContext.getResponseWriter();
 
         List<SelectItem> selectItemList = null;
-        Converter converter = null;
+        Converter<?> converter = null;
         boolean isSelectOne = false;
 
         if (uiComponent instanceof UISelectBoolean boolean1)
         {
-            converter = findUIOutputConverterFailSafe(facesContext, uiComponent);
+            converter = findUIOutputConverterFailSafe(facesContext, boolean1);
 
             writer.startElement(HTML.SPAN_ELEM, uiComponent);
             writeIdIfNecessary(writer, uiComponent, facesContext);
@@ -905,25 +894,23 @@ public static void renderDisplayValueOnlyForSelects(FacesContext facesContext, U
         }
         else
         {
-            if (uiComponent instanceof UISelectMany)
+            if (uiComponent instanceof UISelectMany selectMany)
             {
                 isSelectOne = false;
                 selectItemList = RendererUtils.getSelectItemList(uiComponent, facesContext);
-                converter = findUISelectManyConverterFailsafe(facesContext, uiComponent, considerValueType);
+                converter = findUISelectManyConverterFailsafe(facesContext, selectMany, considerValueType);
             }
-            else if (uiComponent instanceof UISelectOne)
+            else if (uiComponent instanceof UISelectOne selectOne)
             {
                 isSelectOne = true;
                 selectItemList = RendererUtils.getSelectItemList(uiComponent, facesContext);
-                converter = findUIOutputConverterFailSafe(facesContext, uiComponent);
+                converter = findUIOutputConverterFailSafe(facesContext, selectOne);
             }
 
             writer.startElement(isSelectOne ? HTML.SPAN_ELEM : HTML.UL_ELEM, uiComponent);
             writeIdIfNecessary(writer, uiComponent, facesContext);
 
-            Set lookupSet = getSubmittedOrSelectedValuesAsSet(
-                    uiComponent instanceof UISelectMany, uiComponent,
-                    facesContext, converter);
+            Set lookupSet = getSubmittedOrSelectedValuesAsSet(uiComponent, facesContext, converter);
 
             renderSelectOptionsAsText(facesContext, uiComponent, converter,
                     lookupSet, selectItemList, isSelectOne);
@@ -1036,9 +1023,7 @@ public static void appendClearHiddenCommandFormParamsFunctionCall(
         HtmlJavaScriptUtils.appendClearHiddenCommandFormParamsFunctionCall(buf, formName);
     }
 
-    @SuppressWarnings("unchecked")
-    public static void renderFormSubmitScript(FacesContext facesContext)
-            throws IOException
+    public static void renderFormSubmitScript(FacesContext facesContext) throws IOException
     {
         HtmlJavaScriptUtils.renderFormSubmitScript(facesContext);
     }
@@ -1088,7 +1073,7 @@ public static void renderLabel(ResponseWriter writer,
         {
             writer.writeAttribute("class", labelClass, "labelClass");
         }
-        if ((item.getLabel() != null) && (item.getLabel().length() > 0))
+        if (item.getLabel() != null && !item.getLabel().isEmpty())
         {
             writer.write(" ");
             if (item.isEscape())
@@ -1119,8 +1104,7 @@ public static void renderLabel(ResponseWriter writer,
         }
         else
         {
-            labelClass = (String) component.getAttributes()
-                    .get(ComponentAttrs.ENABLED_CLASS_ATTR);
+            labelClass = (String) component.getAttributes().get(ComponentAttrs.ENABLED_CLASS_ATTR);
         }
         String labelSelectedClass = null;
         if (selected)
@@ -1146,7 +1130,7 @@ public static void renderLabel(ResponseWriter writer,
         {
             writer.writeAttribute("class", labelClass, "labelClass");
         }
-        if ((item.getLabel() != null) && (item.getLabel().length() > 0))
+        if (item.getLabel() != null && !item.getLabel().isEmpty())
         {
             writer.write(HTML.NBSP_ENTITY);
             if (item.isEscape())
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/component/RepeatRenderer.java b/impl/src/main/java/org/apache/myfaces/view/facelets/component/RepeatRenderer.java
index 0d6bbabe5..fe159d590 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/component/RepeatRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/component/RepeatRenderer.java
@@ -32,7 +32,7 @@
 @JSFRenderer(family="facelets",
         renderKitId="HTML_BASIC",
         type="facelets.ui.Repeat")
-public class RepeatRenderer extends Renderer
+public class RepeatRenderer extends Renderer<UIRepeat>
 {
 
     public RepeatRenderer()
@@ -41,13 +41,13 @@ public RepeatRenderer()
     }
 
     @Override
-    public void encodeBegin(FacesContext context, UIComponent component) throws IOException
+    public void encodeBegin(FacesContext context, UIRepeat component) throws IOException
     {
 
     }
 
     @Override
-    public void encodeChildren(FacesContext context, UIComponent component) throws IOException
+    public void encodeChildren(FacesContext context, UIRepeat component) throws IOException
     {
         if (component.getChildCount() > 0)
         {
@@ -91,7 +91,7 @@ public void encodeChildren(FacesContext context, UIComponent component) throws I
     }
 
     @Override
-    public void encodeEnd(FacesContext context, UIComponent component) throws IOException
+    public void encodeEnd(FacesContext context, UIRepeat component) throws IOException
     {
         
     }
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/component/UIRepeat.java b/impl/src/main/java/org/apache/myfaces/view/facelets/component/UIRepeat.java
index f165fc6b1..099c83e40 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/component/UIRepeat.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/component/UIRepeat.java
@@ -148,7 +148,7 @@ public String getFamily()
     @JSFProperty
     public int getOffset()
     {
-        return (Integer) getStateHelper().eval(PropertyKeys.offset, 0);
+        return getStateHelper().eval(PropertyKeys.offset, 0);
     }
 
     public void setOffset(int offset)
@@ -159,7 +159,7 @@ public void setOffset(int offset)
     @JSFProperty
     public int getSize()
     {
-        return (Integer) getStateHelper().eval(PropertyKeys.size, -1);
+        return getStateHelper().eval(PropertyKeys.size, -1);
     }
 
     public void setSize(int size)
@@ -170,7 +170,7 @@ public void setSize(int size)
     @JSFProperty
     public int getStep()
     {
-        return (Integer) getStateHelper().eval(PropertyKeys.step, 1);
+        return getStateHelper().eval(PropertyKeys.step, 1);
     }
 
     public void setStep(int step)
@@ -181,7 +181,7 @@ public void setStep(int step)
     @JSFProperty
     public int getBegin()
     {
-        return (Integer) getStateHelper().eval(PropertyKeys.begin, -1);
+        return getStateHelper().eval(PropertyKeys.begin, -1);
     }
 
     public void setBegin(int begin)
@@ -192,7 +192,7 @@ public void setBegin(int begin)
     @JSFProperty
     public int getEnd()
     {
-        return (Integer) getStateHelper().eval(PropertyKeys.end, -1);
+        return getStateHelper().eval(PropertyKeys.end, -1);
     }
 
     public void setEnd(int end)
@@ -203,7 +203,7 @@ public void setEnd(int end)
     @JSFProperty(literalOnly=true)
     public String getVar()
     {
-        return (String) getStateHelper().get(PropertyKeys.var);
+        return getStateHelper().get(PropertyKeys.var);
     }
 
     public void setVar(String var)
@@ -214,7 +214,7 @@ public void setVar(String var)
     @JSFProperty(literalOnly=true)
     public String getVarStatus()
     {
-        return (String) getStateHelper().get(PropertyKeys.varStatus);
+        return getStateHelper().get(PropertyKeys.varStatus);
     }
     
     public void setVarStatus(String varStatus)
@@ -235,7 +235,7 @@ public void setVarStatus(String varStatus)
     @JSFProperty(literalOnly = true, faceletsOnly = true)
     public boolean isRowStatePreserved()
     {
-        Boolean b = (Boolean) getStateHelper().get(PropertyKeys.rowStatePreserved);
+        Boolean b = getStateHelper().get(PropertyKeys.rowStatePreserved);
         return b == null ? false : b;
     }
     
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/tag/faces/ClearBindingValueExpressionListener.java b/impl/src/main/java/org/apache/myfaces/view/facelets/tag/faces/ClearBindingValueExpressionListener.java
index b84420097..a944bc673 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/tag/faces/ClearBindingValueExpressionListener.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/tag/faces/ClearBindingValueExpressionListener.java
@@ -57,7 +57,8 @@ public void processEvent(ComponentSystemEvent event)
             Logger log = Logger.getLogger(ClearBindingValueExpressionListener.class.getName());
             if (log.isLoggable(Level.FINE))
             {
-                log.log(Level.FINE, "Cannot reset binding for: " + event.getComponent().getClientId(), e);
+                log.log(Level.FINE,
+                        "Cannot reset binding for: " + event.getComponent().getClientId(event.getFacesContext()), e);
             }
         }
         catch (NullPointerException e)
@@ -65,7 +66,8 @@ public void processEvent(ComponentSystemEvent event)
             Logger log = Logger.getLogger(ClearBindingValueExpressionListener.class.getName());
             if (log.isLoggable(Level.FINE))
             {
-                log.log(Level.FINE, "Cannot reset binding for: " + event.getComponent().getClientId(), e);
+                log.log(Level.FINE,
+                        "Cannot reset binding for: " + event.getComponent().getClientId(event.getFacesContext()), e);
             }
         }
     }