diff --git a/modules/gui/src/scene_win/gfx_scene_node.cc b/modules/gui/src/scene_win/gfx_scene_node.cc
index 9b8828779f3a85f3e20c726276fe608e64bffdf1..f8632e9018d3933e0df87ac2d5e61adcd02d3575 100644
--- a/modules/gui/src/scene_win/gfx_scene_node.cc
+++ b/modules/gui/src/scene_win/gfx_scene_node.cc
@@ -71,10 +71,10 @@ bool GfxSceneNode::SetData(int column, const QVariant& value, int role){
 
 Qt::ItemFlags GfxSceneNode::Flags(int column) const{
   if(column==0){
-    return Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled;
+    return Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsDragEnabled;
   }
   else if(column==1){
-    return Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable;
+    return Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable|Qt::ItemIsDragEnabled;
   }
   return Qt::NoItemFlags;
 }
diff --git a/modules/gui/src/scene_win/scene_win.cc b/modules/gui/src/scene_win/scene_win.cc
index 0d492d3bc0d94536c6b3f8e110d0e018002a0ba9..0b2e75bd3bea9df0f7ddbfda13550b5601c685bf 100644
--- a/modules/gui/src/scene_win/scene_win.cc
+++ b/modules/gui/src/scene_win/scene_win.cc
@@ -59,6 +59,7 @@ SceneWin::SceneWin(QWidget* parent) :
   view_->setSelectionBehavior(QAbstractItemView::SelectRows);
   view_->setSelectionMode(QAbstractItemView::ExtendedSelection);
   view_->setEditTriggers(QAbstractItemView::EditKeyPressed);
+  view_->setDragEnabled(true);
   view_->expandAll();
 
   layout->addWidget(view_);
diff --git a/modules/gui/src/scene_win/scene_win_model.cc b/modules/gui/src/scene_win/scene_win_model.cc
index 12df1534d79e3ac9ed4d2dc609773a1cb88ad8e8..9e7542b0815c2a73267820ad1fa1b1991cf8cce9 100644
--- a/modules/gui/src/scene_win/scene_win_model.cc
+++ b/modules/gui/src/scene_win/scene_win_model.cc
@@ -198,6 +198,36 @@ bool SceneWinModel::setData(const QModelIndex& index,
   return false;
 }
 
+QStringList SceneWinModel::mimeTypes() const
+{
+    QStringList types;
+    types << "text/plain";
+    return types;
+}
+
+Qt::DropActions SceneWinModel::supportedDragActions() const
+{
+    return Qt::MoveAction;
+}
+
+QMimeData* SceneWinModel::mimeData(const QModelIndexList &indexes) const
+{
+  QMimeData *mimeData = new QMimeData();
+  QByteArray encoded_data;
+
+  QDataStream stream(&encoded_data, QIODevice::WriteOnly);
+
+
+  foreach (QModelIndex index, indexes) {
+    if (index.isValid() && index.column()==1) {
+      QString text = "scene['"+data(index, Qt::DisplayRole).toString()+"']";
+      encoded_data.append(text);
+    }
+  }
+  mimeData->setData("text/plain", encoded_data);
+  return mimeData;
+}
+
 void SceneWinModel::NodeAdded(const gfx::GfxNodeP& node)
 {
   gfx::EntityP e=boost::dynamic_pointer_cast<gfx::Entity>(node);
diff --git a/modules/gui/src/scene_win/scene_win_model.hh b/modules/gui/src/scene_win/scene_win_model.hh
index 996f7b640de20d1e9fea7303a7f162649757524c..c65af6677974af714ad602a61b1d8b9498391a20 100644
--- a/modules/gui/src/scene_win/scene_win_model.hh
+++ b/modules/gui/src/scene_win/scene_win_model.hh
@@ -23,6 +23,8 @@
   Author: Stefan Scheuber, Marco Biasini, Ansgar Philippsen
  */
 
+#include <QStringList>
+#include <QMimeData>
 #include <QMap>
 #include <QAbstractItemModel>
 
@@ -88,6 +90,10 @@ public:
                        const QVariant& value=QVariant(), 
                        int role=Qt::DisplayRole);
 
+  virtual QStringList mimeTypes() const;
+  Qt::DropActions supportedDragActions() const;
+  virtual QMimeData* mimeData(const QModelIndexList& indexes) const;
+
   // scene observer interface
   virtual void NodeAdded(const gfx::GfxNodeP& node);
   virtual void NodeRemoved(const gfx::GfxNodeP& node);