diff --git a/mythtv/libs/libmythui/mythmainwindow.cpp b/mythtv/libs/libmythui/mythmainwindow.cpp
index e69e4fd..2a60ada 100644
--- a/mythtv/libs/libmythui/mythmainwindow.cpp
+++ b/mythtv/libs/libmythui/mythmainwindow.cpp
@@ -80,6 +80,8 @@ using namespace std;
 
 #define LOC      QString("MythMainWindow: ")
 
+
+
 class KeyContext
 {
   public:
@@ -288,6 +290,134 @@ int MythMainWindowPrivate::TranslateKeyNum(QKeyEvent* e)
     return keynum;
 }
 
+MythKeyBinding::MythKeyBinding(const QString &context, const QString &action, const QString &description, const QString &hostname, const QString &keylist)
+{
+    m_context     = context;
+    m_action      = action;
+    m_keylist     = keylist;
+    m_hostname    = hostname;
+    m_description = description;
+};
+
+MythKeyBinding::MythKeyBinding(const MythKeyBinding &keyBinding)
+{
+    m_context     = keyBinding.m_context;
+    m_action      = keyBinding.m_action;
+    m_keylist     = keyBinding.m_keylist;
+    m_hostname    = keyBinding.m_hostname;
+    m_description = keyBinding.m_description;
+};
+
+
+void MythMainWindow::loadKeyBindings(QList<MythKeyBinding> &keybindings, const QString &hostname)
+{
+    MSqlQuery query(MSqlQuery::InitCon());
+    query.prepare(
+        "SELECT context, action, description, hostname, keylist "
+        "FROM keybindings "
+        "WHERE hostname = :HOSTNAME "
+        "ORDER BY context, action");
+    query.bindValue(":HOSTNAME", hostname);
+
+    if (!query.exec() || !query.isActive())
+    {
+        MythDB::DBError("MythMainWindow::loadKeyBindings", query);
+        return;
+    }
+
+    while (query.next())
+    {
+        MythKeyBinding keyBinding(query.value(0).toString(),query.value(1).toString(),
+            query.value(2).toString(),query.value(3).toString(),query.value(4).toString());
+        keybindings.append(keyBinding);
+    }
+}
+
+bool MythMainWindow::saveKeyBinding(const MythKeyBinding & keybinding)
+{
+
+    MSqlQuery query(MSqlQuery::InitCon());
+    query.prepare(
+        "UPDATE keybindings "
+        "SET keylist = :KEYLIST "
+        "WHERE hostname = :HOSTNAME AND "
+        "      action   = :ACTION   AND "
+        "      context  = :CONTEXT");
+
+    query.bindValue(":KEYLIST",  keybinding.keylist());
+    query.bindValue(":HOSTNAME", keybinding.hostname());
+    query.bindValue(":CONTEXT",  keybinding.context());
+    query.bindValue(":ACTION",   keybinding.action());
+
+    if (!query.exec() || !query.isActive())
+    {
+        MythDB::DBError("MythMainWindow::saveKeyBinding", query);
+        return false;
+    }
+    return true;
+}
+
+MythJumpPoint::MythJumpPoint(const QString &destination, const QString &description, const QString &hostname, const QString &keylist)
+{
+    m_destination = destination;
+    m_keylist     = keylist;
+    m_hostname    = hostname;
+    m_description = description;
+};
+
+MythJumpPoint::MythJumpPoint(const MythJumpPoint &jumpPoint)
+{
+    m_destination = jumpPoint.m_destination;
+    m_keylist     = jumpPoint.m_keylist;
+    m_hostname    = jumpPoint.m_hostname;
+    m_description = jumpPoint.m_description;
+};
+
+
+void MythMainWindow::loadJumpPoints(QList<MythJumpPoint> &jumpPoints, const QString &hostname)
+{
+    MSqlQuery query(MSqlQuery::InitCon());
+    query.prepare(
+        "SELECT destination, keylist, hostname, description "
+        "FROM jumppoints "
+        "WHERE hostname = :HOSTNAME "
+        "ORDER BY destination");
+    query.bindValue(":HOSTNAME", hostname);
+
+    if (!query.exec() || !query.isActive())
+    {
+        MythDB::DBError("MythMainWindow::loadJumpPoints", query);
+        return;
+    }
+
+    while (query.next())
+    {
+        MythJumpPoint jumpPoint(query.value(0).toString(),query.value(1).toString(),
+            query.value(2).toString(),query.value(3).toString());
+        jumpPoints.append(jumpPoint);
+    }
+}
+
+bool MythMainWindow::saveJumpPoint(const MythJumpPoint & jumpPoint)
+{
+    MSqlQuery query(MSqlQuery::InitCon());
+    query.prepare(
+        "UPDATE jumppoints "
+        "SET keylist = :KEYLIST "
+        "WHERE hostname    = :HOSTNAME AND"
+        "      destination = :DESTINATION");
+    query.bindValue(":KEYLIST",     jumpPoint.keylist());
+    query.bindValue(":HOSTNAME",    jumpPoint.hostname());
+    query.bindValue(":DESTINATION", jumpPoint.destination());
+
+    if (!query.exec() || !query.isActive())
+    {
+        MythDB::DBError("MythMainWindow::saveJumpPoint", query);
+        return false;
+    }
+    return true;
+}
+
 static MythMainWindow *mainWin = NULL;
 static QMutex mainLock;
 
