diff --git a/modules/gui/src/panels/tabbed_panel_bar.cc b/modules/gui/src/panels/tabbed_panel_bar.cc
index 914c25ae1717e163fd81d41a63d26a5403e6e835..25cd310a60eeff3c7c62533738924d883a2c01e9 100644
--- a/modules/gui/src/panels/tabbed_panel_bar.cc
+++ b/modules/gui/src/panels/tabbed_panel_bar.cc
@@ -17,9 +17,12 @@
 // 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 //------------------------------------------------------------------------------
 
+#include <QApplication>
 #include <QSettings>
 #include <QDir>
 
+#include <ost/gui/gosty_app.hh>
+#include <ost/gui/perspective.hh>
 #include <ost/gui/widget_registry.hh>
 
 #include "tabbed_panel_bar.hh"
@@ -32,7 +35,7 @@ TabbedPanelBar::TabbedPanelBar(PanelBar* parent):
   layout_ = new QHBoxLayout(this);
   layout_->setMargin(0);
   layout_->setSpacing(0);
-  tab_widget_ = new QTabWidget(this);
+  tab_widget_ = new TabbedDragWidget(this);
   #if QT_VERSION>=0x40503
     tab_widget_->setDocumentMode(true);
   #endif
@@ -94,10 +97,73 @@ void TabbedPanelBar::CurrentChanged(int index){
   }
 }
 
-
 TabbedPanelBar::~TabbedPanelBar(){
   toolbar_->clear();
 }
 
+//TabbedDragWidget
+TabbedDragWidget::TabbedDragWidget(QWidget* parent):
+  QTabWidget(parent) {
+  setTabBar(new DragTabBar(this));
+}
+
+//DragTabBar
+DragTabBar::DragTabBar(QTabWidget* parent):
+  QTabBar(parent),tab_widget_(parent) {
+  this->setAcceptDrops(true);
+}
+
+void DragTabBar::mousePressEvent(QMouseEvent *event)
+{
+  if (event->button() == Qt::LeftButton){
+    drag_start_pos_ = event->pos();
+  }
+  QTabBar::mousePressEvent(event);
+}
+
+void DragTabBar::mouseMoveEvent(QMouseEvent *event)
+{
+  if (!(event->buttons() & Qt::LeftButton)) return;
+
+  if ((event->pos() - drag_start_pos_).manhattanLength()
+        < QApplication::startDragDistance()) return;
+
+  Widget* widget = qobject_cast<Widget*>(tab_widget_->currentWidget());
+  if(!widget)return;
+
+  QDrag *drag = new QDrag(this);
+  QMimeData *mime_data = new QMimeData;
+  QVariant self;
+  self.setValue(widget);
+  mime_data->setData("OpenStructure/Widget",QByteArray());
+  mime_data->setProperty("OpenStructure/Widget",self);
+
+  drag->setMimeData(mime_data);
+  drag->exec();
+  PanelManager* panels = GostyApp::Instance()->GetPerspective()->GetPanels();
+  panels->EndDrag();
+}
+
+void DragTabBar::dragEnterEvent(QDragEnterEvent *event)
+{
+  if (event->mimeData()->hasFormat("OpenStructure/Widget")){
+    PanelManager* panels = GostyApp::Instance()->GetPerspective()->GetPanels();
+    panels->StartDrag();
+    event->acceptProposedAction();
+  }
+}
+
+void DragTabBar::dropEvent(QDropEvent *event)
+{
+  const QMimeData* mime_data = event->mimeData();
+  QVariant variant =  mime_data->property("OpenStructure/Widget");
+  Widget* widget = variant.value<Widget*>();
+  Widget* current_widget = qobject_cast<Widget*>(tab_widget_->currentWidget());
+  if(widget && current_widget && widget != current_widget){
+    GostyApp::Instance()->GetPerspective()->GetPanels()->MoveNextTo(current_widget,widget);
+  }
+  event->acceptProposedAction();
+}
+
 }}
 
diff --git a/modules/gui/src/panels/tabbed_panel_bar.hh b/modules/gui/src/panels/tabbed_panel_bar.hh
index dd889bb02d1f068456be408b0dc67161ceb87c4e..7ec4d8959c3019e716b57c220ed2b3035d33c65e 100644
--- a/modules/gui/src/panels/tabbed_panel_bar.hh
+++ b/modules/gui/src/panels/tabbed_panel_bar.hh
@@ -23,6 +23,7 @@
 #include <QWidget>
 #include <QString>
 #include <QAction>
+#include <QTabBar>
 #include <QTabWidget>
 #include <QToolBar>
 
@@ -35,7 +36,32 @@
 
 namespace ost { namespace gui {
 
-/// \brief tabbed bottom Bar
+/// \brief tabbed drag widget
+class DLLEXPORT_OST_GUI DragTabBar : public QTabBar{
+  Q_OBJECT
+public:
+  DragTabBar(QTabWidget* parent);
+
+protected:
+  void mousePressEvent(QMouseEvent *event);
+  void mouseMoveEvent(QMouseEvent *event);
+  void dragEnterEvent(QDragEnterEvent *event);
+  void dropEvent(QDropEvent *event);
+
+private:
+  QTabWidget* tab_widget_;
+  QPoint drag_start_pos_;
+
+};
+
+/// \brief tabbed drag widget
+class DLLEXPORT_OST_GUI TabbedDragWidget : public QTabWidget{
+  Q_OBJECT
+public:
+  TabbedDragWidget(QWidget* parent);
+};
+
+/// \brief tabbed bar
 class DLLEXPORT_OST_GUI TabbedPanelBar : public PanelWidgetContainer {
   Q_OBJECT
 public: