diff --git a/src/platformsupport/dnd/qsimpledrag.cpp b/src/platformsupport/dnd/qsimpledrag.cpp
index 587e70b0f3b9d997940d88cc5d7e860afe2ac2f9..f2ff177055777aefd41cee2984532d709f0744b9 100644
--- a/src/platformsupport/dnd/qsimpledrag.cpp
+++ b/src/platformsupport/dnd/qsimpledrag.cpp
@@ -140,7 +140,6 @@ bool QBasicDrag::eventFilter(QObject *o, QEvent *e)
             QKeyEvent *ke = static_cast<QKeyEvent *>(e);
             if (ke->key() == Qt::Key_Escape && e->type() == QEvent::KeyPress) {
                 cancel();
-                resetDndState(true);
                 disableEventFilter();
                 exitDndEventLoop();
 
@@ -154,13 +153,10 @@ bool QBasicDrag::eventFilter(QObject *o, QEvent *e)
 
         case QEvent::MouseButtonRelease:
             disableEventFilter();
-
             if (canDrop()) {
                 drop(static_cast<QMouseEvent *>(e));
-                resetDndState(false);
             } else {
                 cancel();
-                resetDndState(true);
             }
             exitDndEventLoop();
             return true; // Eat all mouse events
@@ -195,7 +191,7 @@ Qt::DropAction QBasicDrag::drag(QDrag *o)
     return m_executed_drop_action;
 }
 
-void QBasicDrag::resetDndState(bool /* deleteSource */)
+void QBasicDrag::restoreCursor()
 {
     if (m_restoreCursor) {
 #ifndef QT_NO_CURSOR
@@ -227,6 +223,7 @@ void QBasicDrag::endDrag()
 void QBasicDrag::cancel()
 {
     disableEventFilter();
+    restoreCursor();
     m_drag_icon_window->setVisible(false);
 }
 
@@ -239,6 +236,7 @@ void QBasicDrag::move(const QMouseEvent *)
 void QBasicDrag::drop(const QMouseEvent *)
 {
     disableEventFilter();
+    restoreCursor();
     m_drag_icon_window->setVisible(false);
 }
 
diff --git a/src/platformsupport/dnd/qsimpledrag_p.h b/src/platformsupport/dnd/qsimpledrag_p.h
index b2d4191b89284d06bbecb18ff1e7c021f2a6d937..10237b36d799e459d83c08b83677592238af7589 100644
--- a/src/platformsupport/dnd/qsimpledrag_p.h
+++ b/src/platformsupport/dnd/qsimpledrag_p.h
@@ -88,7 +88,7 @@ protected:
 private:
     void enableEventFilter();
     void disableEventFilter();
-    void resetDndState(bool deleteSource);
+    void restoreCursor();
     void exitDndEventLoop();
 
     bool m_restoreCursor;
diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp
index 91acb5de026e38bbf558086fa0fe0d0451c3d6b2..8ce4ef5f047fd930b649abeb0a1d877c27873a7a 100644
--- a/src/plugins/platforms/xcb/qxcbdrag.cpp
+++ b/src/plugins/platforms/xcb/qxcbdrag.cpp
@@ -523,7 +523,6 @@ void QXcbDrag::drop(const QMouseEvent *event)
     current_proxy_target = 0;
     source_time = 0;
 //    current_embedding_widget = 0;
-    // #fixme resetDndState(false);
 }
 
 Qt::DropAction QXcbDrag::toDropAction(xcb_atom_t a) const