diff --git a/qt/i2pd_qt/i2pd.qrc b/qt/i2pd_qt/i2pd.qrc
new file mode 100644
index 00000000..2abdeb05
--- /dev/null
+++ b/qt/i2pd_qt/i2pd.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+   <file>images/icon.png</file>
+</qresource>
+</RCC>
diff --git a/qt/i2pd_qt/i2pd_qt.pro b/qt/i2pd_qt/i2pd_qt.pro
index b3829fcc..f9fb78e8 100644
--- a/qt/i2pd_qt/i2pd_qt.pro
+++ b/qt/i2pd_qt/i2pd_qt.pro
@@ -202,3 +202,15 @@ message("Using Linux settings")
 LIBS += -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread -lminiupnpc
 }
 
+
+!android:!symbian:!maemo5:!simulator {
+message("Build with a system tray icon")
+# see also http://doc.qt.io/qt-4.8/qt-desktop-systray-systray-pro.html for example on wince*
+#sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS i2pd_qt.pro resources images
+RESOURCES     = i2pd.qrc
+QT           += xml
+#INSTALLS     += sources
+}
+
+RESOURCES += \
+    i2pd.qrc
diff --git a/qt/i2pd_qt/images/icon.png b/qt/i2pd_qt/images/icon.png
new file mode 100644
index 00000000..a5dc7b68
Binary files /dev/null and b/qt/i2pd_qt/images/icon.png differ
diff --git a/qt/i2pd_qt/mainwindow.cpp b/qt/i2pd_qt/mainwindow.cpp
index ab872ff4..3f220a8c 100644
--- a/qt/i2pd_qt/mainwindow.cpp
+++ b/qt/i2pd_qt/mainwindow.cpp
@@ -3,10 +3,14 @@
 #include <QMessageBox>
 #include <QTimer>
 #include "../../RouterContext.h"
+#ifndef ANDROID
+#include <QtDebug>
+#endif
 
 MainWindow::MainWindow(QWidget *parent) :
     QMainWindow(parent)/*,
-    ui(new Ui::MainWindow)*/
+    ui(new Ui::MainWindow)*/,
+    quitting(false)
 {
     //ui->setupUi(this);
     if (objectName().isEmpty())
@@ -41,18 +45,91 @@ MainWindow::MainWindow(QWidget *parent) :
 
     setCentralWidget(centralWidget);
 
-    setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0));
+    setWindowTitle(QApplication::translate("MainWindow", "i2pd", 0));
     quitButton->setText(QApplication::translate("MainWindow", "Quit", 0));
     gracefulQuitButton->setText(QApplication::translate("MainWindow", "Graceful Quit", 0));
 
+#ifndef ANDROID
+    createActions();
+    createTrayIcon();
+#endif
+
     QObject::connect(quitButton, SIGNAL(released()), this, SLOT(handleQuitButton()));
     QObject::connect(gracefulQuitButton, SIGNAL(released()), this, SLOT(handleGracefulQuitButton()));
 
+#ifndef ANDROID
+    QObject::connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
+                this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
+
+    setIcon();
+    trayIcon->show();
+#endif
+
     //QMetaObject::connectSlotsByName(this);
 }
 
