diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp
index 9834a4715..50ee030f2 100644
--- a/src/app/tape/tmainwindow.cpp
+++ b/src/app/tape/tmainwindow.cpp
@@ -2110,6 +2110,85 @@ void TMainWindow::FullCircumferenceChanged(bool checked)
     InitDimensionControls();
 }
 
+//---------------------------------------------------------------------------------------------------------------------
+void TMainWindow::ExportToIndividual()
+{
+    QString dir;
+    if (curFile.isEmpty())
+    {
+        dir = qApp->TapeSettings()->GetPathIndividualMeasurements();
+    }
+    else
+    {
+        dir = QFileInfo(curFile).absolutePath();
+    }
+
+    bool usedNotExistedDir = false;
+    QDir directory(dir);
+    if (not directory.exists())
+    {
+        usedNotExistedDir = directory.mkpath(QChar('.'));
+    }
+
+    QString filters = tr("Individual measurements") + QStringLiteral(" (*.vit)");
+    QString fName = tr("measurements.vit");
+    QString fileName = QFileDialog::getSaveFileName(this, tr("Export to individual"), dir + QChar('/') + fName,
+                                                    filters);
+
+    auto RemoveTempDir = qScopeGuard([usedNotExistedDir, dir]()
+                                     {
+                                         if (usedNotExistedDir)
+                                         {
+                                             QDir(dir).rmpath(QChar('.'));
+                                         }
+                                     });
+
+    if (fileName.isEmpty())
+    {
+        return;
+    }
+
+    QString suffix = QStringLiteral("vit");
+    QFileInfo f( fileName );
+    if (f.suffix().isEmpty() && f.suffix() != suffix)
+    {
+        fileName += QChar('.') + suffix;
+    }
+
+    QScopedPointer<VContainer> tmpData(new VContainer(qApp->TrVars(), &mUnit, VContainer::UniqueNamespace()));
+
+    VMeasurements individualMeasurements(mUnit, tmpData.data());
+
+    const QMap<int, QSharedPointer<VMeasurement> > orderedTable = OrderedMeasurments();
+    QMap<int, QSharedPointer<VMeasurement> >::const_iterator iMap;
+    for (iMap = orderedTable.constBegin(); iMap != orderedTable.constEnd(); ++iMap)
+    {
+        const QSharedPointer<VMeasurement> &meash = iMap.value();
+        individualMeasurements.AddEmpty(meash->GetName());
+        individualMeasurements.SetMValue(meash->GetName(), QString::number(*meash->GetValue()));
+        individualMeasurements.SetMSpecialUnits(meash->GetName(), meash->IsSpecialUnits());
+        if (meash->IsCustom())
+        {
+            individualMeasurements.SetMDescription(meash->GetName(), meash->GetDescription());
+            individualMeasurements.SetMFullName(meash->GetName(), meash->GetGuiText());
+        }
+    }
+
+    QString error;
+    const bool result = individualMeasurements.SaveDocument(fileName, error);
+    if (not result)
+    {
+        QMessageBox messageBox;
+        messageBox.setIcon(QMessageBox::Warning);
+        messageBox.setInformativeText(tr("Could not save the file"));
+        messageBox.setDefaultButton(QMessageBox::Ok);
+        messageBox.setDetailedText(error);
+        messageBox.setStandardButtons(QMessageBox::Ok);
+        messageBox.exec();
+        return;
+    }
+}
+
 //---------------------------------------------------------------------------------------------------------------------
 void TMainWindow::SetupMenu()
 {
@@ -2387,6 +2466,10 @@ void TMainWindow::InitMenu()
         actionFullCircumference->setChecked(m->IsFullCircumference());
         ui->menuMeasurements->addAction(actionFullCircumference);
         connect(actionFullCircumference, &QAction::triggered, this, &TMainWindow::FullCircumferenceChanged);
+
+        ui->actionExportToIndividual->setVisible(true);
+        ui->actionExportToIndividual->setEnabled(true);
+        connect(ui->actionExportToIndividual, &QAction::triggered, this, &TMainWindow::ExportToIndividual);
     }
 }
 
@@ -2778,15 +2861,7 @@ void TMainWindow::RefreshTable(bool freshCall)
 
     ShowUnits();
 
