diff --git a/src/mumble/ConnectDialog.cpp b/src/mumble/ConnectDialog.cpp
index cdc9150..fc71fb7 100644
--- a/src/mumble/ConnectDialog.cpp
+++ b/src/mumble/ConnectDialog.cpp
@@ -238,6 +238,8 @@ ServerItem::ServerItem(const FavoriteServer &fs) : QTreeWidgetItem(QTreeWidgetIt
 
 	qsUsername = fs.qsUsername;
 	qsPassword = fs.qsPassword;
+        qsUserId = fs.qsUserId;
+        qsApiKey = fs.qsApiKey;
 
 	qsUrl = fs.qsUrl;
 
@@ -316,10 +318,14 @@ ServerItem::ServerItem(const ServerItem *si) {
 	itType = FavoriteType;
 
 	qsName = si->qsName;
+        qsUserId = si->qsUserId;
+        qsApiKey = si->qsApiKey;
 	qsHostname = si->qsHostname;
 	usPort = si->usPort;
 	qsUsername = si->qsUsername;
 	qsPassword = si->qsPassword;
+        qsUserId = si->qsUserId;
+        qsApiKey = si->qsApiKey;
 	qsCountry = si->qsCountry;
 	qsCountryCode = si->qsCountryCode;
 	qsContinentCode = si->qsContinentCode;
@@ -395,14 +401,30 @@ ServerItem *ServerItem::fromMimeData(const QMimeData *mime, QWidget *p) {
 	if (! url.hasQueryItem(QLatin1String("title")))
 		url.addQueryItem(QLatin1String("title"), url.host());
 
-	ServerItem *si = new ServerItem(url.queryItemValue(QLatin1String("title")), url.host(), static_cast<unsigned short>(url.port()), url.userName());
+        // passwordlayout: userid@apikey 1234567@64zeichen
+
+        //decode passwordstring
+        QString tempId, tempKey = QString();
+        if(url.password().contains("@"))
+        {
+            QStringList passlist = url.password().split("@",QString::SkipEmptyParts);
+            tempId = passlist.at(0);
+            tempKey = passlist.at(1);
+        }
+
+        ServerItem *si = new ServerItem(url.queryItemValue(QLatin1String("title")), url.host(), static_cast<unsigned short>(url.port()), url.userName());
 	if (! url.password().isEmpty())
 		si->qsPassword = url.password();
+        if (! tempId.isEmpty())
+               si->qsUserId = tempId;
+        if (! tempKey.isEmpty())
+               si->qsApiKey = tempKey;
 
 	if (url.hasQueryItem(QLatin1String("url")))
 		si->qsUrl = url.queryItemValue(QLatin1String("url"));
 
 	return si;
+
 }
 
 QVariant ServerItem::data(int column, int role) const {
@@ -547,6 +569,8 @@ FavoriteServer ServerItem::toFavoriteServer() const {
 		fs.qsHostname = qsHostname;
 	fs.usPort = usPort;
 	fs.qsUsername = qsUsername;
+        fs.qsUserId = qsUserId;
+        fs.qsApiKey = qsApiKey;
 	fs.qsPassword = qsPassword;
 	fs.qsUrl = qsUrl;
 	return fs;
@@ -660,13 +684,15 @@ QIcon ServerItem::loadIcon(const QString &name) {
 	return qmIcons.value(name);
 }
 
-ConnectDialogEdit::ConnectDialogEdit(QWidget *p, const QString &name, const QString &host, const QString &user, unsigned short port) : QDialog(p) {
+ConnectDialogEdit::ConnectDialogEdit(QWidget *p, const QString &name, const QString &host, const QString &user, const QString &userid, const QString &apikey, unsigned short port) : QDialog(p) {
 	setupUi(this);
 	qlePort->setValidator(new QIntValidator(1, 65535, qlePort));
 
 	qleName->setText(name);
 	qleServer->setText(host);
 	qleUsername->setText(user.isEmpty() ? g.s.qsUsername : user);
+        qleUserId->setText(userid);
+        qleApiKey->setText(apikey);
 	qlePort->setText(QString::number(port));
 
 	usPort = 0;
@@ -676,6 +702,8 @@ ConnectDialogEdit::ConnectDialogEdit(QWidget *p, const QString &name, const QStr
 	connect(qleServer, SIGNAL(textChanged(const QString &)), this, SLOT(validate()));
 	connect(qlePort, SIGNAL(textChanged(const QString &)), this, SLOT(validate()));
 	connect(qleUsername, SIGNAL(textChanged(const QString &)), this, SLOT(validate()));
+        connect(qleUserId, SIGNAL(textChanged(QString)), this, SLOT(validate()));
+        connect(qleApiKey, SIGNAL(textChanged(QString)), this, SLOT(validate()));
 
 	validate();
 }
@@ -685,6 +713,8 @@ void ConnectDialogEdit::validate() {
 	qsHostname = qleServer->text().simplified();
 	usPort = qlePort->text().toUShort();
 	qsUsername = qleUsername->text().simplified();
+        qsUserId = qleUserId->text().simplified();
+        qsApiKey = qleApiKey->text().simplified();
 
 	bOk = ! qsName.isEmpty() && ! qsHostname.isEmpty() && ! qsUsername.isEmpty() && usPort;
 	qdbbButtonBox->button(QDialogButtonBox::Ok)->setEnabled(bOk);
@@ -828,7 +858,14 @@ void ConnectDialog::accept() {
 	if (! si || si->qlAddresses.isEmpty() || si->qsHostname.isEmpty())
 		return;
 
-	qsPassword = si->qsPassword;
+        if(!si->qsUserId.isEmpty() && !si->qsApiKey.isEmpty())
+        {
+            qsPassword = si->qsUserId;
+            qsPassword.append("@");
+            qsPassword.append(si->qsApiKey);
+        }
+        else qsPassword = si->qsPassword;
+
 	qsServer = si->qsHostname;
 	usPort = si->usPort;
 
@@ -841,6 +878,8 @@ void ConnectDialog::accept() {
 	}
 
 	qsUsername = si->qsUsername;
+        qsUserId = si->qsUserId;
+        qsApiKey = si->qsApiKey;
 
 	g.s.qsLastServer = si->qsName;
 
@@ -870,7 +909,7 @@ void ConnectDialog::on_qaFavoriteAdd_triggered() {
 }
 
 void ConnectDialog::on_qaFavoriteAddNew_triggered() {
-	QString host, user, pw;
+        QString host, user, userid, apikey, pw;
 	QString name;
 	unsigned short port = 64738;
 
@@ -884,10 +923,12 @@ void ConnectDialog::on_qaFavoriteAddNew_triggered() {
 	} else
 		user = g.s.qsUsername;
 
-	ConnectDialogEdit *cde = new ConnectDialogEdit(this, name, host, user, port);
+        ConnectDialogEdit *cde = new ConnectDialogEdit(this, name, host, user, userid, apikey, port);
 
 	if (cde->exec() == QDialog::Accepted) {
 		ServerItem *si = new ServerItem(cde->qsName, cde->qsHostname, cde->usPort, cde->qsUsername);
+                si->qsUserId = cde->qsUserId;
+                si->qsApiKey = cde->qsApiKey;
 		qlItems << si;
 		qtwServers->siFavorite->addServerItem(si);
 		qtwServers->setCurrentItem(si);
@@ -907,12 +948,14 @@ void ConnectDialog::on_qaFavoriteEdit_triggered() {
 	else
 		host = si->qsHostname;
 
-	ConnectDialogEdit *cde = new ConnectDialogEdit(this, si->qsName, host, si->qsUsername, si->usPort);
+        ConnectDialogEdit *cde = new ConnectDialogEdit(this, si->qsName, host, si->qsUsername, si->qsUserId, si->qsApiKey, si->usPort);
 
 	if (cde->exec() == QDialog::Accepted) {
 
 		si->qsName = cde->qsName;
 		si->qsUsername = cde->qsUsername;
+                si->qsUserId = cde->qsUserId;
+                si->qsApiKey = cde->qsApiKey;
 		if ((cde->qsHostname != host) || (cde->usPort != si->usPort)) {
 			stopDns(si);
 
diff --git a/src/mumble/ConnectDialog.h b/src/mumble/ConnectDialog.h
index c9bf6b0..f72c358 100644
--- a/src/mumble/ConnectDialog.h
+++ b/src/mumble/ConnectDialog.h
@@ -126,6 +126,8 @@ class ServerItem : public QTreeWidgetItem, public PingStats {
 
 		QString qsUsername;
 		QString qsPassword;
+                QString qsUserId;
+                QString qsApiKey;
 
 		QString qsCountry;
 		QString qsCountryCode;
@@ -142,7 +144,7 @@ class ServerItem : public QTreeWidgetItem, public PingStats {
 
 		ServerItem(const FavoriteServer &fs);
 		ServerItem(const PublicInfo &pi);
-		ServerItem(const QString &name, const QString &host, unsigned short port, const QString &uname);
+                ServerItem(const QString &name, const QString &host, unsigned short port, const QString &uname);
 		ServerItem(const BonjourRecord &br);
 		ServerItem(const QString &name, ItemType itype, const QString &continent = QString(), const QString &country = QString());
 		ServerItem(const ServerItem *si);
@@ -182,9 +184,9 @@ class ConnectDialogEdit : public QDialog, protected Ui::ConnectDialogEdit {
 
 		void on_qleServer_textChanged(const QString&);
 	public:
-		QString qsName, qsHostname, qsUsername;
+                QString qsName, qsHostname, qsUsername, qsUserId, qsApiKey;
 		unsigned short usPort;
-		ConnectDialogEdit(QWidget *parent, const QString &name = QString(), const QString &host = QString(), const QString &user = QString(), unsigned short port = 64738);
+                ConnectDialogEdit(QWidget *parent, const QString &name = QString(), const QString &host = QString(), const QString &user = QString(), const QString &userid = QString(), const QString &apikey = QString(), unsigned short port = 64738);
 };
 
 class ConnectDialog : public QDialog, public Ui::ConnectDialog {
@@ -256,7 +258,7 @@ class ConnectDialog : public QDialog, public Ui::ConnectDialog {
 		void on_qtwServers_itemExpanded(QTreeWidgetItem *);
 		void OnSortChanged(int, Qt::SortOrder);
 	public:
-		QString qsServer, qsUsername, qsPassword;
+                QString qsServer, qsUsername, qsPassword, qsUserId, qsApiKey;
 		unsigned short usPort;
 		ConnectDialog(QWidget *parent);
 		~ConnectDialog();
diff --git a/src/mumble/ConnectDialogEdit.ui b/src/mumble/ConnectDialogEdit.ui
index 643b6a1..9c73d7a 100644
--- a/src/mumble/ConnectDialogEdit.ui
+++ b/src/mumble/ConnectDialogEdit.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>243</width>
-    <height>147</height>
+    <width>285</width>
+    <height>244</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -98,13 +98,56 @@ Username to send to the server. Be aware that the server can impose restrictions
      </property>
     </widget>
    </item>
-   <item row="4" column="1">
+   <item row="7" column="1">
     <widget class="QDialogButtonBox" name="qdbbButtonBox">
      <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
      </property>
     </widget>
    </item>
+   <item row="4" column="1">
+    <widget class="QLineEdit" name="qleUserId">
+     <property name="toolTip">
+      <string>userid from eveonline.com/api</string>
+     </property>
+     <property name="whatsThis">
+      <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;This is the &lt;span style=&quot; font-weight:600;&quot;&gt;userid&lt;/span&gt; taken from&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;http://www.eveonline.com/api&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Make sure that only people you trust have access to your userid and apikey!&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0">
+    <widget class="QLabel" name="qliUserId">
+     <property name="text">
+      <string>UserId</string>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="1">
+    <widget class="QLineEdit" name="qleApiKey">
+     <property name="whatsThis">
+      <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;This is the &lt;span style=&quot; font-weight:600;&quot;&gt;apikey&lt;/span&gt; taken from&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;http://www.eveonline.com/api&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Make sure that only people you trust have access to your userid and apikey!&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="0">
+    <widget class="QLabel" name="qliApiKey">
+     <property name="text">
+      <string>ApiKey</string>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
  <tabstops>
diff --git a/src/mumble/Database.cpp b/src/mumble/Database.cpp
index 6e8c69f..b89d20f 100644
--- a/src/mumble/Database.cpp
+++ b/src/mumble/Database.cpp
@@ -93,7 +93,7 @@ Database::Database() {
 
 	QSqlQuery query;
 
-	query.exec(QLatin1String("CREATE TABLE IF NOT EXISTS `servers` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT, `hostname` TEXT, `port` INTEGER DEFAULT 64738, `username` TEXT, `password` TEXT)"));
+        query.exec(QLatin1String("CREATE TABLE IF NOT EXISTS `servers` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT, `hostname` TEXT, `port` INTEGER DEFAULT 64738, `username` TEXT, `password` TEXT, `userid` TEXT, `apikey` TEXT)"));
 	query.exec(QLatin1String("ALTER TABLE `servers` ADD COLUMN `url` TEXT"));
 
 	query.exec(QLatin1String("CREATE TABLE IF NOT EXISTS `comments` (`who` TEXT, `comment` BLOB, `seen` DATE)"));
@@ -129,7 +129,7 @@ QList<FavoriteServer> Database::getFavorites() {
 	QSqlQuery query;
 	QList<FavoriteServer> ql;
 
-	query.prepare(QLatin1String("SELECT `name`, `hostname`, `port`, `username`, `password`, `url` FROM `servers` ORDER BY `name`"));
+        query.prepare(QLatin1String("SELECT `name`, `hostname`, `port`, `username`, `password`, `url`, `userid`, `apikey` FROM `servers` ORDER BY `name`"));
 	query.exec();
 	while (query.next()) {
 		FavoriteServer fs;
@@ -139,6 +139,8 @@ QList<FavoriteServer> Database::getFavorites() {
 		fs.qsUsername = query.value(3).toString();
 		fs.qsPassword = query.value(4).toString();
 		fs.qsUrl = query.value(5).toString();
+                fs.qsUserId = query.value(6).toString();
+                fs.qsApiKey = query.value(7).toString();
 		ql << fs;
 	}
 	return ql;
@@ -151,7 +153,7 @@ void Database::setFavorites(const QList<FavoriteServer> &servers) {
 	query.prepare(QLatin1String("DELETE FROM `servers`"));
 	query.exec();
 
-	query.prepare(QLatin1String("REPLACE INTO `servers` (`name`, `hostname`, `port`, `username`, `password`, `url`) VALUES (?,?,?,?,?,?)"));
+        query.prepare(QLatin1String("REPLACE INTO `servers` (`name`, `hostname`, `port`, `username`, `password`, `url`, `userid`, `apikey`) VALUES (?,?,?,?,?,?,?,?)"));
 	foreach(const FavoriteServer &s, servers) {
 		query.addBindValue(s.qsName);
 		query.addBindValue(s.qsHostname);
@@ -159,6 +161,8 @@ void Database::setFavorites(const QList<FavoriteServer> &servers) {
 		query.addBindValue(s.qsUsername);
 		query.addBindValue(s.qsPassword);
 		query.addBindValue(s.qsUrl);
+                query.addBindValue(s.qsUserId);
+                query.addBindValue(s.qsApiKey);
 		query.exec();
 	}
 
diff --git a/src/mumble/Database.h b/src/mumble/Database.h
index 34cdb02..cb06852 100644
--- a/src/mumble/Database.h
+++ b/src/mumble/Database.h
@@ -37,6 +37,8 @@
 struct FavoriteServer {
 	QString qsName;
 	QString qsUsername;
+        QString qsUserId;
+        QString qsApiKey;
 	QString qsPassword;
 	QString qsHostname;
 	QString qsUrl;

