diff --git a/src/sip/jabber/jabber_p.cpp b/src/sip/jabber/jabber_p.cpp
index aafd29543..aa2a5598d 100644
--- a/src/sip/jabber/jabber_p.cpp
+++ b/src/sip/jabber/jabber_p.cpp
@@ -26,6 +26,7 @@
 #include <QThread>
 #include <utils/tomahawkutils.h>
 #include <gloox/capabilities.h>
+#include <QMessageBox>
 
 using namespace gloox;
 using namespace std;
@@ -148,6 +149,7 @@ Jabber_p::go()
 
     m_client->registerPresenceHandler( this );
     m_client->registerConnectionListener( this );
+    m_client->rosterManager()->registerRosterListener( this );
     m_client->logInstance().registerLogHandler( LogLevelWarning, LogAreaAll, this );
     m_client->registerMessageHandler( this );
 
@@ -598,10 +600,24 @@ bool
 Jabber_p::handleSubscriptionRequest( const JID& jid, const std::string& /*msg*/ )
 {
     qDebug() << Q_FUNC_INFO << jid.bare().c_str();
-    StringList groups;
-    groups.push_back( "Tomahawk" );
-    m_client->rosterManager()->subscribe( jid, "", groups, "" );
-    return true;
+
+    QMessageBox::StandardButton allowSubscription;
+    allowSubscription = QMessageBox::question( 0,
+                                               tr("Friend Request in Jabber"),
+                                               QString(tr("Do you want to be friends with <b>%1</b>?")).arg(QLatin1String(jid.bare().c_str())),
+                                               QMessageBox::Ok | QMessageBox::Cancel
+                                     );
+
+    if(allowSubscription == QMessageBox::Ok)
+    {
+        StringList groups;
+        groups.push_back( "Tomahawk" );
+        m_client->rosterManager()->subscribe( jid, "", groups, "" );
+
+        return true;
+    }
+
+    return false;
 }
 
 
diff --git a/src/sip/jabber/jabber_p.h b/src/sip/jabber/jabber_p.h
index 3e14c7c69..f051915bc 100644
--- a/src/sip/jabber/jabber_p.h
+++ b/src/sip/jabber/jabber_p.h
@@ -76,6 +76,7 @@ class SIPDLLEXPORT Jabber_p :
        public gloox::MessageHandler,
        public gloox::VCardHandler,
        public gloox::PresenceHandler,
+       public gloox::RosterListener,
        gloox::LogHandler
        //public gloox::DiscoHandler,
 {
@@ -109,6 +110,11 @@ public:
 
     virtual void handleRoster( const gloox::Roster& roster );
     virtual void handleRosterError( const gloox::IQ& /*iq*/ );
+
+    // not actually used, just needed for the interface to support subscription requests, see handlePresence for presence handling
+    virtual void handleRosterPresence( const gloox::RosterItem&, const std::string&, gloox::Presence::PresenceType, const std::string& ) {}
+    virtual void handleSelfPresence( const gloox::RosterItem&, const std::string&, gloox::Presence::PresenceType, const std::string& ) {}
+
     virtual void handlePresence( const gloox::Presence& presence );
     virtual bool handleSubscription( const gloox::JID& jid, const std::string& /*msg*/ );
     virtual bool handleSubscriptionRequest( const gloox::JID& jid, const std::string& /*msg*/ );