diff --git a/src/exam/texamsummary.cpp b/src/exam/texamsummary.cpp
index e626e997b3fcbf5fffdcf4b78678dd732b5796f7..710a17706b6f751f9e543be19b70ddec0cc6d2f1 100644
--- a/src/exam/texamsummary.cpp
+++ b/src/exam/texamsummary.cpp
@@ -22,6 +22,7 @@
 #include <exam/texam.h>
 #include <exam/tqaunit.h>
 #include <exam/textrans.h>
+#include <exam/tlevel.h>
 #include <level/tlevelpreview.h>
 #include <widgets/troundedlabel.h>
 #include <tpath.h>
@@ -29,7 +30,9 @@
 #include <QtWidgets/QtWidgets>
 #if defined (Q_OS_ANDROID)
   #include <touch/ttoucharea.h>
+  #include <Android/tandroid.h>
 #endif
+#include <qtr.h>
 
 
   /** returns 2 columns row of table */
@@ -96,8 +99,6 @@ TexamSummary::TexamSummary(Texam* exam, bool cont, QWidget* parent) :
   timeGr->setLayout(timeLay);
   m_leftLay->addWidget(timeGr);
 
-  QHBoxLayout *buttLay =new QHBoxLayout;
-
   QPushButton *analyseButt = new QPushButton(tr("Analyze"), this);
     analyseButt->setIcon(QIcon(Tpath::img("charts")));
     analyseButt->setIconSize(QSize(48, 48));
@@ -105,24 +106,32 @@ TexamSummary::TexamSummary(Texam* exam, bool cont, QWidget* parent) :
     analyseButt->setDisabled(true);
 #if defined (Q_OS_ANDROID) // TODO: delete if mobile version will support analysis
     analyseButt->hide();
+  m_sendButt = new QPushButton(qTR("QShortcut", "Send"), this);
+    m_sendButt->setIcon(QIcon(Tpath::img("nootka-exam")));
+    m_sendButt->setIconSize(QSize(48, 48));
 #endif
-  m_okButt = new QPushButton(tr("Close"), this);
+
+  m_okButt = new QPushButton(qTR("QPlatformTheme", "Close"), this);
   if (cont) {
-      m_okButt->setText(tr("Continue"));
+      m_okButt->setText(qTR("QWizard", "Continue"));
       m_okButt->setIcon(QIcon(Tpath::img("exam")));
-      m_closeButt = new QPushButton(tr("Discard"), this);
-      m_closeButt->setIcon(QIcon(style()->standardIcon(QStyle::SP_DialogCloseButton)));
+      m_closeButt = new QPushButton(qTR("QPlatformTheme", "Discard"), this);
+      m_closeButt->setIcon(style()->standardIcon(QStyle::SP_DialogCloseButton));
       m_closeButt->setIconSize(QSize(48, 48));
-      connect(m_closeButt, SIGNAL(clicked()), this, SLOT(closeSlot()));
+      connect(m_closeButt, &QPushButton::clicked, this, &TexamSummary::closeSlot);
   } else
-      m_okButt->setIcon(QIcon(style()->standardIcon(QStyle::SP_DialogCloseButton)));
+      m_okButt->setIcon(style()->standardIcon(QStyle::SP_DialogCloseButton));
   m_okButt->setIconSize(QSize(48, 48));
 
-  buttLay->addWidget(m_okButt);
-  buttLay->addWidget(analyseButt);
+  auto buttLay = new QHBoxLayout;
+    buttLay->addWidget(m_okButt);
+    buttLay->addWidget(analyseButt);
 
   m_leftLay->addStretch(1);
   m_leftLay->addLayout(buttLay);
+#if defined (Q_OS_ANDROID)
+  m_leftLay->addWidget(m_sendButt);
+#endif
   if (cont)
     m_leftLay->addWidget(m_closeButt);
 
@@ -136,7 +145,7 @@ TexamSummary::TexamSummary(Texam* exam, bool cont, QWidget* parent) :
 	levelWdg->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
 	QVBoxLayout *resLay = new QVBoxLayout();
 	QGroupBox *resGr = new QGroupBox(tr("Results:"), this);
