diff -u a/plasma/generic/runners/nepomuksearch/nepomuksearchrunner.cpp git-kde-workspace/plasma/generic/runners/nepomuksearch//nepomuksearchrunner.cpp
--- a/plasma/generic/runners/nepomuksearch/nepomuksearchrunner.cpp	2011-07-26 11:57:58.000000000 +0200
+++ git-kde-workspace/plasma/generic/runners/nepomuksearch//nepomuksearchrunner.cpp	2011-09-08 10:09:28.571582002 +0200
@@ -20,6 +20,7 @@
 #include "queryclientwrapper.h"
 
 #include <QMenu>
+#include <QMimeData>
 
 #include <KIcon>
 #include <KRun>
@@ -147,6 +148,40 @@
     }
 }
 
+QList<QAction*> Nepomuk::SearchRunner::actionsFromMenu(QMenu *menu, const QString &prefix, QObject *parent)
+{
+    Q_ASSERT(menu);
+
+    QList<QAction*> ret;
+    foreach (QAction *action, menu->actions()) {
+        if (QMenu *submenu = action->menu()) {
+            //Flatten hierarchy and prefix submenu text to all actions in submenu
+            ret << actionsFromMenu(submenu, action->text(), parent);
+        } else if (!action->isSeparator() && action->isEnabled()) {
+            QString text = action->text();
+            if (action->isCheckable()) {
+                if (action->isChecked()) {
+                    text = QString("(%1) %2").arg(QChar(0x2613)).arg(text);
+                } else {
+                    text = QString("( ) %1").arg(text);
+                }
+            }
+
+            if (!prefix.isEmpty()) {
+                text = QString("%1: %2").arg(prefix).arg(text);
+            }
+            text = text.replace(QRegExp("&([\\S])"), "\\1");
+
+            QAction *a = new QAction(action->icon(), text, parent);
+
+            QObject::connect(a, SIGNAL(triggered(bool)), action, SIGNAL(triggered(bool)));
+            ret << a;
+        }
+    }
+    return ret;
+}
+
+
 QList<QAction*> Nepomuk::SearchRunner::actionsForMatch(const Plasma::QueryMatch &match)
 {
     //Unlike other runners, the actions generated here are likely to see
@@ -181,13 +216,31 @@
     //Add user defined actions
     m_actions->addServiceActionsTo(&dummy);
 
-    m_konqActions = Plasma::actionsFromMenu(&dummy);
+    m_konqActions = actionsFromMenu(&dummy);
 
     ret << m_konqActions;
 
     return ret;
 }
 
+QMimeData * Nepomuk::SearchRunner::mimeDataForMatch(const Plasma::QueryMatch *match)
+{
+    Nepomuk::Resource res = match->data().value<Nepomuk::Resource>();
+
+    QUrl url = KUrl(res.property(QUrl("http://www.semanticdesktop.org/ontologies/2007/01/19/nie#url")).toString());
+
+    if (!url.isValid()) {
+        return 0;
+    }
+
+    QMimeData *result = new QMimeData();
+    QList<QUrl> urls;
+    urls << url;
+    kDebug() << urls;
+    result->setUrls(urls);
+    return result;
+}
+
 K_EXPORT_PLASMA_RUNNER(nepomuksearchrunner, Nepomuk::SearchRunner)
 
 #include "nepomuksearchrunner.moc"
diff -u a/plasma/generic/runners/nepomuksearch/nepomuksearchrunner.h git-kde-workspace/plasma/generic/runners/nepomuksearch//nepomuksearchrunner.h
--- a/plasma/generic/runners/nepomuksearch/nepomuksearchrunner.h	2011-07-26 11:57:58.000000000 +0200
+++ git-kde-workspace/plasma/generic/runners/nepomuksearch//nepomuksearchrunner.h	2011-09-08 10:09:28.571582002 +0200
@@ -49,8 +49,21 @@
 
     protected Q_SLOTS:
         void init();
+        QMimeData *mimeDataForMatch(const Plasma::QueryMatch *match);
 
     private:
+        /**
+         * Returns a list of all actions in the given QMenu
+         * This method flattens the hierarchy of the menu by prefixing the
+         * text of all actions in a submenu with the submenu title.
+         *
+         * @param menu the QMenu storing the actions
+         * @param prefix text to display before the text of all actions in the menu
+         * @param parent QObject to be passed as parent of all the actions in the list
+         *
+         * @since 4.4
+         */
+        QList<QAction*> actionsFromMenu(QMenu *menu, const QString &prefix = QString(), QObject *parent = 0);
 
         QMutex m_mutex;
         QWaitCondition m_waiter;
