diff --git a/mythtv/programs/mythfrontend/videodlg.cpp b/mythtv/programs/mythfrontend/videodlg.cpp
index 829b77b..bf3f481 100644
--- a/mythtv/programs/mythfrontend/videodlg.cpp
+++ b/mythtv/programs/mythfrontend/videodlg.cpp
@@ -889,6 +889,77 @@ void VideoDialog::SavePosition(void)
     gCoreContext->SaveSetting("mythvideo.VideoTreeLastActive", m_d->m_lastTreeNodePath);
 }
 
+void VideoDialog::LoadPosition(bool force)
+{
+	if(!force && !m_d->m_rememberPosition) {
+		//Don't restore position
+		return;
+	}
+
+	if (m_d->m_type == DLG_TREE)
+    {
+    	QStringList route =
+	    gCoreContext->GetSetting("mythvideo.VideoTreeLastActive",
+    		"").split("\n");
+	    m_videoButtonTree->SetNodeByString(route);
+    } else if (m_d->m_type == DLG_GALLERY || m_d->m_type == DLG_BROWSER) {
+        MythGenericTree *selectedNode = m_d->m_currentNode->getSelectedChild();
+        QStringList lastTreeNodePath = gCoreContext->GetSetting("mythvideo.VideoTreeLastActive", "").split("\n");
+        if (lastTreeNodePath.size() > 0)
+        {
+            MythGenericTree *node;
+
+            // go through the path list and set the current node
+            for (int i = 0; i < lastTreeNodePath.size(); i++)
+            {
+                node = m_d->m_currentNode->getChildByName(lastTreeNodePath.at(i));
+                if (node != NULL)
+                {
+                    // check if the node name is the same as the currently selected
+                    // one in the saved tree list. if yes then we are on the right
+                    // way down the video tree to find the last saved position
+                    if (node->getString().compare(lastTreeNodePath.at(i)) == 0)
+                    {
+                        // set the folder as the new node so we can travel further down
+                        // dont do this if its the last part of the saved video path tree
+                        if (node->getInt() == kSubFolder &&
+                            node->childCount() > 1 &&
+                            i < lastTreeNodePath.size()-1)
+                        {
+                            SetCurrentNode(node);
+                        }
+                        // in the last run the selectedNode will be the last
+                        // entry of the saved tree node.
+                        if (lastTreeNodePath.at(i) == lastTreeNodePath.last())
+                            selectedNode = node;
+                    }
+                }
+            }
+        }
+
+        typedef QList<MythGenericTree *> MGTreeChildList;
+        MGTreeChildList *lchildren = m_d->m_currentNode->getAllChildren();
+
+        for (MGTreeChildList::const_iterator p = lchildren->begin();
+                p != lchildren->end(); ++p)
+        {
+            if (*p != NULL)
+            {
+                MythUIButtonListItem *item =
+                        new MythUIButtonListItem(m_videoButtonList, QString(), 0,
+                                true, MythUIButtonListItem::NotChecked);
+
+                item->SetData(qVariantFromValue(*p));
+
+                UpdateItem(item);
+
+                if (*p == selectedNode)
+                    m_videoButtonList->SetItemCurrent(item);
+            }
+        }
+    }
+}
+
 bool VideoDialog::Create()
 {
     if (m_d->m_type == DLG_DEFAULT)
@@ -1065,6 +1136,8 @@ void VideoDialog::refreshData()
 
     if (m_novideoText)
         m_novideoText->SetVisible(noFiles);
+
+	LoadPosition(true);
 }
 
 void VideoDialog::scanFinished(bool dbChanged)
