     //--------------------------------------------------------------------------
 
     /**
-     *  Acquires a StageText and removes it from the pool. If the host
-     *  StyleableStageText2 has recently released a StageText and that StageText
-     *  is still in the pool, that StageText will be returned.
-     */
-    public  function acquireStageText(host:ScrollableStageText):StageText
-    {
-        var result:StageText = map_StyleableStageText_to_StageText[host];
-
-        if (!result)
-        {
-            if (host.multiline)
+     *  Acquires a StageText and removes it from the pool.
+     *  if savedStageText is not null, will use it only if it is still in the pool (which means not disposed, and not used by someone else)
+     *  if savedStageText is null => always create a new instance.
+     */
+    public  function acquireStageText(multiline: Boolean, savedStageText: StageText = null):StageText
+    {
+        var result: StageText = null;
+        var pool: Vector.<StageText> = multiline ? multilinePool : singleLinePool;
+
+        if (savedStageText != null)
+        {
+            // reuse it if still in the pool.
+            var index: int;
+            index = pool.indexOf(savedStageText);
+            if (index >= 0)
             {
-                if (multilinePool.length == 0)
-                    while (multilinePool.length < poolReserve)
-                        multilinePool.push(new StageText(new StageTextInitOptions(true)));
-
-                result = multilinePool.pop();
+                result = savedStageText;
+                pool.splice(index, 1);
             }
-            else
-            {
-                if (singleLinePool.length == 0)
-                    while (singleLinePool.length < poolReserve)
-                        singleLinePool.push(new StageText(new StageTextInitOptions(false)));
-
-                result = singleLinePool.pop();
-            }
+        }
+
+        // not found or savedStageText was null,  always  create new
+        if (result == null)
+        {
+            if (pool.length == 0)
+                while (pool.length < poolReserve)
+                    pool.push(new StageText(new StageTextInitOptions(multiline)));
+            result = pool.pop();
 
             // The first time a StageText is acquired, it's guaranteed to have been
             // newly-created. Take that opportunity to stash away the StageText's

        return _current;
    }

      //--------------------------------------------------------------------------
        //
        //  Constructor
        //
        //--------------------------------------------------------------------------

    /**
     * @private


import flash.events.TimerEvent;
import flash.text.StageText;
import flash.text.StageTextInitOptions;
import flash.utils.Timer;

/**  @private
 * StageTextPool maintains a pool a StageText to avoid allocating a new StageText each time a TextInput  is added to stage.
 *
 * StageText are removed from the pool when a TextInput  is added to the stage and added back when it removed from stage.
 *   If this causes the pool to grow
 *  larger than its reserve size, this starts a timer to check and reduce
 *  the size of the pool poolTimerInterval milliseconds later.
 *  StageText are disposed before being purged  from the pool.
 *
 * Not that SST keeps a reference to its last used StageText in savedStageText property, when it's removed from stage.
 * If the SST is added back to stage, it can reuse its saved StageText if it's also still in the pool (which means it has not been disposed, or used by anoter SST).
 *
 */
class StageTextPool
{
    //--------------------------------------------------------------------------
