Index: jsf-api/src/main/java/javax/faces/component/UIComponent.java
===================================================================
--- jsf-api/src/main/java/javax/faces/component/UIComponent.java	(revision 8675)
+++ jsf-api/src/main/java/javax/faces/component/UIComponent.java	(working copy)
@@ -251,7 +251,7 @@
      * on what has been set.
      */
     List<String> attributesThatAreSet;
-    TransientStateHelper stateHelper = null;
+    ComponentStateHelper stateHelper = null;
     UIComponent compositeParent;
 
 
@@ -547,7 +547,7 @@
      * @since 2.1
      */
     
-    protected TransientStateHelper getTransientStateHelper()
+    public final TransientStateHelper getTransientStateHelper()
     {
         return getTransientStateHelper(true);
     }
@@ -565,7 +565,7 @@
      * @since 2.1
      */
     
-    protected TransientStateHelper getTransientStateHelper(boolean create) {
+    public TransientStateHelper getTransientStateHelper(boolean create) {
         
         if (create && stateHelper == null) {
             stateHelper = new ComponentStateHelper(this);
@@ -584,7 +584,12 @@
     
     public void restoreTransientState(FacesContext context, Object state)
     {
-        getTransientStateHelper().restoreTransientState(context, state);
+        boolean forceCreate = (state != null);
+        TransientStateHelper helper = getTransientStateHelper(forceCreate);
+
+        if (helper != null) {
+            helper.restoreTransientState(context, state);
+        }
     }
 
     /**
@@ -597,7 +602,9 @@
     
     public Object saveTransientState(FacesContext context)
     {
-        return getTransientStateHelper().saveTransientState(context);
+        TransientStateHelper helper = getTransientStateHelper(false);
+
+        return (helper == null) ? null : helper.saveTransientState(context);
     }
 
     private boolean isInView;
Index: jsf-api/src/main/java/javax/faces/component/ComponentStateHelper.java
===================================================================
--- jsf-api/src/main/java/javax/faces/component/ComponentStateHelper.java	(revision 8675)
+++ jsf-api/src/main/java/javax/faces/component/ComponentStateHelper.java	(working copy)
@@ -56,13 +56,13 @@
  * of the StateHolder interface.
  */
 @SuppressWarnings({"unchecked"})
-class ComponentStateHelper implements StateHelper , TransientStateHelper, TransientStateHolder {
+class ComponentStateHelper implements StateHelper , TransientStateHelper {
 
     private UIComponent component;
     private boolean isTransient;
     private Map<Serializable, Object> deltaMap;
     private Map<Serializable, Object> defaultMap;
-    private Map<Serializable, Object> transientState;
+    private Map<Object, Object> transientState;
     
     // ------------------------------------------------------------ Constructors
 
@@ -444,12 +444,12 @@
     }
 
 
-    public Object getTransient(Serializable key)
+    public Object getTransient(Object key)
     {
         return (transientState == null) ? null : transientState.get(key);
     }
 
-    public Object getTransient(Serializable key, Object defaultValue)
+    public Object getTransient(Object key, Object defaultValue)
     {
         Object returnValue = (transientState == null) ? null : transientState.get(key);
         if (returnValue != null)
@@ -459,11 +459,11 @@
         return defaultValue;
     }
 
-    public Object putTransient(Serializable key, Object value)
+    public Object putTransient(Object key, Object value)
     {
         if (transientState == null)
         {
-            transientState = new HashMap<Serializable, Object>();
+            transientState = new HashMap<Object, Object>();
         }
         return transientState.put(key, value);
     }
@@ -471,7 +471,7 @@
     @SuppressWarnings("unchecked")
     public void restoreTransientState(FacesContext context, Object state)
     {
-        transientState = (Map<Serializable, Object>) state;
+        transientState = (Map<Object, Object>) state;
     }
     
     public Object saveTransientState(FacesContext context)
Index: jsf-api/src/main/java/javax/faces/component/TransientStateHelper.java
===================================================================
--- jsf-api/src/main/java/javax/faces/component/TransientStateHelper.java	(revision 8675)
+++ jsf-api/src/main/java/javax/faces/component/TransientStateHelper.java	(working copy)
@@ -61,7 +61,7 @@
  * @since 2.1
  * 
  */
-public interface TransientStateHelper extends StateHelper, TransientStateHolder
+public interface TransientStateHelper extends TransientStateHolder
 {
     /**
      * <p class="changed_added_2_1">Return the value currently
@@ -69,7 +69,7 @@
      * @param key the key for which the value should be returned.
      * @since 2.1
      */
-    public Object getTransient(Serializable key);
+    public Object getTransient(Object key);
     
     /**
      * <p class="changed_added_2_1">Performs the same logic as {@link
@@ -81,7 +81,7 @@
      * the call to <code>get()</code>.
      * @since 2.1
      */
-    public Object getTransient(Serializable key, Object defaultValue);
+    public Object getTransient(Object key, Object defaultValue);
 
     /**
      * <p class="changed_added_2_1">Return the previously stored value
@@ -93,5 +93,5 @@
      * @param value the value
      * @since 2.1
      */
-    public Object putTransient(Serializable key, Object value);
+    public Object putTransient(Object key, Object value);
 }
