Index: libs/libmyth/uitypes.cpp
===================================================================
--- libs/libmyth/uitypes.cpp	(revision 18161)
+++ libs/libmyth/uitypes.cpp	(working copy)
@@ -4452,6 +4452,42 @@
     return false;
 }
 
+bool UIManagedTreeListType::jumpToRandom()
+{
+    if (!current_node)
+    {
+        return false;
+    }
+
+    //
+    //  Move the active node to a random node in the list
+    //
+
+    int position = random() % current_node->siblingCount();
+    GenericTree *new_node = current_node->getParent()->getChildAt(position, visual_order);
+
+    if (new_node)
+    {
+        current_node = new_node;
+        if (show_whole_tree)
+        {
+            for(int i = active_bin; i <= bins; i++)
+            {
+                emit requestUpdate(screen_corners[i]);
+            }
+        }
+        else
+        {
+            refresh();
+        }
+
+        emit nodeEntered(current_node->getInt(), current_node->getAttributes());
+        current_node->becomeSelectedChild();
+        return true;
+    }
+    return false;
+}
+
 int UIManagedTreeListType::calculateEntriesInBin(int bin_number)
 {
     //
Index: libs/libmyth/uitypes.h
===================================================================
--- libs/libmyth/uitypes.h	(revision 18161)
+++ libs/libmyth/uitypes.h	(working copy)
@@ -1113,6 +1113,7 @@
     bool    moveUpByAmount(int number_up = 1, bool do_refresh = true);
     bool    moveDown(bool do_refresh = true);
     bool    moveDownByAmount(int number_down = 1, bool do_refresh = true);
+    bool    jumpToRandom();
     bool    pageUp();
     bool    pageDown();
     bool    nextActive(bool wrap_around, bool traverse_up_down);
