diff --git a/contactpicker.cpp b/contactpicker.cpp
index eda0f3fea26f04d6e5403e6d1b8c664592b0b54e..ff8b295abc91e9f07b24db1697d17f8c6f7fd530 100644
--- a/contactpicker.cpp
+++ b/contactpicker.cpp
@@ -19,7 +19,7 @@
 #include "contactpicker.h"
 #include "ui_contactpicker.h"
 
-
+#include <QMouseEvent>
 
 #include "categorizedcontactmodel.h"
 #include "personmodel.h"
@@ -107,3 +107,21 @@ ContactPicker::on_searchBar_textChanged(const QString &arg1)
 {
     contactProxyModel_->setFilterRegExp(QRegExp(arg1, Qt::CaseInsensitive, QRegExp::FixedString));
 }
+
+void
+ContactPicker::mousePressEvent(QMouseEvent *event)
+{
+    mpos_ = event->pos();
+    if (not rect().contains(mpos_))
+        QDialog::reject();
+}
+
+void ContactPicker::mouseMoveEvent(QMouseEvent *event)
+{
+    if (event->buttons() & Qt::LeftButton) {
+        QPoint diff = event->pos() - mpos_;
+        QPoint newpos = this->pos() + diff;
+
+        this->move(newpos);
+    }
+}
diff --git a/contactpicker.h b/contactpicker.h
index 2903e122f18b0604c6ebc3590de941df95942740..0931ba6253b4fdfb5a9a70d5c3599ea5a8098c48 100644
--- a/contactpicker.h
+++ b/contactpicker.h
@@ -50,6 +50,9 @@ public:
     explicit ContactPicker(ContactMethod* number, QWidget *parent = 0);
     ~ContactPicker();
 
+protected:
+    void mousePressEvent(QMouseEvent *event);
+    void mouseMoveEvent(QMouseEvent *event);
 protected slots:
      void accept();
 
@@ -66,4 +69,5 @@ private:
     Person *personSelected_;
     ContactMethod* number_;
     OnlyPersonProxyModel* contactProxyModel_;
+    QPoint mpos_;
 };