-  QString effStr = "";
+  QString effStr;
   if (exam->mistakes() || exam->halfMistaken()) {
 //     effStr = row2(TexamView::mistakesNrTxt(), QString::number(exam->mistakes()));
 //     effStr += row2(TexamView::corrAnswersNrTxt(), QString::number(exam->count()-exam->mistakes()));
@@ -202,8 +211,11 @@ TexamSummary::TexamSummary(Texam* exam, bool cont, QWidget* parent) :
   setLayout(lay);
 #endif
 
-  connect(analyseButt, SIGNAL(clicked()), this, SLOT(analyseSlot()));
-  connect(m_okButt, SIGNAL(clicked()), this, SLOT(continueSlot()));
+  connect(analyseButt, &QPushButton::clicked, this, &TexamSummary::analyseSlot);
+  connect(m_okButt, &QPushButton::clicked, this, &TexamSummary::continueSlot);
+#if defined (Q_OS_ANDROID)
+  connect(m_sendButt, &QPushButton::clicked, this, &TexamSummary::sendExamSlot);
+#endif
 
   if (m_exam->isExercise())
     setForExercise();
@@ -222,13 +234,16 @@ void TexamSummary::setForExercise() {
 		m_examButton->setToolTip(tr("Finish exercise and pass an exam on this level."));
 		m_examButton->setIcon(QIcon(Tpath::img("exam")));
 		m_examButton->setIconSize(QSize(48, 48));
-	connect(m_examButton, SIGNAL(clicked()), this, SLOT(startExamSlot()));
+  connect(m_examButton, &QPushButton::clicked, this, &TexamSummary::startExamSlot);
 	if (m_closeButt) {
 		m_okButt->setIcon(QIcon(Tpath::img("practice")));
 		m_closeButt->setText(tr("Finish this exercise"));
 		m_leftLay->insertWidget(m_leftLay->count() - 1, m_examButton);
 	} else
 		m_leftLay->addWidget(m_examButton);
+#if defined (Q_OS_ANDROID)
+  m_sendButt->hide(); // don't send exercise file
+#endif
 }
 
 
@@ -239,10 +254,22 @@ void TexamSummary::setForExercise() {
 void TexamSummary::analyseSlot() {
   TpluginsLoader loader;
   if (loader.load(TpluginsLoader::e_analyzer)) {
-    loader.init("", m_mainWIndow, m_exam); 
+    loader.init(QString(), m_mainWIndow, m_exam);
   }
 }
 
+
+#if defined (Q_OS_ANDROID)
+void TexamSummary::sendExamSlot() {
+  QString space = QStringLiteral(" ");
+  QString br = QStringLiteral("\n");
+  QString message = qTR("TexamSummary", "student:") + space + m_exam->userName() + br;
+  message += qTR("TanalysDialog", "level:") + space + m_exam->level()->name + br;
+  message += qTR("TexamSummary", "Number of questions:") + space + QString::number(m_exam->count()) + br;
+  Tandroid::sendExam(tr("Send exam file"), message, m_exam->fileName());
+}
+#endif
+
 void TexamSummary::closeSlot() {
   m_state = e_discard;
   close();
diff --git a/src/exam/texamsummary.h b/src/exam/texamsummary.h
index 5b109b7211ded884e6d750bc09782925d2e3e63a..aa56d3d04e61c6b1ab261ab88a49776e2c4d487b 100644
--- a/src/exam/texamsummary.h
+++ b/src/exam/texamsummary.h
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2011-2015 by Tomasz Bojczuk                             *
+ *   Copyright (C) 2011-2016 by Tomasz Bojczuk                             *
  *   tomaszbojczuk@gmail.com                                               *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -19,19 +19,19 @@
 #ifndef TEXAMSUMMARY_H
 #define TEXAMSUMMARY_H
 
-#include <QDialog>
+#include <QtWidgets/qdialog.h>
 
 class QVBoxLayout;
 class QPushButton;
 class Texam;
 
-/**  Global function to create and display an exam summary dialog.
- *  If it returns false - user don't want to continue an exam
- *  @p startExam is a pointer to know does user want to start exam on exercise level.
- *  QMainWindow has to be put for proper size of analyze dialog. */
+/** Global function to create and display an exam summary dialog.
+ * If it returns false - user don't want to continue an exam
+ * @p startExam is a pointer to know does user want to start exam on exercise level.
+ * @class QMainWindow has to be put for proper size of analyze dialog. */
 bool showExamSummary(QWidget* mainWindow, Texam* exam, bool cont, bool* startExam = 0);
 
-/** 
+/**
  * Dialog window with exam summary
  * When @param cont is true On button is shown text 'continue' 
  */
@@ -40,27 +40,32 @@ class TexamSummary : public QDialog
   Q_OBJECT
 public:
   TexamSummary(Texam *exam, bool cont = false, QWidget *parent = 0);
-  
-  
+
   enum Eactions { e_continue, e_discard, e_startExam };
   Eactions doExec();
-	
+
 			/** By default it was created for exams. This method adjust the dialog for exercise context:
 			* - changes window title, 
 			* - continue button icon
 			* - adds button to start exam on current exercise level */
 	void setForExercise();
-  
-protected slots:
+
+protected:
   void closeSlot();
   void analyseSlot();
   void continueSlot();
 	void startExamSlot();
-  
+#if defined (Q_OS_ANDROID)
+  void sendExamSlot();
+#endif
+
 private:
   Texam 						*m_exam;
   Eactions 					 m_state;
 	QPushButton 			*m_closeButt, *m_okButt, *m_examButton;
+#if defined (Q_OS_ANDROID)
+  QPushButton       *m_sendButt;
+#endif
 	QVBoxLayout			  *m_leftLay;
 	QWidget						*m_mainWIndow;
 };
diff --git a/src/libs/core/Android/tandroid.cpp b/src/libs/core/Android/tandroid.cpp
index e688745ed8943e97a9dbc7b609e6138ce8af7364..9f951ccae81bb497e4f03960b89ab87cbce575f7 100644
--- a/src/libs/core/Android/tandroid.cpp
+++ b/src/libs/core/Android/tandroid.cpp
@@ -69,10 +69,27 @@ QString Tandroid::getRunArgument() {
        }
     }
   }