diff --git a/mythtv/libs/libmythui/mythmainwindow.h b/mythtv/libs/libmythui/mythmainwindow.h
index 46ea69d..e3860b4 100644
--- a/mythtv/libs/libmythui/mythmainwindow.h
+++ b/mythtv/libs/libmythui/mythmainwindow.h
@@ -28,6 +28,42 @@ class MythPainterWindowVDPAU;
 class MythPainterWindowD3D9;
 class MythRender;
 
+class MUI_PUBLIC MythKeyBinding
+{
+  public:
+    MythKeyBinding(const QString &context, const QString &action, const QString &description, const QString &hostname, const QString &keylist);
+    MythKeyBinding(const MythKeyBinding &keyBinding);
+    const QString & context     () const{return m_context;};
+    const QString & action      () const{return m_action;};
+    const QString & keylist     () const{return m_keylist;};
+    const QString & hostname    () const{return m_hostname;};
+    const QString & description () const{return m_description;};
+  private:
+    QString m_context;
+    QString m_action;
+    QString m_keylist;
+    QString m_hostname;
+    QString m_description;
+};
+
+
+class MUI_PUBLIC MythJumpPoint
+{
+  public:
+    MythJumpPoint(const QString &action, const QString &description, const QString &hostname, const QString &keylist);
+    MythJumpPoint(const MythJumpPoint &keyBinding);
+    const QString & destination () const{return m_destination;};
+    const QString & keylist     () const{return m_keylist;};
+    const QString & hostname    () const{return m_hostname;};
+    const QString & description () const{return m_description;};
+  private:
+    QString m_destination;
+    QString m_keylist;
+    QString m_hostname;
+    QString m_description;
+};
+
+
 class MUI_PUBLIC MythMainWindow : public QWidget
 {
     Q_OBJECT
@@ -126,6 +162,11 @@ class MUI_PUBLIC MythMainWindow : public QWidget
     void SetEffectsEnabled(bool enable);
     void draw(void);
 
+    void loadKeyBindings(QList<MythKeyBinding> &list, const QString &hostname);
+    bool saveKeyBinding(const MythKeyBinding & keybinding);
+    void loadJumpPoints(QList<MythJumpPoint> &jumpPoints, const QString &hostname);
+    bool saveJumpPoint(const MythJumpPoint & jumpPoint);
+
   public slots:
     void mouseTimeout();
     void HideMouseTimeout();
diff --git a/mythtv/programs/mythfrontend/keybindings.cpp b/mythtv/programs/mythfrontend/keybindings.cpp
index e15de26..c4063db 100644
--- a/mythtv/programs/mythfrontend/keybindings.cpp
+++ b/mythtv/programs/mythfrontend/keybindings.cpp
@@ -262,25 +262,10 @@ bool KeyBindings::RemoveActionKey(const QString &context_name,
  */
 void KeyBindings::CommitAction(const ActionID &id)
 {
-    MSqlQuery query(MSqlQuery::InitCon());
-    query.prepare(
-        "UPDATE keybindings "
-        "SET keylist = :KEYLIST "
-        "WHERE hostname = :HOSTNAME AND "
-        "      action   = :ACTION   AND "
-        "      context  = :CONTEXT");
-
     QString keys = m_actionSet.GetKeyString(id);
-    query.bindValue(":KEYLIST",  keys);
-    query.bindValue(":HOSTNAME", m_hostname);
-    query.bindValue(":CONTEXT",  id.GetContext());
-    query.bindValue(":ACTION",   id.GetAction());
-
-    if (!query.exec() || !query.isActive())
-    {
-        MythDB::DBError("KeyBindings::CommitAction", query);
-        return;
-    }
+    if (!GetMythMainWindow()->saveKeyBinding(MythKeyBinding(
+        id.GetContext(), id.GetAction(), "",
+        m_hostname,keys))) return;
 
     GetMythMainWindow()->ClearKey(id.GetContext(), id.GetAction());
     GetMythMainWindow()->BindKey(id.GetContext(), id.GetAction(), keys);
@@ -293,23 +278,10 @@ void KeyBindings::CommitAction(const ActionID &id)
  */
 void KeyBindings::CommitJumppoint(const ActionID &id)
 {
-    MSqlQuery query(MSqlQuery::InitCon());
-    query.prepare(
-        "UPDATE jumppoints "
-        "SET keylist = :KEYLIST "
-        "WHERE hostname    = :HOSTNAME AND"
-        "      destination = :DESTINATION");
-
     QString keys = m_actionSet.GetKeyString(id);
-    query.bindValue(":KEYLIST",     keys);
-    query.bindValue(":HOSTNAME",    m_hostname);
-    query.bindValue(":DESTINATION", id.GetAction());
-
-    if (!query.exec() || !query.isActive())
-    {
-        MythDB::DBError("KeyBindings::CommitJumppoint", query);
-        return;
-    }
+    if (!GetMythMainWindow()->saveJumpPoint(MythJumpPoint(
+        id.GetAction(), "",
+        m_hostname,keys))) return;
 
     GetMythMainWindow()->ClearJump(id.GetAction());
     GetMythMainWindow()->BindJump(id.GetAction(), keys);
@@ -350,33 +322,22 @@ void KeyBindings::CommitChanges(void)
  */
 void KeyBindings::LoadJumppoints(void)
 {
-    MSqlQuery query(MSqlQuery::InitCon());
-    query.prepare(
-        "SELECT destination, description, keylist "
-        "FROM jumppoints "
-        "WHERE hostname = :HOSTNAME "
-        "ORDER BY destination");
-    query.bindValue(":HOSTNAME", m_hostname);
-
-    if (!query.exec() || !query.isActive())
-    {
-        MythDB::DBError("KeyBindings::LoadJumppoint", query);
-        return;
-    }
+    QList<MythJumpPoint> jumpPoints;
+    GetMythMainWindow()->loadJumpPoints(jumpPoints, m_hostname);
 
-    while (query.next())
+    foreach (const MythJumpPoint& currentJumpPoint, jumpPoints)
     {
-        ActionID id(ActionSet::kJumpContext, query.value(0).toString());
+        ActionID id(ActionSet::kJumpContext, currentJumpPoint.destination());
 
-        if (query.value(1).toString().isEmpty())
+        if (currentJumpPoint.description().isEmpty())
         {
-            m_actionSet.AddAction(id, query.value(0).toString(),
-                                  query.value(2).toString());
+            m_actionSet.AddAction(id, currentJumpPoint.destination(),
+                                  currentJumpPoint.keylist());
         }
         else
         {
-            m_actionSet.AddAction(id, query.value(1).toString(),
-                                  query.value(2).toString());
+            m_actionSet.AddAction(id, currentJumpPoint.description(),
+                                  currentJumpPoint.keylist());
         }
     }
 }
@@ -389,25 +350,15 @@ void KeyBindings::LoadJumppoints(void)
  */
 void KeyBindings::LoadContexts(void)
 {
-    MSqlQuery query(MSqlQuery::InitCon());
-    query.prepare(
-        "SELECT context, action, description, keylist "
-        "FROM keybindings "
-        "WHERE hostname = :HOSTNAME "
-        "ORDER BY context, action");
-    query.bindValue(":HOSTNAME", m_hostname);
-
-    if (!query.exec() || !query.isActive())
-    {
-        MythDB::DBError("KeyBindings::LoadContexts", query);
-        return;
-    }
+    QList<MythKeyBinding> keybindings;
+    GetMythMainWindow()->loadKeyBindings(keybindings, m_hostname);
 
-    while (query.next())
+    foreach (const MythKeyBinding& currentKeyBinding, keybindings)
     {
-        ActionID id(query.value(0).toString(), query.value(1).toString());
-        m_actionSet.AddAction(id, query.value(2).toString(),
-                              query.value(3).toString());
+
+        ActionID id(currentKeyBinding.context(), currentKeyBinding.action());
+        m_actionSet.AddAction(id, currentKeyBinding.description(),
+                              currentKeyBinding.keylist());
     }
 }
 