@@ -1109,19 +1182,6 @@ void VideoDialog::loadData()
     if (m_d->m_type == DLG_TREE)
     {
         m_videoButtonTree->AssignTree(m_d->m_rootNode);
-
-        if (m_d->m_firstLoadPass)
-        {
-            m_d->m_firstLoadPass = false;
-
-            if (m_d->m_rememberPosition)
-            {
-                QStringList route =
-                        gCoreContext->GetSetting("mythvideo.VideoTreeLastActive",
-                                "").split("\n");
-                m_videoButtonTree->SetNodeByString(route);
-            }
-        }
     }
     else
     {
@@ -1136,75 +1196,13 @@ void VideoDialog::loadData()
         if (!m_d->m_currentNode)
             return;
 
-        MythGenericTree *selectedNode = m_d->m_currentNode->getSelectedChild();
-
-        // restore the last saved position in the video tree if this is the first
-        // time this method is called and the option is set in the database
-        if (m_d->m_firstLoadPass)
-        {
-            if (m_d->m_rememberPosition)
-            {
-                QStringList lastTreeNodePath = gCoreContext->GetSetting("mythvideo.VideoTreeLastActive", "").split("\n");
-
-                if (m_d->m_type == DLG_GALLERY || m_d->m_type == DLG_BROWSER)
-                {
-                    if (lastTreeNodePath.size() > 0)
-                    {
-                        MythGenericTree *node;
-
-                        // go through the path list and set the current node
-                        for (int i = 0; i < lastTreeNodePath.size(); i++)
-                        {
-                            node = m_d->m_currentNode->getChildByName(lastTreeNodePath.at(i));
-                            if (node != NULL)
-                            {
-                                // check if the node name is the same as the currently selected
-                                // one in the saved tree list. if yes then we are on the right
-                                // way down the video tree to find the last saved position
-                                if (node->getString().compare(lastTreeNodePath.at(i)) == 0)
-                                {
-                                    // set the folder as the new node so we can travel further down
-                                    // dont do this if its the last part of the saved video path tree
-                                    if (node->getInt() == kSubFolder &&
-                                        node->childCount() > 1 &&
-                                        i < lastTreeNodePath.size()-1)
-                                    {
-                                        SetCurrentNode(node);
-                                    }
-                                    // in the last run the selectedNode will be the last
-                                    // entry of the saved tree node.
-                                    if (lastTreeNodePath.at(i) == lastTreeNodePath.last())
-                                        selectedNode = node;
-                                }
-                            }
-                        }
-                        m_d->m_firstLoadPass = false;
-                    }
-                }
-            }
-        }
-
-        typedef QList<MythGenericTree *> MGTreeChildList;
-        MGTreeChildList *lchildren = m_d->m_currentNode->getAllChildren();
-
-        for (MGTreeChildList::const_iterator p = lchildren->begin();
-                p != lchildren->end(); ++p)
-        {
-            if (*p != NULL)
-            {
-                MythUIButtonListItem *item =
-                        new MythUIButtonListItem(m_videoButtonList, QString(), 0,
-                                true, MythUIButtonListItem::NotChecked);
-
-                item->SetData(qVariantFromValue(*p));
-
-                UpdateItem(item);
-
-                if (*p == selectedNode)
-                    m_videoButtonList->SetItemCurrent(item);
-            }
-        }
     }
+		
+	if (m_d->m_firstLoadPass)
+    {
+        m_d->m_firstLoadPass = false;
+		LoadPosition(false);
+	}
 
     UpdatePosition();
 }
@@ -3440,6 +3438,8 @@ void VideoDialog::EditMetadata()
     if (!metadata)
         return;
 
+	SavePosition();
+
     MythScreenStack *screenStack = GetScreenStack();
 
     EditMetadataDialog *md_editor = new EditMetadataDialog(screenStack,
diff --git a/mythtv/programs/mythfrontend/videodlg.h b/mythtv/programs/mythfrontend/videodlg.h
index b82fa87..be18fe5 100644
--- a/mythtv/programs/mythfrontend/videodlg.h
+++ b/mythtv/programs/mythfrontend/videodlg.h
@@ -173,6 +173,7 @@ class VideoDialog : public MythScreenType
     void StartVideoImageSet(VideoMetadata *metadata);
 
     void SavePosition(void);
+	void LoadPosition(bool force);
 
   private slots:
 