+  QAndroidJniEnvironment env;
+  if (env->ExceptionCheck())
+    env->ExceptionClear();
   return argument;
 }
 
 
+void Tandroid::sendExam(const QString& title, const QString &message, const QString& filePath) {
+  QAndroidJniObject jTitle = QAndroidJniObject::fromString(title);
+  QAndroidJniObject jMessage = QAndroidJniObject::fromString(message);
+  QAndroidJniObject jFile = QAndroidJniObject::fromString(filePath);
+  QAndroidJniObject::callStaticMethod<void>(
+        "net/sf/nootka/TshareExam", "send",
+        "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
+        jTitle.object<jstring>(), jMessage.object<jstring>(), jFile.object<jstring>());
+  QAndroidJniEnvironment env;
+  if (env->ExceptionCheck())
+    env->ExceptionClear();
+}
+
+
 QString Tandroid::accountName() {
   return "fake";
 //  return QAndroidJniObject::callStaticObjectMethod<jstring>
diff --git a/src/libs/core/Android/tandroid.h b/src/libs/core/Android/tandroid.h
index f352cba5aebc63e420528c0440738556364b2816..9533ceb253a9ff49b98643529bffcaa8b8b0d11e 100644
--- a/src/libs/core/Android/tandroid.h
+++ b/src/libs/core/Android/tandroid.h
@@ -30,6 +30,7 @@ namespace Tandroid {
   void setScreenLockDisabled(); /**< Sets phone/tablet screen saving disabled. */
   QString getExternalPath(); /**< Returns path to external storage (SD card). */
   QString getRunArgument(); /**< Returns command line argument (usually exam/level file name. */
+  void sendExam(const QString& title, const QString& message, const QString& filePath);
   QString accountName();
 
 }