-    const QMap<QString, QSharedPointer<VMeasurement> > table = data->DataMeasurements();
-    QMap<int, QSharedPointer<VMeasurement> > orderedTable;
-    QMap<QString, QSharedPointer<VMeasurement> >::const_iterator iterMap;
-    for (iterMap = table.constBegin(); iterMap != table.constEnd(); ++iterMap)
-    {
-        const QSharedPointer<VMeasurement> &meash = iterMap.value();
-        orderedTable.insert(meash->Index(), meash);
-    }
-
+    const QMap<int, QSharedPointer<VMeasurement> > orderedTable = OrderedMeasurments();
     qint32 currentRow = -1;
     QMap<int, QSharedPointer<VMeasurement> >::const_iterator iMap;
     ui->tableWidget->setRowCount ( orderedTable.size() );
@@ -3981,6 +4056,21 @@ QVector<int> TMainWindow::DimensionRestrictedValues(int index, const Measurement
     return QVector<int>();
 }
 
+//---------------------------------------------------------------------------------------------------------------------
+QMap<int, QSharedPointer<VMeasurement> > TMainWindow::OrderedMeasurments() const
+{
+    const QMap<QString, QSharedPointer<VMeasurement> > table = data->DataMeasurements();
+    QMap<int, QSharedPointer<VMeasurement> > orderedTable;
+    QMap<QString, QSharedPointer<VMeasurement> >::const_iterator iterMap;
+    for (iterMap = table.constBegin(); iterMap != table.constEnd(); ++iterMap)
+    {
+        const QSharedPointer<VMeasurement> &meash = iterMap.value();
+        orderedTable.insert(meash->Index(), meash);
+    }
+
+    return orderedTable;
+}
+
 //---------------------------------------------------------------------------------------------------------------------
 void TMainWindow::SetDecimals()
 {
diff --git a/src/app/tape/tmainwindow.h b/src/app/tape/tmainwindow.h
index ef81284cc..c7b26a8ad 100644
--- a/src/app/tape/tmainwindow.h
+++ b/src/app/tape/tmainwindow.h
@@ -44,6 +44,7 @@ namespace Ui
 
 class QLabel;
 class QxtCsvModel;
+class VMeasurement;
 
 class TMainWindow : public VAbstractMainWindow
 {
@@ -136,6 +137,8 @@ private slots:
 
     void FullCircumferenceChanged(bool checked);
 
+    void ExportToIndividual();
+
 private:
     Q_DISABLE_COPY(TMainWindow)
     Ui::TMainWindow *ui;
@@ -243,6 +246,8 @@ private:
     void SetCurrentDimensionValues();
 
     QVector<int> DimensionRestrictedValues(int index, const MeasurementDimension_p &dimension);
+
+    QMap<int, QSharedPointer<VMeasurement> > OrderedMeasurments() const;
 };
 
 #endif // TMAINWINDOW_H
diff --git a/src/app/tape/tmainwindow.ui b/src/app/tape/tmainwindow.ui
index e5ce51c77..5fee81df1 100644
--- a/src/app/tape/tmainwindow.ui
+++ b/src/app/tape/tmainwindow.ui
@@ -963,6 +963,7 @@
     <addaction name="actionSaveAs"/>
     <addaction name="actionExportToCSV"/>
     <addaction name="actionImportFromCSV"/>
+    <addaction name="actionExportToIndividual"/>
     <addaction name="separator"/>
     <addaction name="actionReadOnly"/>
     <addaction name="separator"/>
@@ -1332,6 +1333,26 @@
     <enum>QAction::NoRole</enum>
    </property>
   </action>
+  <action name="actionExportToIndividual">
+   <property name="checkable">
+    <bool>false</bool>
+   </property>
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
+   <property name="text">
+    <string>Export to individual</string>
+   </property>
+   <property name="toolTip">
+    <string>Export to individual measurements</string>
+   </property>
+   <property name="visible">
+    <bool>false</bool>
+   </property>
+   <property name="menuRole">
+    <enum>QAction::NoRole</enum>
+   </property>
+  </action>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
  <customwidgets>
diff --git a/src/libs/vformat/vmeasurements.cpp b/src/libs/vformat/vmeasurements.cpp
index 8a8916a1a..033f3ef63 100644
--- a/src/libs/vformat/vmeasurements.cpp
+++ b/src/libs/vformat/vmeasurements.cpp
@@ -132,7 +132,7 @@ VMeasurements::VMeasurements(Unit unit, VContainer *data)
 {
     SCASSERT(data != nullptr)
 
-            CreateEmptyIndividualFile(unit);
+    CreateEmptyIndividualFile(unit);
 }
 
 //---------------------------------------------------------------------------------------------------------------------