Index: GUICoverFlow.cs
===================================================================
--- GUICoverFlow.cs	(revision 27941)
+++ GUICoverFlow.cs	(working copy)
@@ -106,6 +106,9 @@
 
     #endregion
 
+    //public delegate void AdditionalInfoDelegate();
+    //public event AdditionalInfoDelegate AdditionalInfo;
+
     #region Member variables
 
     // Defines the kind of search.
@@ -419,7 +422,10 @@
           QueueAction(action);
         }
 
+        //bool wasSpun = CardIsSpun();
         UnspinCard();
+        //if (wasSpun && action.wID == Action.ActionType.ACTION_SHOW_INFO && AdditionalInfo != null)
+        //  AdditionalInfo();
         return;
       }
 
@@ -503,8 +509,8 @@
                 if (_searchString.Length > 0)
                 {
                   _searchString = _searchString.Remove(_searchString.Length - 1, 1);
+                  SearchItem(_searchString, SearchType.SEARCH_FIRST);
                 }
-                SearchItem(_searchString, SearchType.SEARCH_FIRST);
               }
 
               if (((action.m_key.KeyChar >= 65) && (action.m_key.KeyChar <= 90)) ||
@@ -627,6 +633,8 @@
         {
           int iItem = message.Param1;
           SelectCardIndex(iItem);
+          //we have to ensure OnSelectionChangedHappens
+          OnSelectionChanged();
         }
       }
 
@@ -2510,6 +2518,10 @@
         }
         return -1;
       }
+      set
+      {
+        SelectCardIndexNow(value);
+      }
     }
 
     #endregion
Index: GUIFilmstripControl.cs
===================================================================
--- GUIFilmstripControl.cs	(revision 27941)
+++ GUIFilmstripControl.cs	(working copy)
@@ -649,7 +649,7 @@
       {
         TransformMatrix matrix = GUIGraphicsContext.ControlTransform;
         GUIGraphicsContext.ControlTransform = new TransformMatrix();
-        if (!_scrollingLeft)
+        //if (!_scrollingLeft)
         {
           if (_showFolder)
           {
@@ -713,7 +713,7 @@
       {
         TransformMatrix matrix = GUIGraphicsContext.ControlTransform;
         GUIGraphicsContext.ControlTransform = new TransformMatrix();
-        if (!_scrollingLeft)
+        //if (!_scrollingLeft)
         {
           if (_showFolder)
           {
@@ -1368,35 +1368,7 @@
         if (message.Message == GUIMessage.MessageType.GUI_MSG_ITEM_SELECT)
         {
           int iItem = message.Param1;
-          if (iItem >= 0 && iItem < _listItems.Count)
-          {
-            int iPage = 1;
-            _cursorX = 0;
-            _offset = 0;
-            while (iItem >= (_columns))
-            {
-              _offset += (_columns);
-              iItem -= (_columns);
-              iPage++;
-            }
-            if ((iItem != _scrollStartOffset) && (_listItems.Count > _scrollStartOffset))
-            {
-              // adjust in the middle
-              int delta = _scrollStartOffset - iItem;
-              if (_offset >= delta)
-              {
-                iItem += delta;
-                _offset -= delta;
-              }
-            }
-            if (_upDownControl != null)
-            {
-              _upDownControl.Value = iPage;
-            }
-            _cursorX = iItem;
-            OnSelectionChanged();
-          }
-          _refresh = true;
+          SelectItemIndex(iItem);
         }
       }
 
@@ -1454,6 +1426,39 @@
       return false;
     }
 
+    private void SelectItemIndex(int iItem)
+    {
+      if (iItem < 0) iItem = 0;
+      if (iItem >= _listItems.Count) iItem = _listItems.Count - 1;
+
+      int iPage = 1;
+      _cursorX = 0;
+      _offset = 0;
+      while (iItem >= (_columns))
+      {
+        _offset += (_columns);
+        iItem -= (_columns);
+        iPage++;
+      }
+      if ((iItem != _scrollStartOffset) && (_listItems.Count > _scrollStartOffset))
+      {
+        // adjust in the middle
+        int delta = _scrollStartOffset - iItem;
+        if (_offset >= delta)
+        {
+        iItem += delta;
+        _offset -= delta;
+        }
+      }
+      if (_upDownControl != null)
+      {
+        _upDownControl.Value = iPage;
+      }
+      _cursorX = iItem;
+      OnSelectionChanged();
+      _refresh = true;
+    }
+
     /// <summary>
     /// Search for first item starting with searchkey
     /// </summary>
@@ -3324,6 +3329,10 @@
         }
         return -1;
       }
+      set
+      {
+        SelectItemIndex(value);
+      }
     }
 
     public void Clear()