+#ifndef ANDROID
+void MainWindow::createActions() {
+    toggleWindowVisibleAction = new QAction(tr("&Toggle the window"), this);
+    connect(toggleWindowVisibleAction, SIGNAL(triggered()), this, SLOT(toggleVisibilitySlot()));
+
+    //quitAction = new QAction(tr("&Quit"), this);
+    //connect(quitAction, SIGNAL(triggered()), QApplication::instance(), SLOT(quit()));
+}
+
+void MainWindow::toggleVisibilitySlot() {
+    setVisible(!isVisible());
+}
+
+void MainWindow::createTrayIcon() {
+    trayIconMenu = new QMenu(this);
+    trayIconMenu->addAction(toggleWindowVisibleAction);
+    //trayIconMenu->addSeparator();
+    //trayIconMenu->addAction(quitAction);
+
+    trayIcon = new QSystemTrayIcon(this);
+    trayIcon->setContextMenu(trayIconMenu);
+}
+
+void MainWindow::setIcon() {
+    QIcon icon(":/images/icon.png");
+    trayIcon->setIcon(icon);
+    setWindowIcon(icon);
+
+    trayIcon->setToolTip(QApplication::translate("MainWindow", "i2pd", 0));
+}
+
+void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason) {
+    switch (reason) {
+    case QSystemTrayIcon::Trigger:
+    case QSystemTrayIcon::DoubleClick:
+    case QSystemTrayIcon::MiddleClick:
+        setVisible(!isVisible());
+        break;
+    default:
+        qDebug() << "MainWindow::iconActivated(): unknown reason: " << reason << endl;
+        break;
+    }
+}
+
+void MainWindow::closeEvent(QCloseEvent *event) {
+    if(quitting){ QMainWindow::closeEvent(event); return; }
+    if (trayIcon->isVisible()) {
+        QMessageBox::information(this, tr("i2pd"),
+                                 tr("The program will keep running in the "
+                                    "system tray. To gracefully terminate the program, "
+                                    "choose <b>Graceful Quit</b> at the main i2pd window."));
+        hide();
+        event->ignore();
+    }
+}
+#endif
+
 void MainWindow::handleQuitButton() {
     qDebug("Quit pressed. Hiding the main window");
+#ifndef ANDROID
+    quitting=true;
+#endif
     close();
     QApplication::instance()->quit();
 }
@@ -69,6 +146,9 @@ void MainWindow::handleGracefulQuitButton() {
 
 void MainWindow::handleGracefulQuitTimerEvent() {
     qDebug("Hiding the main window");
+#ifndef ANDROID
+    quitting=true;
+#endif
     close();
     qDebug("Performing quit");
     QApplication::instance()->quit();
diff --git a/qt/i2pd_qt/mainwindow.h b/qt/i2pd_qt/mainwindow.h
index 94e3a7b3..349eadec 100644
--- a/qt/i2pd_qt/mainwindow.h
+++ b/qt/i2pd_qt/mainwindow.h
@@ -12,6 +12,11 @@
 #include <QtWidgets/QPushButton>
 #include <QtWidgets/QVBoxLayout>
 #include <QtWidgets/QWidget>
+#ifndef ANDROID
+#include <QSystemTrayIcon>
+#include <QCloseEvent>
+#include <QMenu>
+#endif
 
 namespace Ui {
 class MainWindow;
@@ -25,17 +30,43 @@ public:
     explicit MainWindow(QWidget *parent = 0);
     ~MainWindow();
 
+//#ifndef ANDROID
+//    void setVisible(bool visible);
+//#endif
+
 private slots:
     void handleQuitButton();
     void handleGracefulQuitButton();
     void handleGracefulQuitTimerEvent();
+#ifndef ANDROID
+    void setIcon();
+    void iconActivated(QSystemTrayIcon::ActivationReason reason);
+    void toggleVisibilitySlot();
+#endif
 
 private:
+#ifndef ANDROID
+    void createActions();
+    void createTrayIcon();
+#endif
+
     QWidget *centralWidget;
     QWidget *verticalLayoutWidget;
     QVBoxLayout *verticalLayout1;
     QPushButton *quitButton;
     QPushButton *gracefulQuitButton;
+
+#ifndef ANDROID
+    bool quitting;
+    QAction *toggleWindowVisibleAction;
+    QSystemTrayIcon *trayIcon;
+    QMenu *trayIconMenu;
+#endif
+
+protected:
+#ifndef ANDROID
+    void closeEvent(QCloseEvent *event);
+#endif
 };
 
 #endif // MAINWINDOW_H