diff --git a/common.pri b/common.pri
index 9f4826b7c..f14d6c048 100644
--- a/common.pri
+++ b/common.pri
@@ -41,6 +41,8 @@ win32 {
                        ../../../dist/win/msvcr120.dll
 }
 
+DEFINES += QT_NO_FOREACH
+
 macx{
     # QTBUG-31034 qmake doesn't allow override QMAKE_CXX
     CONFIG+=no_ccache
diff --git a/src/app/tape/dialogs/dialogmdatabase.cpp b/src/app/tape/dialogs/dialogmdatabase.cpp
index f6452facd..33b03712d 100644
--- a/src/app/tape/dialogs/dialogmdatabase.cpp
+++ b/src/app/tape/dialogs/dialogmdatabase.cpp
@@ -438,9 +438,9 @@ void DialogMDataBase::InitGroup(QTreeWidgetItem **group, const QString &groupNam
                                 const QStringList &list)
 {
     *group = AddGroup(groupName);
-    for (int i=0; i < mList.size(); ++i)
+    for (auto &m : mList)
     {
-        AddMeasurement(*group, mList.at(i), list);
+        AddMeasurement(*group, m, list);
     }
 }
 
diff --git a/src/app/tape/mapplication.cpp b/src/app/tape/mapplication.cpp
index fff4a658d..16a63bc24 100644
--- a/src/app/tape/mapplication.cpp
+++ b/src/app/tape/mapplication.cpp
@@ -252,11 +252,7 @@ MApplication::MApplication(int &argc, char **argv)
 //---------------------------------------------------------------------------------------------------------------------
 MApplication::~MApplication()
 {
-    for (int i = 0; i < mainWindows.size(); ++i)
-    {
-        TMainWindow *window = mainWindows.at(i);
-        delete window;
-    }
+    qDeleteAll(mainWindows);
 
     delete trVars;
     if (not dataBase.isNull())
@@ -368,9 +364,9 @@ QList<TMainWindow *> MApplication::MainWindows()
 {
     Clean();
     QList<TMainWindow*> list;
-    for (int i = 0; i < mainWindows.count(); ++i)
+    for (auto &w : mainWindows)
     {
-        list.append(mainWindows.at(i));
+        list.append(w);
     }
     return list;
 }
@@ -536,10 +532,10 @@ void MApplication::RetranslateGroups()
 //---------------------------------------------------------------------------------------------------------------------
 void MApplication::RetranslateTables()
 {
-    QList<TMainWindow*> list = MainWindows();
-    for (int i=0; i < list.size(); ++i)
+    const QList<TMainWindow*> list = MainWindows();
+    for (auto w : list)
     {
-        list.at(i)->RetranslateTable();
+        w->RetranslateTable();
     }
 }
 
@@ -689,10 +685,10 @@ void MApplication::ParseCommandLine(const SocketConnection &connection, const QS
             parser.showHelp(V_EX_USAGE);
         }
 
-        for (int i = 0; i < args.size(); ++i)
+        for (auto &arg : args)
         {
             NewMainWindow();
-            if (not MainWindow()->LoadFile(args.at(i)))
+            if (not MainWindow()->LoadFile(arg))
             {
                 if (testMode)
                 {
diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp
index ab49b7ef7..d86868359 100644
--- a/src/app/tape/tmainwindow.cpp
+++ b/src/app/tape/tmainwindow.cpp
@@ -226,12 +226,12 @@ bool TMainWindow::LoadFile(const QString &path)
         }
 
         // Check if file already opened
-        QList<TMainWindow*>list = qApp->MainWindows();
-        for (int i = 0; i < list.size(); ++i)
+        const QList<TMainWindow*> list = qApp->MainWindows();
+        for (auto w : list)
         {
-            if (list.at(i)->CurrentFile() == path)
+            if (w->CurrentFile() == path)
             {
-                list.at(i)->activateWindow();
+                w->activateWindow();
                 close();
                 return false;
             }
@@ -519,6 +519,15 @@ void TMainWindow::ToolBarStyles()
 //---------------------------------------------------------------------------------------------------------------------
 void TMainWindow::closeEvent(QCloseEvent *event)
 {
+#if defined(Q_OS_MAC)
+    // Workaround for Qt bug https://bugreports.qt.io/browse/QTBUG-43344
+    static int numCalled = 0;
+    if (numCalled++ >= 1)
+    {
+        return;
+    }
+#endif
+
     if (MaybeSave())
     {
         WriteSettings();
@@ -963,8 +972,11 @@ void TMainWindow::ImportDataFromCSV()
     const QString filters = tr("Comma-Separated Values") + QLatin1String(" (*.csv)");
     const QString suffix("csv");
 
-    QString fileName = QFileDialog::getOpenFileName(this, tr("Import from CSV"), QDir::homePath(), filters, nullptr,
-                                                    QFileDialog::DontUseNativeDialog);
+    QString fileName = QFileDialog::getOpenFileName(this, tr("Import from CSV"), QDir::homePath(), filters, nullptr
+#ifdef Q_OS_LINUX
+                                                    , QFileDialog::DontUseNativeDialog
+#endif
+                                                    );
 
     if (fileName.isEmpty())
     {
@@ -1347,15 +1359,15 @@ void TMainWindow::AddKnown()
         if (ui->tableWidget->currentRow() == -1)
         {
             currentRow  = ui->tableWidget->rowCount() + list.size() - 1;
-            for (int i = 0; i < list.size(); ++i)
+            for (auto &name : list)
             {
                 if (mType == MeasurementsType::Individual)
                 {
-                    m->AddEmpty(list.at(i), qApp->TrVars()->MFormula(list.at(i)));
+                    m->AddEmpty(name, qApp->TrVars()->MFormula(name));
                 }
                 else
                 {
-                    m->AddEmpty(list.at(i));
+                    m->AddEmpty(name);
                 }
 
                 search->AddRow(currentRow);
@@ -1366,18 +1378,18 @@ void TMainWindow::AddKnown()
             currentRow  = ui->tableWidget->currentRow() + list.size();
             const QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), ColumnName);
             QString after = nameField->data(Qt::UserRole).toString();
-            for (int i = 0; i < list.size(); ++i)
+            for (auto &name : list)
             {
                 if (mType == MeasurementsType::Individual)
                 {
-                    m->AddEmptyAfter(after, list.at(i), qApp->TrVars()->MFormula(list.at(i)));
+                    m->AddEmptyAfter(after, name, qApp->TrVars()->MFormula(name));
                 }
                 else
                 {
-                    m->AddEmptyAfter(after, list.at(i));
+                    m->AddEmptyAfter(after, name);
                 }
                 search->AddRow(currentRow);
-                after = list.at(i);
+                after = name;
             }
         }
 
@@ -1441,9 +1453,9 @@ void TMainWindow::ImportFromPattern()
     if (ui->tableWidget->currentRow() == -1)
     {
         currentRow  = ui->tableWidget->rowCount() + measurements.size() - 1;
-        for (int i = 0; i < measurements.size(); ++i)
+        for (auto &mName : measurements)
         {
-            m->AddEmpty(measurements.at(i));
+            m->AddEmpty(mName);
         }
     }
     else
@@ -1451,10 +1463,10 @@ void TMainWindow::ImportFromPattern()
         currentRow  = ui->tableWidget->currentRow() + measurements.size();
         const QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), ColumnName);
         QString after = nameField->data(Qt::UserRole).toString();
-        for (int i = 0; i < measurements.size(); ++i)
+        for (auto &mName : measurements)
         {
-            m->AddEmptyAfter(after, measurements.at(i));
-            after = measurements.at(i);
+            m->AddEmptyAfter(after, mName);
+            after = mName;
         }
     }
 
@@ -2836,12 +2848,12 @@ bool TMainWindow::LoadFromExistingFile(const QString &path)
         }
 
         // Check if file already opened
-        QList<TMainWindow*>list = qApp->MainWindows();
-        for (int i = 0; i < list.size(); ++i)
+        const QList<TMainWindow*> list = qApp->MainWindows();
+        for (auto w : list)
         {
-            if (list.at(i)->CurrentFile() == path)
+            if (w->CurrentFile() == path)
             {
-                list.at(i)->activateWindow();
+                w->activateWindow();
                 close();
                 return false;
             }
@@ -2977,7 +2989,7 @@ void TMainWindow::CreateWindowMenu(QMenu *menu)
     SCASSERT(menu != nullptr)
 
     QAction *action = menu->addAction(tr("&New Window"));
-    connect(action, &QAction::triggered, this, [this]()
+    connect(action, &QAction::triggered, this, []()
     {
         qApp->NewMainWindow();
         qApp->MainWindow()->activateWindow();
@@ -3207,18 +3219,18 @@ void TMainWindow::ImportIndividualMeasurements(const QxtCsvModel &csv)
         }
     }
 
-    for(int i=0; i < measurements.size(); ++i)
+    for(auto im : qAsConst(measurements))
     {
-        m->AddEmpty(measurements.at(i).name, measurements.at(i).value);
+        m->AddEmpty(im.name, im.value);
 
-        if (not measurements.at(i).fullName.isEmpty())
+        if (not im.fullName.isEmpty())
         {
-            m->SetMFullName(measurements.at(i).name, measurements.at(i).fullName);
+            m->SetMFullName(im.name, im.fullName);
         }
 
-        if (not measurements.at(i).description.isEmpty())
+        if (not im.description.isEmpty())
         {
-            m->SetMDescription(measurements.at(i).name, measurements.at(i).description);
+            m->SetMDescription(im.name, im.description);
         }
     }
 
@@ -3237,7 +3249,7 @@ void TMainWindow::ImportMultisizeMeasurements(const QxtCsvModel &csv)
         return;
     }
 
-    auto ConverToDouble = [this](QString text, const QString &error)
+    auto ConverToDouble = [](QString text, const QString &error)
     {
         text = VTranslateVars::TryFormulaFromUser(text, qApp->Settings()->GetOsSeparator());
         bool ok = false;
@@ -3317,21 +3329,21 @@ void TMainWindow::ImportMultisizeMeasurements(const QxtCsvModel &csv)
         }
     }
 
-    for(int i=0; i < measurements.size(); ++i)
+    for(auto mm : qAsConst(measurements))
     {
-        m->AddEmpty(measurements.at(i).name);
-        m->SetMBaseValue(measurements.at(i).name, measurements.at(i).base);
-        m->SetMSizeIncrease(measurements.at(i).name, measurements.at(i).sizeIncrease);
-        m->SetMHeightIncrease(measurements.at(i).name, measurements.at(i).heightIncrease);
+        m->AddEmpty(mm.name);
+        m->SetMBaseValue(mm.name, mm.base);
+        m->SetMSizeIncrease(mm.name, mm.sizeIncrease);
+        m->SetMHeightIncrease(mm.name, mm.heightIncrease);
 
-        if (not measurements.at(i).fullName.isEmpty())
+        if (not mm.fullName.isEmpty())
         {
-            m->SetMFullName(measurements.at(i).name, measurements.at(i).fullName);
+            m->SetMFullName(mm.name, mm.fullName);
         }
 
-        if (not measurements.at(i).description.isEmpty())
+        if (not mm.description.isEmpty())
         {
-            m->SetMDescription(measurements.at(i).name, measurements.at(i).description);
+            m->SetMDescription(mm.name, mm.description);
         }
     }
 
diff --git a/src/app/valentina/core/vapplication.cpp b/src/app/valentina/core/vapplication.cpp
index f2b814315..998f5ded8 100644
--- a/src/app/valentina/core/vapplication.cpp
+++ b/src/app/valentina/core/vapplication.cpp
@@ -513,9 +513,8 @@ void VApplication::ClearOldLogs() const
     if (allFiles.isEmpty() == false)
     {
         qCDebug(vApp, "Clearing old logs");
-        for (int i = 0, sz = allFiles.size(); i < sz; ++i)
+        for (auto &fn : allFiles)
         {
-            auto fn = allFiles.at(i);
             QFileInfo info(fn);
 #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
             const QDateTime created = info.birthTime();
diff --git a/src/app/valentina/core/vformulaproperty.cpp b/src/app/valentina/core/vformulaproperty.cpp
index fbaf85cc0..6f4fa61c8 100644
--- a/src/app/valentina/core/vformulaproperty.cpp
+++ b/src/app/valentina/core/vformulaproperty.cpp
@@ -139,8 +139,8 @@ VPE::VProperty *VFormulaProperty::clone(bool include_children, VProperty *contai
 
         if (!include_children)
         {
-            QList<VProperty*> tmpChildren = container->getChildren();
-            foreach (VProperty* tmpChild, tmpChildren)
+            const QList<VProperty*> tmpChildren = container->getChildren();
+            for (auto tmpChild : tmpChildren)
             {
                 container->removeChild(tmpChild);
                 delete tmpChild;
diff --git a/src/app/valentina/core/vformulapropertyeditor.cpp b/src/app/valentina/core/vformulapropertyeditor.cpp
index a607a806f..06b2dca77 100644
--- a/src/app/valentina/core/vformulapropertyeditor.cpp
+++ b/src/app/valentina/core/vformulapropertyeditor.cpp
@@ -35,6 +35,7 @@
 #include <QColorDialog>
 #include <QDebug>
 #include <QRegularExpression>
+#include <QSpacerItem>
 
 #include "../vpropertyexplorer/vproperty.h"
 #include "../vtools/dialogs/support/dialogeditwrongformula.h"
@@ -42,7 +43,7 @@
 // VFormulaPropertyEditor
 //---------------------------------------------------------------------------------------------------------------------
 VFormulaPropertyEditor::VFormulaPropertyEditor(QWidget *parent)
-    : QWidget(parent), formula(VFormula()), ToolButton(nullptr), TextLabel(nullptr), Spacer(nullptr)
+    : QWidget(parent), formula(VFormula()), ToolButton(nullptr), TextLabel(nullptr)
 {
     setAutoFillBackground(true);
 
@@ -61,15 +62,13 @@ VFormulaPropertyEditor::VFormulaPropertyEditor(QWidget *parent)
     TextLabel = new QLabel(this);
     TextLabel->setText(formula.getStringValue());
 
-    // Spacer (this is needed for proper display of the label and button)
-    Spacer = new QSpacerItem(1, 0, QSizePolicy::Expanding, QSizePolicy::Ignored);
-
     // The layout (a horizontal layout)
     QHBoxLayout* layout = new QHBoxLayout(this);
     layout->setSpacing(3);
     layout->setMargin(0);
     layout->addWidget(TextLabel);
-    layout->addItem(Spacer);
+    // Spacer (this is needed for proper display of the label and button)
+    layout->addSpacerItem(new QSpacerItem(1000000000, 0, QSizePolicy::Expanding, QSizePolicy::Expanding));
     layout->addWidget(ToolButton);
 }
 
diff --git a/src/app/valentina/core/vformulapropertyeditor.h b/src/app/valentina/core/vformulapropertyeditor.h
index 6a3660432..98fe6b089 100644
--- a/src/app/valentina/core/vformulapropertyeditor.h
+++ b/src/app/valentina/core/vformulapropertyeditor.h
@@ -33,7 +33,6 @@
 #include <QToolButton>
 #include <QLineEdit>
 #include <QLabel>
-#include <QSpacerItem>
 
 #include "../vpatterndb/vformula.h"
 
@@ -72,7 +71,6 @@ private:
     VFormula formula;
     QToolButton* ToolButton;
     QLabel* TextLabel;
-    QSpacerItem* Spacer;
 };
 
 
diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.cpp b/src/app/valentina/core/vtooloptionspropertybrowser.cpp
index 2030fd2a2..e3cc53600 100644
--- a/src/app/valentina/core/vtooloptionspropertybrowser.cpp
+++ b/src/app/valentina/core/vtooloptionspropertybrowser.cpp
@@ -765,9 +765,9 @@ void VToolOptionsPropertyBrowser::SetOperationSuffix(const QString &suffix)
 
         QRegularExpression rx(NameRegExp());
         const QStringList uniqueNames = VContainer::AllUniqueNames();
-        for (int i=0; i < uniqueNames.size(); ++i)
+        for (auto &uniqueName : uniqueNames)
         {
-            const QString name = uniqueNames.at(i) + suffix;
+            const QString name = uniqueName + suffix;
             if (not rx.match(name).hasMatch() || not VContainer::IsUnique(name))
             {
                 idToProperty[AttrSuffix]->setValue(item->Suffix());
diff --git a/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp b/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp
index e244b7f92..607bd2367 100644
--- a/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp
+++ b/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp
@@ -179,10 +179,9 @@ void PreferencesConfigurationPage::changeEvent(QEvent *event)
 //---------------------------------------------------------------------------------------------------------------------
 void PreferencesConfigurationPage::SetLabelComboBox(const QStringList &list)
 {
-    for (int i = 0; i < list.size(); ++i)
+    for (auto &name : list)
     {
-        QLocale loc = QLocale(list.at(i));
-        ui->labelCombo->addItem(loc.nativeLanguageName(), list.at(i));
+        ui->labelCombo->addItem(QLocale(name).nativeLanguageName(), name);
     }
 }
 
diff --git a/src/app/valentina/dialogs/configpages/preferencespathpage.cpp b/src/app/valentina/dialogs/configpages/preferencespathpage.cpp
index d4c6328d8..e7bd64380 100644
--- a/src/app/valentina/dialogs/configpages/preferencespathpage.cpp
+++ b/src/app/valentina/dialogs/configpages/preferencespathpage.cpp
@@ -148,7 +148,10 @@ void PreferencesPathPage::EditPath()
     const QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), path,
                                                           QFileDialog::ShowDirsOnly
                                                           | QFileDialog::DontResolveSymlinks
-                                                          | QFileDialog::DontUseNativeDialog);
+#ifdef Q_OS_LINUX
+                                                          | QFileDialog::DontUseNativeDialog
+#endif
+                                                          );
     if (dir.isEmpty())
     {
         if (usedNotExistedDir)
diff --git a/src/app/valentina/dialogs/dialogaboutapp.cpp b/src/app/valentina/dialogs/dialogaboutapp.cpp
index d5c323212..f5b7f10b5 100644
--- a/src/app/valentina/dialogs/dialogaboutapp.cpp
+++ b/src/app/valentina/dialogs/dialogaboutapp.cpp
@@ -61,7 +61,7 @@ DialogAboutApp::DialogAboutApp(QWidget *parent) :
 
 
     ui->pushButton_Web_Site->setText(tr("Web site : %1").arg(VER_COMPANYDOMAIN_STR));
-    connect(ui->pushButton_Web_Site, &QPushButton::clicked, this, [this]()
+    connect(ui->pushButton_Web_Site, &QPushButton::clicked, this, []()
     {
         if ( QDesktopServices::openUrl(QUrl(VER_COMPANYDOMAIN_STR)) == false)
         {
diff --git a/src/app/valentina/dialogs/dialogdatetimeformats.cpp b/src/app/valentina/dialogs/dialogdatetimeformats.cpp
index 48b31ed57..2e44ac1da 100644
--- a/src/app/valentina/dialogs/dialogdatetimeformats.cpp
+++ b/src/app/valentina/dialogs/dialogdatetimeformats.cpp
@@ -165,14 +165,14 @@ void DialogDateTimeFormats::SetFormatLines(const QStringList &predefined, const
 
     int row = -1;
 
-    for (int i=0; i<predefined.size(); ++i)
+    for (auto &item : predefined)
     {
-        ui->listWidget->insertItem(++row, AddListLine(predefined.at(i)));
+        ui->listWidget->insertItem(++row, AddListLine(item));
     }
 
-    for (int i=0; i<userDefined.size(); ++i)
+    for (auto &item : userDefined)
     {
-        ui->listWidget->insertItem(++row, AddListLine(userDefined.at(i)));
+        ui->listWidget->insertItem(++row, AddListLine(item));
     }
 
     ui->listWidget->blockSignals(false);
diff --git a/src/app/valentina/dialogs/dialogincrements.cpp b/src/app/valentina/dialogs/dialogincrements.cpp
index e388b0946..efaf75fbd 100644
--- a/src/app/valentina/dialogs/dialogincrements.cpp
+++ b/src/app/valentina/dialogs/dialogincrements.cpp
@@ -585,15 +585,14 @@ bool DialogIncrements::IncrementUsed(const QString &name) const
 {
     const QVector<VFormulaField> expressions = doc->ListExpressions();
 
-    for(int i = 0; i < expressions.size(); ++i)
+    for(auto field : expressions)
     {
-        if (expressions.at(i).expression.indexOf(name) != -1)
+        if (field.expression.indexOf(name) != -1)
         {
             // Eval formula
             try
             {
-                QScopedPointer<qmu::QmuTokenParser> cal(new qmu::QmuTokenParser(expressions.at(i).expression, false,
-                                                                                false));
+                QScopedPointer<qmu::QmuTokenParser> cal(new qmu::QmuTokenParser(field.expression, false, false));
 
                 // Tokens (variables, measurements)
                 if (cal->GetTokens().values().contains(name))
@@ -728,9 +727,9 @@ void DialogIncrements::RefreshPattern()
     if (hasChanges)
     {
         QVector<VFormulaField> expressions = doc->ListExpressions();
-        for (int i = 0; i < renameList.size(); ++i)
+        for (auto &item : renameList)
         {
-            doc->ReplaceNameInFormula(expressions, renameList.at(i).first, renameList.at(i).second);
+            doc->ReplaceNameInFormula(expressions, item.first, item.second);
         }
         renameList.clear();
 
diff --git a/src/app/valentina/dialogs/dialogknownmaterials.cpp b/src/app/valentina/dialogs/dialogknownmaterials.cpp
index ae6c1a104..f162363d6 100644
--- a/src/app/valentina/dialogs/dialogknownmaterials.cpp
+++ b/src/app/valentina/dialogs/dialogknownmaterials.cpp
@@ -62,12 +62,11 @@ void DialogKnownMaterials::SetList(const QStringList &list)
 
     int row = -1;
 
-    for (int i=0; i<list.size(); ++i)
+    for (auto &m : list)
     {
-        if (not list.at(i).isEmpty())
+        if (not m.isEmpty())
         {
-            QListWidgetItem *item = new QListWidgetItem(list.at(i));
-            ui->listWidget->insertItem(++row, item);
+            ui->listWidget->insertItem(++row, new QListWidgetItem(m));
         }
     }
 
diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.cpp b/src/app/valentina/dialogs/dialoglayoutsettings.cpp
index 95fd20c3d..6324c1572 100644
--- a/src/app/valentina/dialogs/dialoglayoutsettings.cpp
+++ b/src/app/valentina/dialogs/dialoglayoutsettings.cpp
@@ -746,9 +746,9 @@ void DialogLayoutSettings::InitPrinter()
     QStringList printerNames;
 #if QT_VERSION < QT_VERSION_CHECK(5, 3, 0)
     const QList<QPrinterInfo> printers = QPrinterInfo::availablePrinters();
-    for(int i = 0; i < printers.size(); ++i)
+    for(auto printer : printers)
     {
-        const QString name = printers.at(i).printerName();
+        const QString name = printer.printerName();
         if (not name.isEmpty())
         {
             printerNames.append(name);
diff --git a/src/app/valentina/dialogs/dialogpatternmaterials.cpp b/src/app/valentina/dialogs/dialogpatternmaterials.cpp
index 73e9a90fb..3db107744 100644
--- a/src/app/valentina/dialogs/dialogpatternmaterials.cpp
+++ b/src/app/valentina/dialogs/dialogpatternmaterials.cpp
@@ -44,11 +44,11 @@ QStringList PrepareKnowMaterials(const QStringList &patternMaterials, bool remem
 
     if (rememberPM)
     {
-        for(int i=0; i < patternMaterials.size(); ++i)
+        for(auto &patternMaterial : patternMaterials)
         {
-            if (not patternMaterials.at(i).isEmpty() && not knownMaterials.contains(patternMaterials.at(i)))
+            if (not patternMaterial.isEmpty() && not knownMaterials.contains(patternMaterial))
             {
-                knownMaterials.append(patternMaterials.at(i));
+                knownMaterials.append(patternMaterial);
             }
         }
     }
diff --git a/src/app/valentina/dialogs/dialogpatternproperties.cpp b/src/app/valentina/dialogs/dialogpatternproperties.cpp
index 24aa3e8b8..970fcf5c1 100644
--- a/src/app/valentina/dialogs/dialogpatternproperties.cpp
+++ b/src/app/valentina/dialogs/dialogpatternproperties.cpp
@@ -100,7 +100,7 @@ DialogPatternProperties::DialogPatternProperties(VPattern *doc,  VContainer *pat
     }
     ui->lineEditPathToFile->setCursorPosition(0);
 
-    connect(ui->pushButtonShowInExplorer, &QPushButton::clicked, this, [this]()
+    connect(ui->pushButtonShowInExplorer, &QPushButton::clicked, this, []()
     {
         ShowInGraphicalShell(qApp->GetPPath());
     });
@@ -837,8 +837,11 @@ void DialogPatternProperties::InitImage()
 void DialogPatternProperties::ChangeImage()
 {
     const QString filter = tr("Images") + QLatin1String(" (*.png *.jpg *.jpeg *.bmp)");
-    const QString fileName = QFileDialog::getOpenFileName(this, tr("Image for pattern"), QString(), filter, nullptr,
-                                                          QFileDialog::DontUseNativeDialog);
+    const QString fileName = QFileDialog::getOpenFileName(this, tr("Image for pattern"), QString(), filter, nullptr
+#ifdef Q_OS_LINUX
+                                                          , QFileDialog::DontUseNativeDialog
+#endif
+                                                          );
     if (not fileName.isEmpty())
     {
         QImage image;
@@ -879,8 +882,11 @@ void DialogPatternProperties::SaveImage()
     QByteArray ba = QByteArray::fromBase64(byteArray);
     const QString extension = QLatin1String(".") + doc->GetImageExtension();
     QString filter = tr("Images") + QLatin1String(" (*") + extension + QLatin1String(")");
-    QString filename = QFileDialog::getSaveFileName(this, tr("Save File"), tr("untitled"), filter, &filter,
-                                                    QFileDialog::DontUseNativeDialog);
+    QString filename = QFileDialog::getSaveFileName(this, tr("Save File"), tr("untitled"), filter, &filter
+#ifdef Q_OS_LINUX
+                                                    , QFileDialog::DontUseNativeDialog
+#endif
+                                                    );
     if (not filename.isEmpty())
     {
         if (not filename.endsWith(extension.toUpper()))
diff --git a/src/app/valentina/dialogs/dialogsavelayout.cpp b/src/app/valentina/dialogs/dialogsavelayout.cpp
index 70c621b82..eb9e4e20a 100644
--- a/src/app/valentina/dialogs/dialogsavelayout.cpp
+++ b/src/app/valentina/dialogs/dialogsavelayout.cpp
@@ -95,7 +95,7 @@ DialogSaveLayout::DialogSaveLayout(int count, Draw mode, const QString &fileName
         }
     }
 
-    foreach (auto& v, InitFormats())
+    for (auto &v : InitFormats())
     {
         ui->comboBoxFormat->addItem(v.first, QVariant(static_cast<int>(v.second)));
     }
@@ -129,7 +129,10 @@ DialogSaveLayout::DialogSaveLayout(int count, Draw mode, const QString &fileName
         const QString dir = QFileDialog::getExistingDirectory(this, tr("Select folder"), dirPath,
                                                               QFileDialog::ShowDirsOnly
                                                               | QFileDialog::DontResolveSymlinks
-                                                              | QFileDialog::DontUseNativeDialog);
+#ifdef Q_OS_LINUX
+                                                              | QFileDialog::DontUseNativeDialog
+#endif
+                                                              );
         if (not dir.isEmpty())
         {// If paths equal the signal will not be called, we will do this manually
             dir == ui->lineEditPath->text() ? PathChanged(dir) : ui->lineEditPath->setText(dir);
diff --git a/src/app/valentina/dialogs/vabstractlayoutdialog.cpp b/src/app/valentina/dialogs/vabstractlayoutdialog.cpp
index 1ab4fe6b8..18a3bd7f5 100644
--- a/src/app/valentina/dialogs/vabstractlayoutdialog.cpp
+++ b/src/app/valentina/dialogs/vabstractlayoutdialog.cpp
@@ -62,7 +62,7 @@ void VAbstractLayoutDialog::InitTemplates(QComboBox *comboBoxTemplates)
     const QString pdi = QString("(%1ppi)").arg(PrintDPI);
 
     auto cntr = static_cast<VIndexType>(PaperSizeTemplate::A0);
-    foreach(const auto& v, pageFormatNames)
+    for(const auto& v : pageFormatNames)
     {
         if (cntr <= static_cast<int>(PaperSizeTemplate::Legal))
         {
diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp
index 0bfcb1b78..319c10b46 100644
--- a/src/app/valentina/mainwindow.cpp
+++ b/src/app/valentina/mainwindow.cpp
@@ -1518,6 +1518,15 @@ void MainWindow::changeEvent(QEvent *event)
  */
 void MainWindow::closeEvent(QCloseEvent *event)
 {
+#if defined(Q_OS_MAC)
+    // Workaround for Qt bug https://bugreports.qt.io/browse/QTBUG-43344
+    static int numCalled = 0;
+    if (numCalled++ >= 1)
+    {
+        return;
+    }
+#endif
+
     qCDebug(vMainWindow, "Closing main window");
     if (MaybeSave())
     {
@@ -1660,8 +1669,11 @@ void MainWindow::LoadIndividual()
         usedNotExistedDir = directory.mkpath(".");
     }
 
-    const QString mPath = QFileDialog::getOpenFileName(this, tr("Open file"), path, filter, nullptr,
-                                                       QFileDialog::DontUseNativeDialog);
+    const QString mPath = QFileDialog::getOpenFileName(this, tr("Open file"), path, filter, nullptr
+#ifdef Q_OS_LINUX
+                                                       , QFileDialog::DontUseNativeDialog
+#endif
+                                                       );
 
     if (not mPath.isEmpty())
     {
@@ -1698,8 +1710,11 @@ void MainWindow::LoadMultisize()
     //Use standard path to multisize measurements
     QString path = qApp->ValentinaSettings()->GetPathMultisizeMeasurements();
     path = VCommonSettings::PrepareMultisizeTables(path);
-    const QString mPath = QFileDialog::getOpenFileName(this, tr("Open file"), path, filter, nullptr,
-                                                       QFileDialog::DontUseNativeDialog);
+    const QString mPath = QFileDialog::getOpenFileName(this, tr("Open file"), path, filter, nullptr
+#ifdef Q_OS_LINUX
+                                                       , QFileDialog::DontUseNativeDialog
+#endif
+                                                       );
 
     if (not mPath.isEmpty())
     {
@@ -2745,7 +2760,11 @@ bool MainWindow::SaveAs()
 
     QString fileName = QFileDialog::getSaveFileName(this, tr("Save as"),
                                                     dir + QLatin1String("/") + tr("pattern") + QLatin1String(".val"),
-                                                    filters, nullptr, QFileDialog::DontUseNativeDialog);
+                                                    filters, nullptr
+#ifdef Q_OS_LINUX
+                                                    , QFileDialog::DontUseNativeDialog
+#endif
+                                                    );
 
     auto RemoveTempDir = [usedNotExistedDir, dir]()
     {
@@ -2936,8 +2955,11 @@ void MainWindow::Open()
         dir = QFileInfo(files.first()).absolutePath();
     }
     qCDebug(vMainWindow, "Run QFileDialog::getOpenFileName: dir = %s.", qUtf8Printable(dir));
-    const QString filePath = QFileDialog::getOpenFileName(this, tr("Open file"), dir, filter, nullptr,
-                                                          QFileDialog::DontUseNativeDialog);
+    const QString filePath = QFileDialog::getOpenFileName(this, tr("Open file"), dir, filter, nullptr
+#ifdef Q_OS_LINUX
+                                                          , QFileDialog::DontUseNativeDialog
+#endif
+                                                          );
     if (filePath.isEmpty())
     {
         return;
@@ -4270,19 +4292,19 @@ void MainWindow::CreateActions()
     connect(ui->actionExit, &QAction::triggered, this, &MainWindow::close);
 
     connect(ui->actionPreferences, &QAction::triggered, this, &MainWindow::Preferences);
-    connect(ui->actionReportBug, &QAction::triggered, this, [this]()
+    connect(ui->actionReportBug, &QAction::triggered, this, []()
     {
         qCDebug(vMainWindow, "Reporting bug");
         QDesktopServices::openUrl(QUrl(QStringLiteral("https://bitbucket.org/dismine/valentina/issues/new")));
     });
 
-    connect(ui->actionWiki, &QAction::triggered, this, [this]()
+    connect(ui->actionWiki, &QAction::triggered, this, []()
     {
         qCDebug(vMainWindow, "Showing online help");
         QDesktopServices::openUrl(QUrl(QStringLiteral("https://wiki.valentinaproject.org/wiki/Main_Page")));
     });
 
-    connect(ui->actionForum, &QAction::triggered, this, [this]()
+    connect(ui->actionForum, &QAction::triggered, this, []()
     {
         qCDebug(vMainWindow, "Opening forum");
         QDesktopServices::openUrl(QUrl(QStringLiteral("http://valentinaproject.forumotion.me/")));
@@ -4635,29 +4657,29 @@ QStringList MainWindow::GetUnlokedRestoreFileList() const
     QStringList files = qApp->ValentinaSettings()->GetRestoreFileList();
     if (files.size() > 0)
     {
-        for (int i = 0; i < files.size(); ++i)
+        for (auto &file : files)
         {
             // Seeking file that realy need reopen
-            VLockGuard<char> tmp(files.at(i));
+            VLockGuard<char> tmp(file);
             if (tmp.IsLocked())
             {
-                restoreFiles.append(files.at(i));
+                restoreFiles.append(file);
             }
         }
 
         // Clearing list after filtering
-        for (int i = 0; i < restoreFiles.size(); ++i)
+        for (auto &file : restoreFiles)
         {
-            files.removeAll(restoreFiles.at(i));
+            files.removeAll(file);
         }
 
         // Clear all files that do not exist.
         QStringList filtered;
-        for (int i = 0; i < files.size(); ++i)
+        for (auto &file : files)
         {
-            if (QFileInfo::exists(files.at(i)))
+            if (QFileInfo::exists(file))
             {
-                filtered.append(files.at(i));
+                filtered.append(file);
             }
         }
 
@@ -4863,21 +4885,21 @@ void MainWindow::ReopenFilesAfterCrash(QStringList &args)
             {
                 qCDebug(vMainWindow, "User said Yes.");
 
-                for (int i = 0; i < restoreFiles.size(); ++i)
+                for (auto &file : restoreFiles)
                 {
                     QString error;
-                    if (VDomDocument::SafeCopy(restoreFiles.at(i) + *autosavePrefix, restoreFiles.at(i), error))
+                    if (VDomDocument::SafeCopy(file + *autosavePrefix, file, error))
                     {
-                        QFile autoFile(restoreFiles.at(i) + *autosavePrefix);
+                        QFile autoFile(file + *autosavePrefix);
                         autoFile.remove();
-                        LoadPattern(restoreFiles.at(i));
-                        args.removeAll(restoreFiles.at(i));// Do not open file twice after we restore him.
+                        LoadPattern(file);
+                        args.removeAll(file);// Do not open file twice after we restore him.
                     }
                     else
                     {
                         qCDebug(vMainWindow, "Could not copy %s%s to %s %s",
-                                qUtf8Printable(restoreFiles.at(i)), qUtf8Printable(*autosavePrefix),
-                                qUtf8Printable(restoreFiles.at(i)), qUtf8Printable(error));
+                                qUtf8Printable(file), qUtf8Printable(*autosavePrefix),
+                                qUtf8Printable(file), qUtf8Printable(error));
                     }
                 }
             }
@@ -5380,9 +5402,9 @@ void MainWindow::ProcessCMD()
     {
         ReopenFilesAfterCrash(args);
 
-        for (int i=0, sz = args.size(); i < sz; ++i)
+        for (auto &arg : args)
         {
-            LoadPattern(args.at(i));
+            LoadPattern(arg);
         }
     }
     else
diff --git a/src/app/valentina/mainwindowsnogui.cpp b/src/app/valentina/mainwindowsnogui.cpp
index a3cdf3d29..06f913970 100644
--- a/src/app/valentina/mainwindowsnogui.cpp
+++ b/src/app/valentina/mainwindowsnogui.cpp
@@ -372,9 +372,8 @@ void MainWindowsNoGUI::ExportDetailsAsFlatLayout(const QVector<VLayoutPiece> &li
     QScopedPointer<QGraphicsScene> scene(new QGraphicsScene());
 
     QList<QGraphicsItem *> list;
-    for (int i=0; i < listDetails.count(); ++i)
+    for (auto piece : listDetails)
     {
-        VLayoutPiece piece = listDetails.at(i);
         QGraphicsItem *item = piece.GetItem(m_dialogSaveLayout->IsTextAsPaths());
         qreal diff = 0;
         if (piece.IsForceFlipping())
@@ -396,9 +395,9 @@ void MainWindowsNoGUI::ExportDetailsAsFlatLayout(const QVector<VLayoutPiece> &li
         list.append(item);
     }
 
-    for (int i=0; i < list.size(); ++i)
+    for (auto item : list)
     {
-        scene->addItem(list.at(i));
+        scene->addItem(item);
     }
 
     QList<QGraphicsItem *> papers;// Blank sheets
@@ -410,9 +409,9 @@ void MainWindowsNoGUI::ExportDetailsAsFlatLayout(const QVector<VLayoutPiece> &li
     QTransform matrix;
     matrix = matrix.translate(-mx, -my);
 
-    for (int i=0; i < list.size(); ++i)
+    for (auto item : list)
     {
-        list.at(i)->setTransform(matrix);
+        item->setTransform(matrix);
     }
 
     rect = scene->itemsBoundingRect().toRect();
@@ -537,9 +536,9 @@ void MainWindowsNoGUI::ExportDetailsAsApparelLayout(QVector<VLayoutPiece> listDe
         list.append(item);
     }
 
-    for (int i=0; i < list.size(); ++i)
+    for (auto item : list)
     {
-        scene->addItem(list.at(i));
+        scene->addItem(item);
     }
 
     QRect rect = scene->itemsBoundingRect().toRect();
@@ -550,9 +549,9 @@ void MainWindowsNoGUI::ExportDetailsAsApparelLayout(QVector<VLayoutPiece> listDe
     QTransform matrix;
     matrix = matrix.translate(-mx, -my);
 
-    for (int i=0; i < list.size(); ++i)
+    for (auto item : list)
     {
-        list.at(i)->setTransform(matrix);
+        item->setTransform(matrix);
     }
 
     rect = scene->itemsBoundingRect().toRect();
@@ -853,11 +852,10 @@ QList<QGraphicsItem *> MainWindowsNoGUI::CreateShadows(const QList<QGraphicsItem
 {
     QList<QGraphicsItem *> shadows;
 
-    for (int i=0; i< papers.size(); ++i)
+    for (auto paper : papers)
     {
         qreal x1=0, y1=0, x2=0, y2=0;
-        QGraphicsRectItem *item = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(i));
-        if (item)
+        if (QGraphicsRectItem *item = qgraphicsitem_cast<QGraphicsRectItem *>(paper))
         {
             item->rect().getCoords(&x1, &y1, &x2, &y2);
             QGraphicsRectItem *shadowPaper = new QGraphicsRectItem(QRectF(x1+4, y1+4, x2+4, y2+4));
@@ -886,10 +884,10 @@ QList<QGraphicsScene *> MainWindowsNoGUI::CreateScenes(const QList<QGraphicsItem
         scene->addItem(shadows.at(i));
         scene->addItem(papers.at(i));
 
-        QList<QGraphicsItem *> paperDetails = details.at(i);
-        for (int i=0; i < paperDetails.size(); ++i)
+        const QList<QGraphicsItem *> paperDetails = details.at(i);
+        for (auto &detail : paperDetails)
         {
-            scene->addItem(paperDetails.at(i));
+            scene->addItem(detail);
         }
 
         scenes.append(scene);
@@ -1182,18 +1180,16 @@ void MainWindowsNoGUI::RestorePaper(int index) const
 void MainWindowsNoGUI::PrepareTextForDXF(const QString &placeholder,
                                          const QList<QList<QGraphicsItem *> > &details) const
 {
-    for (int i = 0; i < details.size(); ++i)
+    for (auto &paperItems : details)
     {
-        const QList<QGraphicsItem *> &paperItems = details.at(i);
-        for (int j = 0; j < paperItems.size(); ++j)
+        for (auto item : paperItems)
         {
-            QList<QGraphicsItem *> pieceChildren = paperItems.at(j)->childItems();
-            for (int k = 0; k < pieceChildren.size(); ++k)
+            QList<QGraphicsItem *> pieceChildren = item->childItems();
+            for (auto child : pieceChildren)
             {
-                QGraphicsItem *item = pieceChildren.at(k);
-                if (item->type() == QGraphicsSimpleTextItem::Type)
+                if (child->type() == QGraphicsSimpleTextItem::Type)
                 {
-                    if(QGraphicsSimpleTextItem *textItem = qgraphicsitem_cast<QGraphicsSimpleTextItem *>(item))
+                    if(QGraphicsSimpleTextItem *textItem = qgraphicsitem_cast<QGraphicsSimpleTextItem *>(child))
                     {
                         textItem->setText(textItem->text() + placeholder);
                     }
@@ -1215,18 +1211,16 @@ void MainWindowsNoGUI::PrepareTextForDXF(const QString &placeholder,
 void MainWindowsNoGUI::RestoreTextAfterDXF(const QString &placeholder,
                                            const QList<QList<QGraphicsItem *> > &details) const
 {
-    for (int i = 0; i < details.size(); ++i)
+    for (auto &paperItems : details)
     {
-        const QList<QGraphicsItem *> &paperItems = details.at(i);
-        for (int j = 0; j < paperItems.size(); ++j)
+        for (auto item : paperItems)
         {
-            QList<QGraphicsItem *> pieceChildren = paperItems.at(i)->childItems();
-            for (int k = 0; k < pieceChildren.size(); ++k)
+            QList<QGraphicsItem *> pieceChildren = item->childItems();
+            for (auto child : pieceChildren)
             {
-                QGraphicsItem *item = pieceChildren.at(k);
-                if (item->type() == QGraphicsSimpleTextItem::Type)
+                if (child->type() == QGraphicsSimpleTextItem::Type)
                 {
-                    if(QGraphicsSimpleTextItem *textItem = qgraphicsitem_cast<QGraphicsSimpleTextItem *>(item))
+                    if(QGraphicsSimpleTextItem *textItem = qgraphicsitem_cast<QGraphicsSimpleTextItem *>(child))
                     {
                         QString text = textItem->text();
                         text.replace(placeholder, QString());
@@ -1432,8 +1426,7 @@ bool MainWindowsNoGUI::IsLayoutGrayscale() const
 
     for (int i=0; i < scenes.size(); ++i)
     {
-        auto *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(i));
-        if (paper)
+        if (auto *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(i)))
         {
             // Hide shadow and paper border
             PreparePaper(i);
@@ -1513,9 +1506,9 @@ bool MainWindowsNoGUI::isPagesUniform() const
     {
         auto *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(0));
         SCASSERT(paper != nullptr)
-        for (int i=1; i < papers.size(); ++i)
+        for (auto paperItem : papers)
         {
-            auto *p = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(i));
+            auto *p = qgraphicsitem_cast<QGraphicsRectItem *>(paperItem);
             SCASSERT(p != nullptr)
             if (paper->rect() != p->rect())
             {
diff --git a/src/libs/ifc/ifcdef.cpp b/src/libs/ifc/ifcdef.cpp
index 40117e24d..11e0d788b 100644
--- a/src/libs/ifc/ifcdef.cpp
+++ b/src/libs/ifc/ifcdef.cpp
@@ -209,9 +209,9 @@ QMap<QString, QIcon> LineStylesPics()
     QMap<QString, QIcon> map;
     const QStringList styles = StylesList();
 
-    for (int i=0; i < styles.size(); ++i)
+    for (auto &s : styles)
     {
-        const Qt::PenStyle style = LineStyleToPenStyle(styles.at(i));
+        const Qt::PenStyle style = LineStyleToPenStyle(s);
         QPixmap pix(80, 14);
         pix.fill(Qt::white);
 
@@ -222,7 +222,7 @@ QMap<QString, QIcon> LineStylesPics()
         painter.setPen(pen);
         painter.drawLine(2, 7, 78, 7);
 
-        map.insert(styles.at(i), QIcon(pix));
+        map.insert(s, QIcon(pix));
     }
     return map;
 }
diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp
index 9968a652f..fa2d054c0 100644
--- a/src/libs/ifc/xml/vabstractpattern.cpp
+++ b/src/libs/ifc/xml/vabstractpattern.cpp
@@ -260,7 +260,7 @@ QStringList VAbstractPattern::ListMeasurements() const
     QSet<QString> measurements;
     QSet<QString> others = futureIncrements.result().toSet();
 
-    foreach (const QString &token, tokens)
+    for (const auto &token : tokens)
     {
         if (token == QChar('-') || measurements.contains(token) || others.contains(token))
         {
@@ -2023,13 +2023,13 @@ QVector<VFormulaField> VAbstractPattern::ListFinalMeasurementsExpressions() cons
 //---------------------------------------------------------------------------------------------------------------------
 bool VAbstractPattern::IsVariable(const QString &token) const
 {
-    for (int i = 0; i < builInVariables.size(); ++i)
+    for (auto &var : builInVariables)
     {
-        if (token.indexOf( builInVariables.at(i) ) == 0)
+        if (token.indexOf( var ) == 0)
         {
-            if (builInVariables.at(i) == currentLength || builInVariables.at(i) == currentSeamAllowance)
+            if (var == currentLength || var == currentSeamAllowance)
             {
-                return token == builInVariables.at(i);
+                return token == var;
             }
             else
             {
@@ -2049,9 +2049,9 @@ bool VAbstractPattern::IsVariable(const QString &token) const
 //---------------------------------------------------------------------------------------------------------------------
 bool VAbstractPattern::IsFunction(const QString &token) const
 {
-    for (int i = 0; i < builInFunctions.size(); ++i)
+    for (auto &fn : builInFunctions)
     {
-        if (token.indexOf( builInFunctions.at(i) ) == 0)
+        if (token.indexOf(fn) == 0)
         {
             return true;
         }
@@ -2176,13 +2176,13 @@ void VAbstractPattern::SetFMeasurements(QDomElement &element, const QVector<VFin
 {
     if (not element.isNull())
     {
-        for (int i=0; i < measurements.size(); ++i)
+        for (auto &m : measurements)
         {
             QDomElement tagFMeasurement = createElement(TagFMeasurement);
 
-            SetAttribute(tagFMeasurement, AttrName, measurements.at(i).name);
-            SetAttribute(tagFMeasurement, AttrFormula, measurements.at(i).formula);
-            SetAttribute(tagFMeasurement, AttrDescription, measurements.at(i).description);
+            SetAttribute(tagFMeasurement, AttrName, m.name);
+            SetAttribute(tagFMeasurement, AttrFormula, m.formula);
+            SetAttribute(tagFMeasurement, AttrDescription, m.description);
 
             element.appendChild(tagFMeasurement);
         }
diff --git a/src/libs/ifc/xml/vdomdocument.cpp b/src/libs/ifc/xml/vdomdocument.cpp
index 27fb45606..e6fc3b4e1 100644
--- a/src/libs/ifc/xml/vdomdocument.cpp
+++ b/src/libs/ifc/xml/vdomdocument.cpp
@@ -972,15 +972,15 @@ void VDomDocument::SetLabelTemplate(QDomElement &element, const QVector<VLabelTe
 {
     if (not element.isNull())
     {
-        for (int i=0; i < lines.size(); ++i)
+        for (auto &line : lines)
         {
             QDomElement tagLine = createElement(TagLine);
 
-            SetAttribute(tagLine, AttrText, lines.at(i).line);
-            SetAttribute(tagLine, AttrBold, lines.at(i).bold);
-            SetAttribute(tagLine, AttrItalic, lines.at(i).italic);
-            SetAttribute(tagLine, AttrAlignment, lines.at(i).alignment);
-            SetAttribute(tagLine, AttrFSIncrement, lines.at(i).fontSizeIncrement);
+            SetAttribute(tagLine, AttrText, line.line);
+            SetAttribute(tagLine, AttrBold, line.bold);
+            SetAttribute(tagLine, AttrItalic, line.italic);
+            SetAttribute(tagLine, AttrAlignment, line.alignment);
+            SetAttribute(tagLine, AttrFSIncrement, line.fontSizeIncrement);
 
             element.appendChild(tagLine);
         }
diff --git a/src/libs/ifc/xml/vpatternconverter.cpp b/src/libs/ifc/xml/vpatternconverter.cpp
index 84d627407..16c1f0424 100644
--- a/src/libs/ifc/xml/vpatternconverter.cpp
+++ b/src/libs/ifc/xml/vpatternconverter.cpp
@@ -1677,10 +1677,10 @@ void VPatternConverter::SaveChildrenToolUnionToV0_2_4(quint32 id, const QVector<
 
     QDomElement tagChildren = createElement(*strChildren);
 
-    for (int i=0; i<children.size(); ++i)
+    for (auto child : children)
     {
         QDomElement tagChild = createElement(*strChild);
-        tagChild.appendChild(createTextNode(QString().setNum(children.at(i))));
+        tagChild.appendChild(createTextNode(QString().setNum(child)));
         tagChildren.appendChild(tagChild);
     }
 
@@ -2581,10 +2581,10 @@ void VPatternConverter::TagUnionDetailsToV0_4_0()
 
             RemoveAllChildren(toolDOM);
 
-            for (int i = 0; i < nodes.size(); ++i)
+            for (auto &node : nodes)
             {
                 QDomElement tagDet = createElement(*strDet);
-                tagDet.appendChild(nodes.at(i));
+                tagDet.appendChild(node);
                 toolDOM.appendChild(tagDet);
             }
             toolDOM.appendChild(tagChildrenNodes);
diff --git a/src/libs/ifc/xml/vvitconverter.cpp b/src/libs/ifc/xml/vvitconverter.cpp
index 7dc32b396..f1281ff99 100644
--- a/src/libs/ifc/xml/vvitconverter.cpp
+++ b/src/libs/ifc/xml/vvitconverter.cpp
@@ -201,13 +201,13 @@ void VVITConverter::ConvertMeasurementsToV0_3_0()
 
     const QMultiMap<QString, QString> names = OldNamesToNewNames_InV0_3_0();
     const QList<QString> keys = names.uniqueKeys();
-    for (int i = 0; i < keys.size(); ++i)
+    for (auto &key : keys)
     {
         qreal resValue = 0;
 
         // This has the same effect as a .values(), just isn't as elegant
-        const QList<QString> list = names.values( keys.at(i) );
-        foreach(const QString &val, list )
+        const QList<QString> list = names.values( key );
+        for(const auto &val : list)
         {
             const QDomNodeList nodeList = this->elementsByTagName(val);
             if (nodeList.isEmpty())
@@ -223,7 +223,7 @@ void VVITConverter::ConvertMeasurementsToV0_3_0()
             }
         }
 
-        bm.appendChild(AddMV0_3_0(keys.at(i), resValue));
+        bm.appendChild(AddMV0_3_0(key, resValue));
     }
 
     QDomElement rootElement = this->documentElement();
diff --git a/src/libs/ifc/xml/vvstconverter.cpp b/src/libs/ifc/xml/vvstconverter.cpp
index 0859a7581..c84978e90 100644
--- a/src/libs/ifc/xml/vvstconverter.cpp
+++ b/src/libs/ifc/xml/vvstconverter.cpp
@@ -214,15 +214,15 @@ void VVSTConverter::ConvertMeasurementsToV0_4_0()
 
     const QMultiMap<QString, QString> names = OldNamesToNewNames_InV0_3_0();
     const QList<QString> keys = names.uniqueKeys();
-    for (int i = 0; i < keys.size(); ++i)
+    for (auto &key : keys)
     {
         qreal resValue = 0;
         qreal resSizeIncrease = 0;
         qreal resHeightIncrease = 0;
 
         // This has the same effect as a .values(), just isn't as elegant
-        const QList<QString> list = names.values( keys.at(i) );
-        foreach(const QString &val, list )
+        const QList<QString> list = names.values( key );
+        for(const auto &val : list)
         {
             const QDomNodeList nodeList = this->elementsByTagName(val);
             if (nodeList.isEmpty())
@@ -243,7 +243,7 @@ void VVSTConverter::ConvertMeasurementsToV0_4_0()
             }
         }
 
-        bm.appendChild(AddMV0_4_0(keys.at(i), resValue, resSizeIncrease, resHeightIncrease));
+        bm.appendChild(AddMV0_4_0(key, resValue, resSizeIncrease, resHeightIncrease));
     }
 
     QDomElement rootElement = this->documentElement();
diff --git a/src/libs/qmuparser/qmudef.cpp b/src/libs/qmuparser/qmudef.cpp
index 92eee1476..0233e1d65 100644
--- a/src/libs/qmuparser/qmudef.cpp
+++ b/src/libs/qmuparser/qmudef.cpp
@@ -292,26 +292,26 @@ QString NameRegExp()
         QString decimalPoints;
         QString groupSeparators;
 
-        for(int i = 0; i < allLocales.size(); ++i)
+        for(auto &locale : allLocales)
         {
-            if (not positiveSigns.contains(allLocales.at(i).positiveSign()))
+            if (not positiveSigns.contains(locale.positiveSign()))
             {
-                positiveSigns.append(allLocales.at(i).positiveSign());
+                positiveSigns.append(locale.positiveSign());
             }
 
-            if (not negativeSigns.contains(allLocales.at(i).negativeSign()))
+            if (not negativeSigns.contains(locale.negativeSign()))
             {
-                negativeSigns.append(allLocales.at(i).negativeSign());
+                negativeSigns.append(locale.negativeSign());
             }
 
-            if (not decimalPoints.contains(allLocales.at(i).decimalPoint()))
+            if (not decimalPoints.contains(locale.decimalPoint()))
             {
-                decimalPoints.append(allLocales.at(i).decimalPoint());
+                decimalPoints.append(locale.decimalPoint());
             }
 
-            if (not groupSeparators.contains(allLocales.at(i).groupSeparator()))
+            if (not groupSeparators.contains(locale.groupSeparator()))
             {
-                groupSeparators.append(allLocales.at(i).groupSeparator());
+                groupSeparators.append(locale.groupSeparator());
             }
         }
 
diff --git a/src/libs/qmuparser/qmuformulabase.cpp b/src/libs/qmuparser/qmuformulabase.cpp
index 8d8019fa4..36a2d3fc4 100644
--- a/src/libs/qmuparser/qmuformulabase.cpp
+++ b/src/libs/qmuparser/qmuformulabase.cpp
@@ -145,9 +145,9 @@ void QmuFormulaBase::SetSepForEval()
 void QmuFormulaBase::RemoveAll(QMap<int, QString> &map, const QString &val)
 {
     const QList<int> listKeys = map.keys(val);//Take all keys that contain token.
-    for (int i = 0; i < listKeys.size(); ++i)
+    for (auto key : listKeys)
     {
-        map.remove(listKeys.at(i));
+        map.remove(key);
     }
 }
 
diff --git a/src/libs/vdxf/vdxfengine.cpp b/src/libs/vdxf/vdxfengine.cpp
index 41b6b5e52..493a67423 100644
--- a/src/libs/vdxf/vdxfengine.cpp
+++ b/src/libs/vdxf/vdxfengine.cpp
@@ -143,9 +143,8 @@ void VDxfEngine::drawPath(const QPainterPath &path)
 {
     const QList<QPolygonF> subpaths = path.toSubpathPolygons(matrix);
 
-    for (int j=0; j < subpaths.size(); ++j)
+    for (auto polygon : subpaths)
     {
-        const QPolygonF polygon = subpaths.at(j);
         if (polygon.isEmpty())
         {
             continue;
@@ -166,10 +165,10 @@ void VDxfEngine::drawPath(const QPainterPath &path)
 
             poly->flags |= 0x80; // plinegen
 
-            for (int i=0; i < polygon.count(); ++i)
+            for (auto p : polygon)
             {
-                poly->addVertex(DRW_Vertex2D(FromPixel(polygon.at(i).x(), varInsunits),
-                                             FromPixel(getSize().height() - polygon.at(i).y(), varInsunits), 0));
+                poly->addVertex(DRW_Vertex2D(FromPixel(p.x(), varInsunits),
+                                             FromPixel(getSize().height() - p.y(), varInsunits), 0));
             }
 
             input->AddEntity(poly);
@@ -188,10 +187,10 @@ void VDxfEngine::drawPath(const QPainterPath &path)
 
             poly->flags |= 0x80; // plinegen
 
-            for (int i=0; i < polygon.count(); ++i)
+            for (auto p : polygon)
             {
-                poly->addVertex(DRW_Vertex(FromPixel(polygon.at(i).x(), varInsunits),
-                                           FromPixel(getSize().height() - polygon.at(i).y(), varInsunits), 0, 0));
+                poly->addVertex(DRW_Vertex(FromPixel(p.x(), varInsunits),
+                                           FromPixel(getSize().height() - p.y(), varInsunits), 0, 0));
             }
 
             input->AddEntity(poly);
@@ -622,10 +621,8 @@ bool VDxfEngine::ExportToAAMA(const QVector<VLayoutPiece> &details)
 
     ExportAAMAGlobalText(input, details);
 
-    for(int i = 0; i < details.size(); ++i)
+    for(auto &detail : details)
     {
-        const VLayoutPiece &detail = details.at(i);
-
         dx_ifaceBlock *detailBlock = new dx_ifaceBlock();
 
         QString blockName = detail.GetName();
@@ -683,32 +680,29 @@ void VDxfEngine::ExportAAMADraw(dx_ifaceBlock *detailBlock, const VLayoutPiece &
     if (not detail.IsHideMainPath())
     {
         QVector<QPointF> poly = detail.GetContourPoints();
-        DRW_Entity *e = AAMAPolygon(poly, "8", true);
-        if (e)
+        if (DRW_Entity *e = AAMAPolygon(poly, "8", true))
         {
             detailBlock->ent.push_back(e);
         }
     }
 
-    QVector<QVector<QPointF>> drawIntCut = detail.InternalPathsForCut(false);
-    for(int j = 0; j < drawIntCut.size(); ++j)
+    const QVector<QVector<QPointF>> drawIntCut = detail.InternalPathsForCut(false);
+    for(auto &intCut : drawIntCut)
     {
-        DRW_Entity *e = AAMAPolygon(drawIntCut.at(j), "8", false);
-        if (e)
+        if (DRW_Entity *e = AAMAPolygon(intCut, "8", false))
         {
             detailBlock->ent.push_back(e);
         }
     }
 
     const QVector<VLayoutPlaceLabel> labels = detail.GetPlaceLabels();
-    foreach(const VLayoutPlaceLabel &label, labels)
+    for(auto &label : labels)
     {
         if (label.type != PlaceLabelType::Doubletree && label.type != PlaceLabelType::Button)
         {
-            foreach(const QPolygonF &p, label.shape)
+            for(auto &p : qAsConst(label.shape))
             {
-                DRW_Entity *e = AAMAPolygon(p, "8", false);
-                if (e)
+                if (DRW_Entity *e = AAMAPolygon(p, "8", false))
                 {
                     detailBlock->ent.push_back(e);
                 }
@@ -721,10 +715,9 @@ void VDxfEngine::ExportAAMADraw(dx_ifaceBlock *detailBlock, const VLayoutPiece &
 void VDxfEngine::ExportAAMAIntcut(dx_ifaceBlock *detailBlock, const VLayoutPiece &detail)
 {
     QVector<QVector<QPointF>> drawIntCut = detail.InternalPathsForCut(true);
-    for(int j = 0; j < drawIntCut.size(); ++j)
+    for(auto &intCut : drawIntCut)
     {
-        DRW_Entity *e = AAMAPolygon(drawIntCut.at(j), "11", false);
-        if (e)
+        if (DRW_Entity *e = AAMAPolygon(intCut, "11", false))
         {
             detailBlock->ent.push_back(e);
         }
@@ -736,11 +729,10 @@ void VDxfEngine::ExportAAMANotch(dx_ifaceBlock *detailBlock, const VLayoutPiece
 {
     if (detail.IsSeamAllowance())
     {
-        QVector<QLineF> passmarks = detail.GetPassmarks();
-        for(int i = 0; i < passmarks.size(); ++i)
+        const QVector<QLineF> passmarks = detail.GetPassmarks();
+        for(auto passmark : passmarks)
         {
-            DRW_Entity *e = AAMALine(passmarks.at(i), "4");
-            if (e)
+            if (DRW_Entity *e = AAMALine(passmark, "4"))
             {
                 detailBlock->ent.push_back(e);
             }
@@ -754,8 +746,7 @@ void VDxfEngine::ExportAAMAGrainline(dx_ifaceBlock *detailBlock, const VLayoutPi
     const QVector<QPointF> grainline = detail.GetGrainline();
     if (grainline.count() > 1)
     {
-        DRW_Entity *e = AAMALine(QLineF(grainline.first(), grainline.last()), "7");
-        if (e)
+        if (DRW_Entity *e = AAMALine(QLineF(grainline.first(), grainline.last()), "7"))
         {
             detailBlock->ent.push_back(e);
         }
@@ -778,9 +769,9 @@ void VDxfEngine::ExportAAMAText(dx_ifaceBlock *detailBlock, const VLayoutPiece &
 //---------------------------------------------------------------------------------------------------------------------
 void VDxfEngine::ExportAAMAGlobalText(const QSharedPointer<dx_iface> &input, const QVector<VLayoutPiece> &details)
 {
-    for(int i = 0; i < details.size(); ++i)
+    for(auto &detail : details)
     {
-        const QStringList strings = details.at(i).GetPatternText();
+        const QStringList strings = detail.GetPatternText();
         if (not strings.isEmpty())
         {
             for (int j = 0; j < strings.size(); ++j)
@@ -798,7 +789,7 @@ void VDxfEngine::ExportAAMADrill(dx_ifaceBlock *detailBlock, const VLayoutPiece
 {
     const QVector<VLayoutPlaceLabel> labels = detail.GetPlaceLabels();
 
-    foreach(const VLayoutPlaceLabel &label, labels)
+    for(auto &label : labels)
     {
         if (label.type == PlaceLabelType::Doubletree || label.type == PlaceLabelType::Button)
         {
@@ -878,10 +869,10 @@ P *VDxfEngine::CreateAAMAPolygon(const QVector<QPointF> &polygon, const QString
         }
     }
 
-    for (int i=0; i < polygon.count(); ++i)
+    for (auto p : polygon)
     {
-        poly->addVertex(V(FromPixel(polygon.at(i).x(), varInsunits),
-                          FromPixel(getSize().height() - polygon.at(i).y(), varInsunits)));
+        poly->addVertex(V(FromPixel(p.x(), varInsunits),
+                          FromPixel(getSize().height() - p.y(), varInsunits)));
     }
 
     return poly;
diff --git a/src/libs/vformat/vmeasurements.cpp b/src/libs/vformat/vmeasurements.cpp
index c1c4a49a2..316250b50 100644
--- a/src/libs/vformat/vmeasurements.cpp
+++ b/src/libs/vformat/vmeasurements.cpp
@@ -658,13 +658,13 @@ bool VMeasurements::IsDefinedKnownNamesValid() const
     QStringList names = AllGroupNames();
 
     QSet<QString> set;
-    foreach (const QString &var, names)
+    for (const auto &var : names)
     {
         set.insert(var);
     }
 
     names = ListKnown();
-    foreach (const QString &var, names)
+    for (const auto &var : qAsConst(names))
     {
         if (not set.contains(var))
         {
diff --git a/src/libs/vgeometry/vabstractcurve.cpp b/src/libs/vgeometry/vabstractcurve.cpp
index b9186f479..2fe372621 100644
--- a/src/libs/vgeometry/vabstractcurve.cpp
+++ b/src/libs/vgeometry/vabstractcurve.cpp
@@ -376,9 +376,8 @@ QPainterPath VAbstractCurve::ShowDirection(const QVector<DirectionArrow> &arrows
 {
     QPainterPath path;
 
-    for (int i = 0; i < arrows.size(); ++i)
+    for (auto arrow : arrows)
     {
-        const DirectionArrow arrow = arrows.at(i);
         if (not arrow.first.isNull() && not arrow.second.isNull())
         {
             QPainterPath arrowPath;
diff --git a/src/libs/vgeometry/vcubicbezierpath.cpp b/src/libs/vgeometry/vcubicbezierpath.cpp
index ed3b716ff..58d49913c 100644
--- a/src/libs/vgeometry/vcubicbezierpath.cpp
+++ b/src/libs/vgeometry/vcubicbezierpath.cpp
@@ -83,9 +83,9 @@ VCubicBezierPath VCubicBezierPath::Rotate(const QPointF &originPoint, qreal degr
 {
     const QVector<VPointF> points = GetCubicPath();
     VCubicBezierPath curve;
-    for(int i=0; i < points.size(); ++i)
+    for(auto &point : points)
     {
-        curve.append(points.at(i).Rotate(originPoint, degrees));
+        curve.append(point.Rotate(originPoint, degrees));
     }
     curve.setName(name() + prefix);
     curve.SetColor(GetColor());
@@ -99,9 +99,9 @@ VCubicBezierPath VCubicBezierPath::Flip(const QLineF &axis, const QString &prefi
 {
     const QVector<VPointF> points = GetCubicPath();
     VCubicBezierPath curve;
-    for(int i=0; i < points.size(); ++i)
+    for(auto &point : points)
     {
-        curve.append(points.at(i).Flip(axis));
+        curve.append(point.Flip(axis));
     }
     curve.setName(name() + prefix);
     curve.SetColor(GetColor());
@@ -115,9 +115,9 @@ VCubicBezierPath VCubicBezierPath::Move(qreal length, qreal angle, const QString
 {
     const QVector<VPointF> points = GetCubicPath();
     VCubicBezierPath curve;
-    for(int i=0; i < points.size(); ++i)
+    for(auto &point : points)
     {
-        curve.append(points.at(i).Move(length, angle));
+        curve.append(point.Move(length, angle));
     }
     curve.setName(name() + prefix);
     curve.SetColor(GetColor());
diff --git a/src/libs/vgeometry/vspline.cpp b/src/libs/vgeometry/vspline.cpp
index d9ced421d..dc4c7c20b 100644
--- a/src/libs/vgeometry/vspline.cpp
+++ b/src/libs/vgeometry/vspline.cpp
@@ -527,9 +527,8 @@ qreal VSpline::ParamT (const QPointF &pBt) const
 
     // In morst case we will have 6 result in interval [0; 1].
     // Here we try find closest to our point.
-    for (int i=0; i< ts.size(); ++i)
+    for (auto t : qAsConst(ts))
     {
-        const qreal t = ts.at(i);
         const QPointF p0 = static_cast<QPointF>(GetP1());
         const QPointF p1 = static_cast<QPointF>(GetP2());
         const QPointF p2 = static_cast<QPointF>(GetP3());
diff --git a/src/libs/vlayout/vabstractpiece.cpp b/src/libs/vlayout/vabstractpiece.cpp
index a9d3f184e..cd86bfb18 100644
--- a/src/libs/vlayout/vabstractpiece.cpp
+++ b/src/libs/vlayout/vabstractpiece.cpp
@@ -1017,7 +1017,7 @@ bool VAbstractPiece::IsEkvPointOnLine(const VSAPoint &iPoint, const VSAPoint &pr
 QPainterPath VAbstractPiece::PlaceLabelImgPath(const PlaceLabelImg &img)
 {
     QPainterPath path;
-    foreach(const QPolygonF &p, img)
+    for (auto &p : img)
     {
         if (not p.isEmpty())
         {
diff --git a/src/libs/vlayout/vlayoutgenerator.cpp b/src/libs/vlayout/vlayoutgenerator.cpp
index 2ad6d3454..192f4cd88 100644
--- a/src/libs/vlayout/vlayoutgenerator.cpp
+++ b/src/libs/vlayout/vlayoutgenerator.cpp
@@ -208,9 +208,9 @@ LayoutErrors VLayoutGenerator::State() const
 QList<QGraphicsItem *> VLayoutGenerator::GetPapersItems() const
 {
     QList<QGraphicsItem *> list;
-    for (int i=0; i < papers.count(); ++i)
+    for (auto &paper : papers)
     {
-        list.append(papers.at(i).GetPaperItem(autoCrop, IsTestAsPaths()));
+        list.append(paper.GetPaperItem(autoCrop, IsTestAsPaths()));
     }
     return list;
 }
@@ -219,9 +219,9 @@ QList<QGraphicsItem *> VLayoutGenerator::GetPapersItems() const
 QList<QList<QGraphicsItem *> > VLayoutGenerator::GetAllDetailsItems() const
 {
     QList<QList<QGraphicsItem *> > list;
-    for (int i=0; i < papers.count(); ++i)
+    for (auto &paper : papers)
     {
-        list.append(papers.at(i).GetItemDetails(IsTestAsPaths()));
+        list.append(paper.GetItemDetails(IsTestAsPaths()));
     }
     return list;
 }
@@ -230,9 +230,9 @@ QList<QList<QGraphicsItem *> > VLayoutGenerator::GetAllDetailsItems() const
 QVector<QVector<VLayoutPiece> > VLayoutGenerator::GetAllDetails() const
 {
     QVector<QVector<VLayoutPiece> > list;
-    for (int i=0; i < papers.count(); ++i)
+    for (auto &paper : papers)
     {
-        list.append(papers.at(i).GetDetails());
+        list.append(paper.GetDetails());
     }
     return list;
 }
@@ -458,9 +458,8 @@ QList<VLayoutPiece> VLayoutGenerator::MoveDetails(qreal length, const QVector<VL
     }
 
     QList<VLayoutPiece> newDetails;
-    for (int i = 0; i < details.size(); ++i)
+    for (auto d : details)
     {
-        VLayoutPiece d = details.at(i);
         d.Translate(0, length);
         newDetails.append(d);
     }
diff --git a/src/libs/vlayout/vlayoutpaper.cpp b/src/libs/vlayout/vlayoutpaper.cpp
index f90ca628f..57fe0bc48 100644
--- a/src/libs/vlayout/vlayoutpaper.cpp
+++ b/src/libs/vlayout/vlayoutpaper.cpp
@@ -275,9 +275,9 @@ bool VLayoutPaper::AddToSheet(const VLayoutPiece &detail, std::atomic_bool &stop
         return false;
     }
 
-    for (int i=0; i < threads.size(); ++i)
+    for (auto thread : threads)
     {
-        bestResult.NewResult(threads.at(i)->getBestResult());
+        bestResult.NewResult(thread->getBestResult());
     }
 
     qDeleteAll(threads.begin(), threads.end());
@@ -322,9 +322,9 @@ QGraphicsRectItem *VLayoutPaper::GetPaperItem(bool autoCrop, bool textAsPaths) c
     {
         QScopedPointer<QGraphicsScene> scene(new QGraphicsScene());
         QList<QGraphicsItem *> list = GetItemDetails(textAsPaths);
-        for (int i=0; i < list.size(); ++i)
+        for (auto item : list)
         {
-            scene->addItem(list.at(i));
+            scene->addItem(item);
         }
         const int height = scene->itemsBoundingRect().toRect().height();
         if (d->globalContour.GetHeight() > height) //-V807
@@ -349,9 +349,9 @@ QGraphicsRectItem *VLayoutPaper::GetPaperItem(bool autoCrop, bool textAsPaths) c
 QList<QGraphicsItem *> VLayoutPaper::GetItemDetails(bool textAsPaths) const
 {
     QList<QGraphicsItem *> list;
-    for (int i=0; i < d->details.count(); ++i)
+    for (auto &detail : d->details)
     {
-        list.append(d->details.at(i).GetItem(textAsPaths));
+        list.append(detail.GetItem(textAsPaths));
     }
     return list;
 }
@@ -372,9 +372,9 @@ void VLayoutPaper::SetDetails(const QList<VLayoutPiece> &details)
 QRectF VLayoutPaper::DetailsBoundingRect() const
 {
     QRectF rec;
-    for (int i=0; i < d->details.count(); ++i)
+    for (auto &detail : d->details)
     {
-        rec = rec.united(d->details.at(i).DetailBoundingRect());
+        rec = rec.united(detail.DetailBoundingRect());
     }
 
     return rec;
diff --git a/src/libs/vlayout/vlayoutpiece.cpp b/src/libs/vlayout/vlayoutpiece.cpp
index 006ea75c2..b942a069b 100644
--- a/src/libs/vlayout/vlayoutpiece.cpp
+++ b/src/libs/vlayout/vlayoutpiece.cpp
@@ -66,9 +66,9 @@ QVector<VLayoutPiecePath> ConvertInternalPaths(const VPiece &piece, const VConta
 
     QVector<VLayoutPiecePath> paths;
     const QVector<quint32> pathsId = piece.GetInternalPaths();
-    for (int i = 0; i < pathsId.size(); ++i)
+    for (auto id : pathsId)
     {
-        const VPiecePath path = pattern->GetPiecePath(pathsId.at(i));
+        const VPiecePath path = pattern->GetPiecePath(id);
         if (path.GetType() == PiecePathType::InternalPath && path.IsVisible(pattern->DataVariables()))
         {
             paths.append(VLayoutPiecePath(path.PathPoints(pattern), path.IsCutPath(), path.GetPenType()));
@@ -246,28 +246,28 @@ bool IsItemContained(const QRectF &parentBoundingRect, const QVector<QPointF> &s
     // single point differences
     bool bInside = true;
 
-    for (int i = 0; i < shape.size(); ++i)
+    for (auto p : shape)
     {
         qreal dPtX = 0;
         qreal dPtY = 0;
-        if (not parentBoundingRect.contains(shape.at(i)))
+        if (not parentBoundingRect.contains(p))
         {
-            if (shape.at(i).x() < parentBoundingRect.left())
+            if (p.x() < parentBoundingRect.left())
             {
-                dPtX = parentBoundingRect.left() - shape.at(i).x();
+                dPtX = parentBoundingRect.left() - p.x();
             }
-            else if (shape.at(i).x() > parentBoundingRect.right())
+            else if (p.x() > parentBoundingRect.right())
             {
-                dPtX = parentBoundingRect.right() - shape.at(i).x();
+                dPtX = parentBoundingRect.right() - p.x();
             }
 
-            if (shape.at(i).y() < parentBoundingRect.top())
+            if (p.y() < parentBoundingRect.top())
             {
-                dPtY = parentBoundingRect.top() - shape.at(i).y();
+                dPtY = parentBoundingRect.top() - p.y();
             }
-            else if (shape.at(i).y() > parentBoundingRect.bottom())
+            else if (p.y() > parentBoundingRect.bottom())
             {
-                dPtY = parentBoundingRect.bottom() - shape.at(i).y();
+                dPtY = parentBoundingRect.bottom() - p.y();
             }
 
             if (fabs(dPtX) > fabs(dX))
@@ -305,9 +305,9 @@ QVector<QPointF> CorrectPosition(const QRectF &parentBoundingRect, QVector<QPoin
 QVector<VSAPoint> PrepareAllowance(const QVector<QPointF> &points)
 {
     QVector<VSAPoint> allowancePoints;
-    for(int i = 0; i < points.size(); ++i)
+    for(auto point : points)
     {
-        allowancePoints.append(VSAPoint(points.at(i)));
+        allowancePoints.append(VSAPoint(point));
     }
     return allowancePoints;
 }
@@ -348,9 +348,10 @@ QStringList PieceLabelText(const QVector<QPointF> &labelShape, const VTextManage
 QVector<VLayoutPlaceLabel> ConvertPlaceLabels(const VPiece &piece, const VContainer *pattern)
 {
     QVector<VLayoutPlaceLabel> labels;
-    for(int i=0; i < piece.GetPlaceLabels().size(); ++i)
+    const QVector<quint32> placeLabels = piece.GetPlaceLabels();
+    for(auto placeLabel : placeLabels)
     {
-        const auto label = pattern->GeometricObject<VPlaceLabelItem>(piece.GetPlaceLabels().at(i));
+        const auto label = pattern->GeometricObject<VPlaceLabelItem>(placeLabel);
         VLayoutPlaceLabel layoutLabel;
         layoutLabel.shape = label->LabelShape();
         layoutLabel.center = label->toQPointF();
@@ -447,9 +448,9 @@ template <class T>
 QVector<T> VLayoutPiece::Map(const QVector<T> &points) const
 {
     QVector<T> p;
-    for (int i = 0; i < points.size(); ++i)
+    for (auto point : points)
     {
-        p.append(d->matrix.map(points.at(i)));
+        p.append(d->matrix.map(point));
     }
 
     if (d->mirror)
@@ -469,12 +470,12 @@ template <>
 QVector<VLayoutPlaceLabel> VLayoutPiece::Map<VLayoutPlaceLabel>(const QVector<VLayoutPlaceLabel> &points) const
 {
     QVector<VLayoutPlaceLabel> p;
-    foreach (const VLayoutPlaceLabel &label, points)
+    for (auto &label : points)
     {
         VLayoutPlaceLabel mappedLabel;
         mappedLabel.type = label.type;
         mappedLabel.center = d->matrix.map(label.center);
-        foreach (const QPolygonF &p, label.shape)
+        for (const auto &p : label.shape)
         {
             mappedLabel.shape.append(d->matrix.map(p));
         }
@@ -948,11 +949,11 @@ QVector<QVector<QPointF> > VLayoutPiece::InternalPathsForCut(bool cut) const
 {
     QVector<QVector<QPointF> > paths;
 
-    for (int i=0;i < d->m_internalPaths.count(); ++i)
+    for (auto &path : d->m_internalPaths)
     {
-        if (d->m_internalPaths.at(i).IsCutPath() == cut)
+        if (path.IsCutPath() == cut)
         {
-            paths.append(Map(d->m_internalPaths.at(i).Points()));
+            paths.append(Map(path.Points()));
         }
     }
 
@@ -1050,20 +1051,20 @@ QGraphicsItem *VLayoutPiece::GetItem(bool textAsPaths) const
 {
     QGraphicsPathItem *item = GetMainItem();
 
-    for (int i = 0; i < d->m_internalPaths.count(); ++i)
+    for (auto &path : d->m_internalPaths)
     {
         QGraphicsPathItem* pathItem = new QGraphicsPathItem(item);
-        pathItem->setPath(d->matrix.map(d->m_internalPaths.at(i).GetPainterPath()));
+        pathItem->setPath(d->matrix.map(path.GetPainterPath()));
 
         QPen pen = pathItem->pen();
-        pen.setStyle(d->m_internalPaths.at(i).PenStyle());
+        pen.setStyle(path.PenStyle());
         pathItem->setPen(pen);
     }
 
-    for (int i = 0; i < d->m_placeLabels.count(); ++i)
+    for (auto &label : d->m_placeLabels)
     {
         QGraphicsPathItem* pathItem = new QGraphicsPathItem(item);
-        pathItem->setPath(d->matrix.map(PlaceLabelImgPath(d->m_placeLabels.at(i).shape)));
+        pathItem->setPath(d->matrix.map(PlaceLabelImgPath(label.shape)));
     }
 
     CreateLabelStrings(item, d->detailLabel, d->m_tmDetail, textAsPaths);
@@ -1198,9 +1199,9 @@ void VLayoutPiece::CreateGrainlineItem(QGraphicsItem *parent) const
 
     QVector<QPointF> gPoints = GetGrainline();
     path.moveTo(gPoints.at(0));
-    for (int i = 1; i < gPoints.count(); ++i)
+    for (auto p : gPoints)
     {
-        path.lineTo(gPoints.at(i));
+        path.lineTo(p);
     }
     item->setPath(path);
 }
diff --git a/src/libs/vlayout/vposition.cpp b/src/libs/vlayout/vposition.cpp
index 1312a6be8..c8d59617a 100644
--- a/src/libs/vlayout/vposition.cpp
+++ b/src/libs/vlayout/vposition.cpp
@@ -571,9 +571,9 @@ QPainterPath VPosition::DrawDetails(const QVector<VLayoutPiece> &details)
     path.setFillRule(Qt::WindingFill);
     if (details.count() > 0)
     {
-        for (int i = 0; i < details.size(); ++i)
+        for (auto &detail : details)
         {
-            path.addPath(details.at(i).ContourPath());
+            path.addPath(detail.ContourPath());
         }
     }
     return path;
diff --git a/src/libs/vlayout/vtextmanager.cpp b/src/libs/vlayout/vtextmanager.cpp
index 8fadf1fcf..abac50719 100644
--- a/src/libs/vlayout/vtextmanager.cpp
+++ b/src/libs/vlayout/vtextmanager.cpp
@@ -180,16 +180,16 @@ QList<TextLine> PrepareLines(const QVector<VLabelTemplateLine> &lines)
 {
     QList<TextLine> textLines;
 
-    for (int i=0; i < lines.size(); ++i)
+    for (auto &line : lines)
     {
-        if (not lines.at(i).line.isEmpty())
+        if (not line.line.isEmpty())
         {
             TextLine tl;
-            tl.m_qsText = lines.at(i).line;
-            tl.m_eAlign = static_cast<Qt::Alignment>(lines.at(i).alignment);
-            tl.m_iFontSize = lines.at(i).fontSizeIncrement;
-            tl.bold = lines.at(i).bold;
-            tl.italic = lines.at(i).italic;
+            tl.m_qsText = line.line;
+            tl.m_eAlign = static_cast<Qt::Alignment>(line.alignment);
+            tl.m_iFontSize = line.fontSizeIncrement;
+            tl.bold = line.bold;
+            tl.italic = line.italic;
 
             textLines << tl;
         }
diff --git a/src/libs/vmisc/def.cpp b/src/libs/vmisc/def.cpp
index 12a8ab66c..d3f1ef8bc 100644
--- a/src/libs/vmisc/def.cpp
+++ b/src/libs/vmisc/def.cpp
@@ -817,11 +817,9 @@ void InitLanguages(QComboBox *combobox)
     bool englishUS = false;
     const QString en_US = QStringLiteral("en_US");
 
-    for (int i = 0; i < fileNames.size(); ++i)
+    for (auto locale : fileNames)
     {
-        // get locale extracted by filename
-        QString locale;
-        locale = fileNames.at(i);                  // "valentina_de_De.qm"
+        // get locale extracted by filename           "valentina_de_De.qm"
         locale.truncate(locale.lastIndexOf('.'));  // "valentina_de_De"
         locale.remove(0, locale.indexOf('_') + 1); // "de_De"
 
diff --git a/src/libs/vmisc/dialogs/dialogexporttocsv.cpp b/src/libs/vmisc/dialogs/dialogexporttocsv.cpp
index 0aa143f51..1c7761767 100644
--- a/src/libs/vmisc/dialogs/dialogexporttocsv.cpp
+++ b/src/libs/vmisc/dialogs/dialogexporttocsv.cpp
@@ -46,7 +46,8 @@ DialogExportToCSV::DialogExportToCSV(QWidget *parent)
 {
     ui->setupUi(this);
 
-    foreach (int mib, QTextCodec::availableMibs())
+    const QList<int> mibs = QTextCodec::availableMibs();
+    for (auto mib : mibs)
     {
         ui->comboBoxCodec->addItem(QTextCodec::codecForMib(mib)->name(), mib);
     }
diff --git a/src/libs/vmisc/vcommonsettings.cpp b/src/libs/vmisc/vcommonsettings.cpp
index f418ed5b9..e4f83e00f 100644
--- a/src/libs/vmisc/vcommonsettings.cpp
+++ b/src/libs/vmisc/vcommonsettings.cpp
@@ -105,9 +105,9 @@ qreal lineWidthCached = 0;
 //---------------------------------------------------------------------------------------------------------------------
 QStringList ClearFormats(const QStringList &predefinedFormats, QStringList formats)
 {
-    for (int i = 0; i < predefinedFormats.size(); ++i)
+    for (auto &f : predefinedFormats)
     {
-        formats.removeAll(predefinedFormats.at(i));
+        formats.removeAll(f);
     }
     return formats;
 }
@@ -550,11 +550,11 @@ QStringList VCommonSettings::GetRecentFileList() const
     const QStringList files = value(*settingGeneralRecentFileList).toStringList();
     QStringList cleared;
 
-    for (int i = 0; i < files.size(); ++i)
+    for (auto &f : files)
     {
-        if (QFileInfo::exists(files.at(i)))
+        if (QFileInfo::exists(f))
         {
-            cleared.append(files.at(i));
+            cleared.append(f);
         }
     }
 
diff --git a/src/libs/vmisc/vtablesearch.cpp b/src/libs/vmisc/vtablesearch.cpp
index cb9f3658f..f683a2b8b 100644
--- a/src/libs/vmisc/vtablesearch.cpp
+++ b/src/libs/vmisc/vtablesearch.cpp
@@ -105,7 +105,7 @@ void VTableSearch::Find(const QString &term)
 
         if (not searchList.isEmpty())
         {
-            foreach(QTableWidgetItem *item, searchList)
+            for (auto item : qAsConst(searchList))
             {
                 item->setBackground(Qt::yellow);
             }
@@ -158,7 +158,7 @@ void VTableSearch::RemoveRow(int row)
 
     if (row <= indexRow)
     {
-        foreach(QTableWidgetItem *item, searchList)
+        for (auto item : qAsConst(searchList))
         {
             if (item->row() == row)
             {
@@ -180,7 +180,7 @@ void VTableSearch::AddRow(int row)
 
     if (row <= indexRow)
     {
-        foreach(QTableWidgetItem *item, searchList)
+        for (auto item : qAsConst(searchList))
         {
             if (item->row() == row)
             {
@@ -202,7 +202,7 @@ void VTableSearch::RefreshList(const QString &term)
 
     searchList = table->findItems(term, Qt::MatchContains);
 
-    foreach(QTableWidgetItem *item, searchList)
+    for (auto item : qAsConst(searchList))
     {
         item->setBackground(Qt::yellow);
     }
diff --git a/src/libs/vobj/vobjengine.cpp b/src/libs/vobj/vobjengine.cpp
index bdfff6801..3371ee77c 100644
--- a/src/libs/vobj/vobjengine.cpp
+++ b/src/libs/vobj/vobjengine.cpp
@@ -172,12 +172,12 @@ void VObjEngine::drawPath(const QPainterPath &path)
 
     quint32 num_points = 0;
 
-    for (int i=0; i < polygon.count(); i++)
+    for (auto &p : polygon)
     {
         if ( num_points < MAX_POINTS )
         {
-            points[num_points].x = polygon.at(i).x();
-            points[num_points].y = polygon.at(i).y();
+            points[num_points].x = p.x();
+            points[num_points].y = p.y();
             num_points++;
         }
     }
@@ -326,12 +326,12 @@ QPolygonF VObjEngine::MakePointsUnique(const QPolygonF &polygon) const
 {
     QVector<QPointF> set;
     QPolygonF uniquePolygon;
-    for (int i=0; i < polygon.count(); i++)
+    for (auto p : polygon)
     {
-        if (set.contains(polygon.at(i)) == false)
+        if (set.contains(p) == false)
         {
-            set.append(polygon.at(i));
-            uniquePolygon.append(polygon.at(i));
+            set.append(p);
+            uniquePolygon.append(p);
         }
     }
     return uniquePolygon;
diff --git a/src/libs/vpatterndb/measurements.cpp b/src/libs/vpatterndb/measurements.cpp
index 2b3d9e325..9db8acd8d 100644
--- a/src/libs/vpatterndb/measurements.cpp
+++ b/src/libs/vpatterndb/measurements.cpp
@@ -671,9 +671,9 @@ QStringList ListNumbers(const VTranslateMeasurements *trM, const QStringList &li
     SCASSERT(trM != nullptr)
 
     QStringList numbers;
-    for (int i=0; i < listMeasurements.size(); ++i)
+    for (auto &m : listMeasurements)
     {
-        numbers.append(trM->MNumber(listMeasurements.at(i)));
+        numbers.append(trM->MNumber(m));
     }
     return numbers;
 }
diff --git a/src/libs/vpatterndb/pmsystems.cpp b/src/libs/vpatterndb/pmsystems.cpp
index beb52f15a..e53d9c554 100644
--- a/src/libs/vpatterndb/pmsystems.cpp
+++ b/src/libs/vpatterndb/pmsystems.cpp
@@ -159,9 +159,9 @@ void InitPMSystems(QComboBox *systemCombo)
 {
     const QStringList listSystems = ListPMSystems();
     QMap<QString, QString> systems;
-    for (int i = 0; i < listSystems.size()-1; ++i)
+    for (auto &sys : listSystems)
     {
-        systems.insert(qApp->TrVars()->PMSystemName(listSystems.at(i)) + " ("+listSystems.at(i)+")", listSystems.at(i));
+        systems.insert(qApp->TrVars()->PMSystemName(sys) + QLatin1String(" (") + sys + QLatin1String(")"), sys);
     }
 
 // * The default option (blank field or 'None') should appear at the top of the list.
diff --git a/src/libs/vpatterndb/vcontainer.cpp b/src/libs/vpatterndb/vcontainer.cpp
index 1ee71abfd..1d16a0491 100644
--- a/src/libs/vpatterndb/vcontainer.cpp
+++ b/src/libs/vpatterndb/vcontainer.cpp
@@ -591,11 +591,11 @@ void VContainer::ClearUniqueIncrementNames()
     const QList<QString> list = uniqueNames.toList();
     ClearUniqueNames();
 
-    for(int i = 0; i < list.size(); ++i)
+    for(auto &name : list)
     {
-        if (not list.at(i).startsWith('#'))
+        if (not name.startsWith('#'))
         {
-            uniqueNames.insert(list.at(i));
+            uniqueNames.insert(name);
         }
     }
 }
diff --git a/src/libs/vpatterndb/vnodedetail.cpp b/src/libs/vpatterndb/vnodedetail.cpp
index 1d676b532..cad66a5b3 100644
--- a/src/libs/vpatterndb/vnodedetail.cpp
+++ b/src/libs/vpatterndb/vnodedetail.cpp
@@ -224,9 +224,8 @@ QVector<VPieceNode> VNodeDetail::Convert(const VContainer *data, const QVector<V
     }
 
     VPiecePath path;
-    for (int i = 0; i < nodes.size(); ++i)
+    for (auto &node : nodes)
     {
-        const VNodeDetail &node = nodes.at(i);
         path.Append(VPieceNode(node.getId(), node.getTypeTool(), node.getReverse()));
     }
 
diff --git a/src/libs/vpatterndb/vpiece.cpp b/src/libs/vpatterndb/vpiece.cpp
index 3a8dd9c27..522b1c3cb 100644
--- a/src/libs/vpatterndb/vpiece.cpp
+++ b/src/libs/vpatterndb/vpiece.cpp
@@ -256,9 +256,8 @@ bool IsPassmarksPossible(const QVector<VPieceNode> &path)
     int countPointNodes = 0;
     int countOthers = 0;
 
-    for (int i = 0; i< path.size(); ++i)
+    for (auto &node : path)
     {
-        const VPieceNode &node = path.at(i);
         if (node.IsExcluded())
         {
             continue;// skip node
@@ -448,11 +447,11 @@ QVector<QLineF> VPiece::PassmarksLines(const VContainer *data, const QVector<QPo
 QVector<PlaceLabelImg> VPiece::PlaceLabelPoints(const VContainer *data) const
 {
     QVector<PlaceLabelImg> points;
-    for(int i=0; i < d->m_placeLabels.size(); ++i)
+    for(auto placeLabel : d->m_placeLabels)
     {
         try
         {
-            const auto label = data->GeometricObject<VPlaceLabelItem>(d->m_placeLabels.at(i));
+            const auto label = data->GeometricObject<VPlaceLabelItem>(placeLabel);
             points.append(label->LabelShape());
         }
         catch (const VExceptionBadId &e)
@@ -463,10 +462,21 @@ QVector<PlaceLabelImg> VPiece::PlaceLabelPoints(const VContainer *data) const
     return points;
 }
 
+//---------------------------------------------------------------------------------------------------------------------
+QVector<QPainterPath> VPiece::CurvesPainterPath(const VContainer *data) const
+{
+    return GetPath().CurvesPainterPath(data);
+}
+
 //---------------------------------------------------------------------------------------------------------------------
 QPainterPath VPiece::MainPathPath(const VContainer *data) const
 {
-    const QVector<QPointF> points = MainPathPoints(data);
+    return VPiece::MainPathPath(MainPathPoints(data));
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+QPainterPath VPiece::MainPathPath(const QVector<QPointF> &points)
+{
     QPainterPath path;
 
     if (not points.isEmpty())
@@ -670,22 +680,22 @@ QList<quint32> VPiece::Dependencies() const
 {
     QList<quint32> list = d->m_path.Dependencies();
 
-    foreach (const CustomSARecord &record, d->m_customSARecords)
+    for (auto &record : d->m_customSARecords)
     {
         list.append(record.path);
     }
 
-    foreach (const quint32 &value, d->m_internalPaths)
+    for (auto &value : d->m_internalPaths)
     {
         list.append(value);
     }
 
-    foreach (const quint32 &value, d->m_pins)
+    for (auto &value : d->m_pins)
     {
         list.append(value);
     }
 
-    foreach (const quint32 &value, d->m_placeLabels)
+    for (auto &value : d->m_placeLabels)
     {
         list.append(value);
     }
@@ -884,9 +894,8 @@ QVector<VPieceNode> VPiece::GetUnitedPath(const VContainer *data) const
 QVector<CustomSARecord> VPiece::GetValidRecords() const
 {
     QVector<CustomSARecord> records;
-    for (int i = 0; i < d->m_customSARecords.size(); ++i)
+    for (auto &record : d->m_customSARecords)
     {
-        const CustomSARecord &record = d->m_customSARecords.at(i);
         const int indexStartPoint = d->m_path.indexOfNode(record.startPoint);
         const int indexEndPoint = d->m_path.indexOfNode(record.endPoint);
 
@@ -937,13 +946,13 @@ QVector<CustomSARecord> VPiece::FilterRecords(QVector<CustomSARecord> records) c
     records.remove(startIndex);
 
     QVector<CustomSARecord> secondRound;
-    for (int i = 0; i < records.size(); ++i)
+    for (auto &record : records)
     {
-        const int indexStartPoint = d->m_path.indexOfNode(records.at(i).startPoint);
+        const int indexStartPoint = d->m_path.indexOfNode(record.startPoint);
         const int indexEndPoint = d->m_path.indexOfNode(filter.endPoint);
         if (indexStartPoint > indexEndPoint)
         {
-            secondRound.append(records.at(i));
+            secondRound.append(record);
         }
     }
 
@@ -1138,12 +1147,12 @@ bool VPiece::IsPassmarkVisible(const QVector<VPieceNode> &path, int passmarkInde
         return true;
     }
 
-    for (int i = 0; i < records.size(); ++i)
+    for (auto &record : records)
     {
-        if (records.at(i).includeType == PiecePathIncludeType::AsCustomSA)
+        if (record.includeType == PiecePathIncludeType::AsCustomSA)
         {
-            const int indexStartPoint = VPiecePath::indexOfNode(path, records.at(i).startPoint);
-            const int indexEndPoint = VPiecePath::indexOfNode(path, records.at(i).endPoint);
+            const int indexStartPoint = VPiecePath::indexOfNode(path, record.startPoint);
+            const int indexEndPoint = VPiecePath::indexOfNode(path, record.endPoint);
             if (passmarkIndex > indexStartPoint && passmarkIndex < indexEndPoint)
             {
                 return false;
diff --git a/src/libs/vpatterndb/vpiece.h b/src/libs/vpatterndb/vpiece.h
index dbaa7c01b..9ea26cc95 100644
--- a/src/libs/vpatterndb/vpiece.h
+++ b/src/libs/vpatterndb/vpiece.h
@@ -74,7 +74,11 @@ public:
                                           const QVector<QPointF> &seamAllowance = QVector<QPointF>()) const;
     QVector<PlaceLabelImg> PlaceLabelPoints(const VContainer *data) const;
 
-    QPainterPath MainPathPath(const VContainer *data) const;
+    QVector<QPainterPath> CurvesPainterPath(const VContainer *data) const;
+
+    QPainterPath        MainPathPath(const VContainer *data) const;
+    static QPainterPath MainPathPath(const QVector<QPointF> &points);
+
     QPainterPath SeamAllowancePath(const VContainer *data) const;
     QPainterPath SeamAllowancePath(const QVector<QPointF> &points) const;
     QPainterPath PassmarksPath(const VContainer *data,
diff --git a/src/libs/vpatterndb/vpiecepath.cpp b/src/libs/vpatterndb/vpiecepath.cpp
index 24fbd649c..d276c7047 100644
--- a/src/libs/vpatterndb/vpiecepath.cpp
+++ b/src/libs/vpatterndb/vpiecepath.cpp
@@ -128,6 +128,20 @@ int IndexOfNode(const QVector<VPieceNode> &list, quint32 id)
     qDebug()<<"Can't find node.";
     return -1;
 }
+
+//---------------------------------------------------------------------------------------------------------------------
+QPainterPath MakePainterPath(const QVector<QPointF> &points)
+{
+    QPainterPath path;
+
+    if (not points.isEmpty())
+    {
+        path.addPolygon(QPolygonF(points));
+        path.setFillRule(Qt::WindingFill);
+    }
+
+    return path;
+}
 }
 
 //---------------------------------------------------------------------------------------------------------------------
@@ -332,6 +346,41 @@ QVector<VPointF> VPiecePath::PathNodePoints(const VContainer *data, bool showExc
     return points;
 }
 
+//---------------------------------------------------------------------------------------------------------------------
+QVector<QVector<QPointF> > VPiecePath::PathCurvePoints(const VContainer *data) const
+{
+    QVector<QVector<QPointF> > curves;
+    for (int i = 0; i < CountNodes(); ++i)
+    {
+        if (at(i).IsExcluded())
+        {
+            continue;// skip excluded node
+        }
+
+        switch (at(i).GetTypeTool())
+        {
+            case (Tool::NodeArc):
+            case (Tool::NodeElArc):
+            case (Tool::NodeSpline):
+            case (Tool::NodeSplinePath):
+            {
+                const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(at(i).GetId());
+
+                const QPointF begin = StartSegment(data, i, at(i).GetReverse());
+                const QPointF end = EndSegment(data, i, at(i).GetReverse());
+
+                curves.append(curve->GetSegmentPoints(begin, end, at(i).GetReverse()));
+                break;
+            }
+            case (Tool::NodePoint):
+            default:
+                break;
+        }
+    }
+
+    return curves;
+}
+
 //---------------------------------------------------------------------------------------------------------------------
 QVector<VSAPoint> VPiecePath::SeamAllowancePoints(const VContainer *data, qreal width, bool reverse) const
 {
@@ -374,16 +423,20 @@ QVector<VSAPoint> VPiecePath::SeamAllowancePoints(const VContainer *data, qreal
 //---------------------------------------------------------------------------------------------------------------------
 QPainterPath VPiecePath::PainterPath(const VContainer *data) const
 {
-    const QVector<QPointF> points = PathPoints(data);
-    QPainterPath path;
+    return MakePainterPath(PathPoints(data));
+}
 
-    if (not points.isEmpty())
+//---------------------------------------------------------------------------------------------------------------------
+QVector<QPainterPath> VPiecePath::CurvesPainterPath(const VContainer *data) const
+{
+    const QVector<QVector<QPointF> > curves = PathCurvePoints(data);
+    QVector<QPainterPath> paths(curves.size());
+
+    for(auto &curve : curves)
     {
-        path.addPolygon(QPolygonF(points));
-        path.setFillRule(Qt::WindingFill);
+        paths.append(MakePainterPath(curve));
     }
-
-    return path;
+    return paths;
 }
 
 //---------------------------------------------------------------------------------------------------------------------
@@ -452,7 +505,7 @@ VSAPoint VPiecePath::EndSegment(const VContainer *data, const QVector<VPieceNode
 QList<quint32> VPiecePath::Dependencies() const
 {
     QList<quint32> list;
-    foreach (const VPieceNode &node, d->m_nodes)
+    for (auto &node : d->m_nodes)
     {
         list.append(node.GetId());
     }
@@ -528,9 +581,9 @@ void VPiecePath::NodeOnEdge(quint32 index, VPieceNode &p1, VPieceNode &p2) const
 //---------------------------------------------------------------------------------------------------------------------
 bool VPiecePath::Contains(quint32 id) const
 {
-    for (int i = 0; i < d->m_nodes.size(); ++i)
+    for (auto &node : d->m_nodes)
     {
-        if (d->m_nodes.at(i).GetId() == id)
+        if (node.GetId() == id)
         {
             return true;
         }
@@ -623,11 +676,11 @@ int VPiecePath::Edge(quint32 p1, quint32 p2) const
 QVector<VPieceNode> VPiecePath::ListNodePoint() const
 {
     QVector<VPieceNode> list;
-    for (int i = 0; i < d->m_nodes.size(); ++i) //-V807
+    for (auto &node : d->m_nodes) //-V807
     {
-        if (d->m_nodes.at(i).GetTypeTool() == Tool::NodePoint)
+        if (node.GetTypeTool() == Tool::NodePoint)
         {
-            list.append(d->m_nodes.at(i));
+            list.append(node);
         }
     }
     return list;
@@ -942,9 +995,9 @@ QVector<VSAPoint> VPiecePath::CurveSeamAllowanceSegment(const VContainer *data,
     qreal w2 = end.GetSABefore();
     if (w1 < 0 && w2 < 0)
     {// no local widths
-        for(int i = 0; i < points.size(); ++i)
+        for(auto point : points)
         {
-            VSAPoint p(points.at(i));
+            VSAPoint p(point);
             if (i == 0)
             { // first point
                 p.SetSAAfter(begin.GetSAAfter());
@@ -983,9 +1036,9 @@ QVector<VSAPoint> VPiecePath::CurveSeamAllowanceSegment(const VContainer *data,
 
         qreal length = 0; // how much we handle
 
-        for(int i = 1; i < points.size(); ++i)
+        for(auto point : points)
         {
-            p = VSAPoint(points.at(i));
+            p = VSAPoint(point);
 
             if (i == points.size() - 1)
             {// last point
diff --git a/src/libs/vpatterndb/vpiecepath.h b/src/libs/vpatterndb/vpiecepath.h
index 04fbb9b6e..a107a4eeb 100644
--- a/src/libs/vpatterndb/vpiecepath.h
+++ b/src/libs/vpatterndb/vpiecepath.h
@@ -85,11 +85,13 @@ public:
     QString GetVisibilityTrigger() const;
     void    SetVisibilityTrigger(const QString &formula);
 
-    QVector<QPointF>  PathPoints(const VContainer *data) const;
-    QVector<VPointF>  PathNodePoints(const VContainer *data, bool showExcluded = true) const;
-    QVector<VSAPoint> SeamAllowancePoints(const VContainer *data, qreal width, bool reverse) const;
+    QVector<QPointF>          PathPoints(const VContainer *data) const;
+    QVector<VPointF>          PathNodePoints(const VContainer *data, bool showExcluded = true) const;
+    QVector<QVector<QPointF> > PathCurvePoints(const VContainer *data) const;
+    QVector<VSAPoint>         SeamAllowancePoints(const VContainer *data, qreal width, bool reverse) const;
 
-    QPainterPath PainterPath(const VContainer *data) const;
+    QPainterPath          PainterPath(const VContainer *data) const;
+    QVector<QPainterPath> CurvesPainterPath(const VContainer *data) const;
 
     QList<quint32> Dependencies() const;
     QVector<quint32> MissingNodes(const VPiecePath &path) const;
diff --git a/src/libs/vpropertyexplorer/checkablemessagebox.cpp b/src/libs/vpropertyexplorer/checkablemessagebox.cpp
index e8b802a90..9f35b5009 100644
--- a/src/libs/vpropertyexplorer/checkablemessagebox.cpp
+++ b/src/libs/vpropertyexplorer/checkablemessagebox.cpp
@@ -222,7 +222,9 @@ QPushButton *CheckableMessageBox::addButton(const QString &text, QDialogButtonBo
 
 QDialogButtonBox::StandardButton CheckableMessageBox::defaultButton() const
 {
-    foreach (QAbstractButton *b, d->buttonBox->buttons())
+    const QList<QAbstractButton *> buttons = d->buttonBox->buttons();
+    for (auto b : buttons)
+    {
         if (QPushButton *pb = qobject_cast<QPushButton *>(b))
         {
             if (pb->isDefault())
@@ -230,6 +232,7 @@ QDialogButtonBox::StandardButton CheckableMessageBox::defaultButton() const
                return d->buttonBox->standardButton(pb);
             }
         }
+    }
     return QDialogButtonBox::NoButton;
 }
 
@@ -429,7 +432,7 @@ bool CheckableMessageBox::hasSuppressedQuestions(QSettings *settings)
     //Q_ASSERT(settings, return false);
     bool hasSuppressed = false;
     settings->beginGroup(QLatin1String(kDoNotAskAgainKey));
-    foreach (const QString &subKey, settings->childKeys())
+    for (auto &subKey : settings->childKeys())
     {
         if (settings->value(subKey, false).toBool())
         {
diff --git a/src/libs/vpropertyexplorer/plugins/Vector3d/vvector3dproperty.cpp b/src/libs/vpropertyexplorer/plugins/Vector3d/vvector3dproperty.cpp
index 18b2f2290..1eceddbcc 100644
--- a/src/libs/vpropertyexplorer/plugins/Vector3d/vvector3dproperty.cpp
+++ b/src/libs/vpropertyexplorer/plugins/Vector3d/vvector3dproperty.cpp
@@ -115,8 +115,8 @@ VPE::VProperty* VPE::QVector3DProperty::clone(bool include_children, VProperty*
 
         if (!include_children)
         {
-            QList<VProperty*> tmpChildren = container->getChildren();
-            foreach (VProperty* tmpChild, tmpChildren)
+            const QList<VProperty*> &tmpChildren = container->getChildren();
+            for (auto tmpChild : tmpChildren)
             {
                 container->removeChild(tmpChild);
                 delete tmpChild;
diff --git a/src/libs/vpropertyexplorer/plugins/vfilepropertyeditor.cpp b/src/libs/vpropertyexplorer/plugins/vfilepropertyeditor.cpp
index e335f048f..5e4731c4a 100644
--- a/src/libs/vpropertyexplorer/plugins/vfilepropertyeditor.cpp
+++ b/src/libs/vpropertyexplorer/plugins/vfilepropertyeditor.cpp
@@ -113,10 +113,16 @@ void VPE::VFileEditWidget::onToolButtonClicked()
 {
     QString filepath = (Directory ? QFileDialog::getExistingDirectory(nullptr, tr("Directory"), CurrentFilePath,
                                                                       QFileDialog::ShowDirsOnly
-                                                                      | QFileDialog::DontUseNativeDialog)
+#ifdef Q_OS_LINUX
+                                                                      | QFileDialog::DontUseNativeDialog
+#endif
+                                                                      )
                                   : QFileDialog::getOpenFileName(nullptr, tr("Open File"), CurrentFilePath,
-                                                                 FileDialogFilter, nullptr,
-                                                                 QFileDialog::DontUseNativeDialog));
+                                                                 FileDialogFilter, nullptr
+#ifdef Q_OS_LINUX
+                                                                 , QFileDialog::DontUseNativeDialog
+#endif
+                                                                 ));
     if (filepath.isNull() == false)
     {
         setFile(filepath, true);
@@ -245,7 +251,7 @@ bool VPE::VFileEditWidget::checkFileFilter(const QString& file) const
         return false;
     }
 
-    foreach(QString tmpFilter, FilterList)
+    for (auto &tmpFilter : FilterList)
     {
         QRegExp tmpRegExpFilter(tmpFilter, Qt::CaseInsensitive, QRegExp::Wildcard);
         if (tmpRegExpFilter.exactMatch(file))
diff --git a/src/libs/vpropertyexplorer/plugins/vpointfproperty.cpp b/src/libs/vpropertyexplorer/plugins/vpointfproperty.cpp
index 7ca8d3d4d..41cf1ef0f 100644
--- a/src/libs/vpropertyexplorer/plugins/vpointfproperty.cpp
+++ b/src/libs/vpropertyexplorer/plugins/vpointfproperty.cpp
@@ -114,8 +114,8 @@ VPE::VProperty *VPE::VPointFProperty::clone(bool include_children, VProperty *co
 
         if (!include_children)
         {
-            QList<VProperty*> tmpChildren = container->getChildren();
-            foreach(VProperty* tmpChild, tmpChildren)
+            const QList<VProperty*> &tmpChildren = container->getChildren();
+            for(auto tmpChild : tmpChildren)
             {
                 container->removeChild(tmpChild);
                 delete tmpChild;
diff --git a/src/libs/vpropertyexplorer/vproperty.cpp b/src/libs/vpropertyexplorer/vproperty.cpp
index 7dde4ee8c..d215b53cf 100644
--- a/src/libs/vpropertyexplorer/vproperty.cpp
+++ b/src/libs/vpropertyexplorer/vproperty.cpp
@@ -350,9 +350,11 @@ QMap<QString, QVariant> VPE::VProperty::getSettings() const
 {
     QMap<QString, QVariant> tmpResult;
 
-    QStringList tmpKeyList = getSettingKeys();
-    foreach(const QString& tmpKey, tmpKeyList)
+    const QStringList tmpKeyList = getSettingKeys();
+    for(auto &tmpKey : tmpKeyList)
+    {
         tmpResult.insert(tmpKey, getSetting(tmpKey));
+    }
 
     return tmpResult;
 }
@@ -392,8 +394,11 @@ VPE::VProperty* VPE::VProperty::clone(bool include_children, VProperty* containe
 
     if (include_children)
     {
-        foreach(VProperty* tmpChild, d_ptr->Children)
+        const QList<VProperty*> children = d_ptr->Children;
+        for (auto tmpChild : children)
+        {
             container->addChild(tmpChild->clone(true));
+        }
     }
 
     return container;
diff --git a/src/libs/vpropertyexplorer/vpropertyformview.cpp b/src/libs/vpropertyexplorer/vpropertyformview.cpp
index cc67ff2e5..aa35ed96a 100644
--- a/src/libs/vpropertyexplorer/vpropertyformview.cpp
+++ b/src/libs/vpropertyexplorer/vpropertyformview.cpp
@@ -213,9 +213,9 @@ void VPE::VPropertyFormView::connectPropertyFormWidget(VPropertyFormWidget *widg
 
     connect(widget, &VPropertyFormWidget::propertyDataSubmitted, this, &VPropertyFormView::dataSubmitted,
             Qt::UniqueConnection);
-    QList<VPropertyFormWidget*> tmpList = widget->getChildPropertyFormWidgets();
+    const QList<VPropertyFormWidget*> tmpList = widget->getChildPropertyFormWidgets();
 
-    foreach(VPropertyFormWidget* tmpEditorWidget, tmpList)
+    for (auto tmpEditorWidget : tmpList)
     {
         connectPropertyFormWidget(tmpEditorWidget);
     }
diff --git a/src/libs/vpropertyexplorer/vpropertyformwidget.cpp b/src/libs/vpropertyexplorer/vpropertyformwidget.cpp
index b5feaa446..3a502245d 100644
--- a/src/libs/vpropertyexplorer/vpropertyformwidget.cpp
+++ b/src/libs/vpropertyexplorer/vpropertyformwidget.cpp
@@ -103,6 +103,7 @@ void VPE::VPropertyFormWidget::build()
     }
 
     QFormLayout* tmpFormLayout = new QFormLayout(this);
+    tmpFormLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
     setLayout(tmpFormLayout);
 
     for (int i = 0; i < d_ptr->Properties.count(); ++i)
@@ -123,9 +124,11 @@ void VPE::VPropertyFormWidget::build()
                 tmpFormLayout->addRow(group);
 
                 QFormLayout* subFormLayout = new QFormLayout(group);
+                subFormLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
                 QMargins margins = subFormLayout->contentsMargins();
                 margins.setTop(0);
-                margins.setLeft(14);
+                margins.setLeft(18);
+                margins.setRight(0);
                 subFormLayout->setContentsMargins(margins);
 
                 group->setLayout(subFormLayout);
@@ -268,8 +271,8 @@ void VPE::VPropertyFormWidget::setCommitBehaviour(bool auto_commit)
 {
     d_ptr->UpdateEditors = auto_commit;
 
-    QList<VPropertyFormWidget*> tmpChildFormWidgets = getChildPropertyFormWidgets();
-    foreach(VPropertyFormWidget* tmpChild, tmpChildFormWidgets)
+    const QList<VPropertyFormWidget*> tmpChildFormWidgets = getChildPropertyFormWidgets();
+    for (auto tmpChild : tmpChildFormWidgets)
     {
         if (tmpChild)
         {
@@ -281,7 +284,7 @@ void VPE::VPropertyFormWidget::setCommitBehaviour(bool auto_commit)
 QList<VPE::VPropertyFormWidget *> VPE::VPropertyFormWidget::getChildPropertyFormWidgets() const
 {
     QList<VPropertyFormWidget *> tmpResult;
-    foreach(const VPropertyFormWidgetPrivate::SEditorWidget& tmpEditorWidget, d_ptr->EditorWidgets)
+    for (auto &tmpEditorWidget : d_ptr->EditorWidgets)
     {
         if (tmpEditorWidget.FormWidget)
         {
diff --git a/src/libs/vpropertyexplorer/vpropertyset.cpp b/src/libs/vpropertyexplorer/vpropertyset.cpp
index 0a7ca39d8..f1a1ca355 100644
--- a/src/libs/vpropertyexplorer/vpropertyset.cpp
+++ b/src/libs/vpropertyexplorer/vpropertyset.cpp
@@ -204,9 +204,11 @@ VPE::VPropertySet* VPE::VPropertySet::clone() const
 {
     VPropertySet* tmpResult = new VPropertySet();
 
-    foreach(VProperty* tmpProperty, d_ptr->RootProperties)
+    const QList<VProperty*> rootProperties = d_ptr->RootProperties;
+    for (auto tmpProperty : rootProperties)
+    {
         cloneProperty(tmpProperty, nullptr, tmpResult);
-
+    }
 
     return tmpResult;
 }
@@ -219,7 +221,7 @@ bool VPE::VPropertySet::hasProperty(VProperty *property, VProperty *parent) cons
     }
 
     const QList<VProperty*>& tmpChildrenList = (parent != nullptr ? parent->getChildren() : d_ptr->RootProperties);
-    foreach(VProperty* tmpProp, tmpChildrenList)
+    for(auto tmpProp : tmpChildrenList)
     {
         if (tmpProp && (tmpProp == property || hasProperty(property, tmpProp)))
         {
@@ -253,13 +255,17 @@ void VPE::VPropertySet::cloneProperty(VProperty* property_to_clone, VProperty *p
 void VPE::VPropertySet::removePropertyFromSet(VProperty *prop)
 {
     // Remove all the children
-    foreach(VProperty* tmpChild, prop->getChildren())
+    const QList<VPE::VProperty*>& children = prop->getChildren();
+    for (auto tmpChild : children)
+    {
         removeProperty(tmpChild);
+    }
 
-
-    QList<QString> tmpKeys = d_ptr->Properties.keys(prop);
-    foreach(const QString& tmpID, tmpKeys)
+    const QList<QString> tmpKeys = d_ptr->Properties.keys(prop);
+    for (auto &tmpID : tmpKeys)
+    {
         d_ptr->Properties.remove(tmpID);
+    }
 
     // Remove from list
     d_ptr->RootProperties.removeAll(prop);
diff --git a/src/libs/vpropertyexplorer/vserializedproperty.cpp b/src/libs/vpropertyexplorer/vserializedproperty.cpp
index 83361e2ce..0f74672ef 100644
--- a/src/libs/vpropertyexplorer/vserializedproperty.cpp
+++ b/src/libs/vpropertyexplorer/vserializedproperty.cpp
@@ -61,7 +61,7 @@ void VPE::VSerializedProperty::initChildren(const VProperty *property, const VPr
     if (property && set)
     {
         const QList<VProperty*>& tmpChildren = property->getChildren();
-        foreach(const VProperty* tmpChild, tmpChildren)
+        for (auto tmpChild : tmpChildren)
         {
             QString tmpChildID = set->getPropertyID(property);
             Children.append(VSerializedProperty(tmpChild, tmpChildID, set));
diff --git a/src/libs/vtest/abstracttest.cpp b/src/libs/vtest/abstracttest.cpp
index 81560bf62..f815b3d53 100644
--- a/src/libs/vtest/abstracttest.cpp
+++ b/src/libs/vtest/abstracttest.cpp
@@ -163,9 +163,9 @@ bool AbstractTest::CopyRecursively(const QString &srcFilePath, const QString &tg
             return false;
         }
         QDir sourceDir(srcFilePath);
-        QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden |
-                                                    QDir::System);
-        foreach (const QString &fileName, fileNames)
+        const QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot |
+                                                          QDir::Hidden | QDir::System);
+        for (auto &fileName : fileNames)
         {
             const QString newSrcFilePath = srcFilePath + QDir::separator() + fileName;
             const QString newTgtFilePath = tgtFilePath + QDir::separator() + fileName;
diff --git a/src/libs/vtools/dialogs/support/dialogeditlabel.cpp b/src/libs/vtools/dialogs/support/dialogeditlabel.cpp
index f7d948e39..c50881b45 100644
--- a/src/libs/vtools/dialogs/support/dialogeditlabel.cpp
+++ b/src/libs/vtools/dialogs/support/dialogeditlabel.cpp
@@ -291,7 +291,11 @@ void DialogEditLabel::ExportTemplate()
 
     QString fileName = QFileDialog::getSaveFileName(this, tr("Export label template"),
                                                     path + QLatin1String("/") + tr("template") + QLatin1String(".xml"),
-                                                    filters, nullptr, QFileDialog::DontUseNativeDialog);
+                                                    filters, nullptr
+#ifdef Q_OS_LINUX
+                                                    , QFileDialog::DontUseNativeDialog
+#endif
+                                                    );
 
     if (fileName.isEmpty())
     {
@@ -340,8 +344,11 @@ void DialogEditLabel::ImportTemplate()
     QString filter(tr("Label template") + QLatin1String(" (*.xml)"));
     //Use standard path to label templates
     const QString path = VCommonSettings::PrepareLabelTemplates(qApp->Settings()->GetPathLabelTemplate());
-    const QString fileName = QFileDialog::getOpenFileName(this, tr("Import template"), path, filter, nullptr,
-                                                          QFileDialog::DontUseNativeDialog);
+    const QString fileName = QFileDialog::getOpenFileName(this, tr("Import template"), path, filter, nullptr
+#ifdef Q_OS_LINUX
+                                                          , QFileDialog::DontUseNativeDialog
+#endif
+                                                          );
     if (fileName.isEmpty())
     {
         return;
@@ -574,16 +581,16 @@ void DialogEditLabel::SetTemplate(const QVector<VLabelTemplateLine> &lines)
 
     int row = -1;
 
-    for (int i=0; i<lines.size(); ++i)
+    for (auto &line : lines)
     {
-        QListWidgetItem *item = new QListWidgetItem(qApp->TrVars()->PlaceholderToUserText(lines.at(i).line));
-        item->setTextAlignment(lines.at(i).alignment);
-        item->setData(Qt::UserRole, lines.at(i).fontSizeIncrement);
+        QListWidgetItem *item = new QListWidgetItem(qApp->TrVars()->PlaceholderToUserText(line.line));
+        item->setTextAlignment(line.alignment);
+        item->setData(Qt::UserRole, line.fontSizeIncrement);
 
         QFont font = item->font();
-        font.setBold(lines.at(i).bold);
-        font.setItalic(lines.at(i).italic);
-        font.setPointSize(font.pointSize() + lines.at(i).fontSizeIncrement);
+        font.setBold(line.bold);
+        font.setItalic(line.italic);
+        font.setPointSize(font.pointSize() + line.fontSizeIncrement);
         item->setFont(font);
 
         ui->listWidgetEdit->insertItem(++row, item);
@@ -622,16 +629,16 @@ void DialogEditLabel::InitPreviewLines(const QVector<VLabelTemplateLine> &lines)
 
     int row = -1;
 
-    for (int i=0; i<lines.size(); ++i)
+    for (auto &line : lines)
     {
-        QListWidgetItem *item = new QListWidgetItem(ReplacePlaceholders(lines.at(i).line));
-        item->setTextAlignment(lines.at(i).alignment);
-        item->setData(Qt::UserRole, lines.at(i).fontSizeIncrement);
+        QListWidgetItem *item = new QListWidgetItem(ReplacePlaceholders(line.line));
+        item->setTextAlignment(line.alignment);
+        item->setData(Qt::UserRole, line.fontSizeIncrement);
 
         QFont font = item->font();
-        font.setBold(lines.at(i).bold);
-        font.setItalic(lines.at(i).italic);
-        font.setPointSize(font.pointSize() + lines.at(i).fontSizeIncrement);
+        font.setBold(line.bold);
+        font.setItalic(line.italic);
+        font.setPointSize(font.pointSize() + line.fontSizeIncrement);
         item->setFont(font);
 
         ui->listWidgetPreview->insertItem(++row, item);
diff --git a/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp b/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp
index 8b2790822..8ac04c5c2 100644
--- a/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp
+++ b/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp
@@ -254,9 +254,9 @@ void DialogFlippingByAxis::SuffixChanged()
             {
                 QRegularExpression rx(NameRegExp());
                 const QStringList uniqueNames = VContainer::AllUniqueNames();
-                for (int i=0; i < uniqueNames.size(); ++i)
+                for (auto &uniqueName : uniqueNames)
                 {
-                    const QString name = uniqueNames.at(i) + suffix;
+                    const QString name = uniqueName + suffix;
                     if (not rx.match(name).hasMatch() || not data->IsUnique(name))
                     {
                         flagName = false;
diff --git a/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp b/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp
index e2dcef62e..0131c55ff 100644
--- a/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp
+++ b/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp
@@ -281,9 +281,9 @@ void DialogFlippingByLine::SuffixChanged()
             {
                 QRegularExpression rx(NameRegExp());
                 const QStringList uniqueNames = VContainer::AllUniqueNames();
-                for (int i=0; i < uniqueNames.size(); ++i)
+                for (auto &uniqueName : uniqueNames)
                 {
-                    const QString name = uniqueNames.at(i) + suffix;
+                    const QString name = uniqueName + suffix;
                     if (not rx.match(name).hasMatch() || not data->IsUnique(name))
                     {
                         flagName = false;
diff --git a/src/libs/vtools/dialogs/tools/dialogmove.cpp b/src/libs/vtools/dialogs/tools/dialogmove.cpp
index 984f71293..58fcda56f 100644
--- a/src/libs/vtools/dialogs/tools/dialogmove.cpp
+++ b/src/libs/vtools/dialogs/tools/dialogmove.cpp
@@ -474,9 +474,9 @@ void DialogMove::SuffixChanged()
             {
                 QRegularExpression rx(NameRegExp());
                 const QStringList uniqueNames = VContainer::AllUniqueNames();
-                for (int i=0; i < uniqueNames.size(); ++i)
+                for (auto &uniqueName : uniqueNames)
                 {
-                    const QString name = uniqueNames.at(i) + suffix;
+                    const QString name = uniqueName + suffix;
                     if (not rx.match(name).hasMatch() || not data->IsUnique(name))
                     {
                         flagName = false;
diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp
index c0525f9b5..7caafe2d1 100644
--- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp
+++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp
@@ -336,9 +336,9 @@ void DialogRotation::SuffixChanged()
             {
                 QRegularExpression rx(NameRegExp());
                 const QStringList uniqueNames = VContainer::AllUniqueNames();
-                for (int i=0; i < uniqueNames.size(); ++i)
+                for (auto &uniqueName : uniqueNames)
                 {
-                    const QString name = uniqueNames.at(i) + suffix;
+                    const QString name = uniqueName + suffix;
                     if (not rx.match(name).hasMatch() || not data->IsUnique(name))
                     {
                         flagName = false;
diff --git a/src/libs/vtools/dialogs/tools/dialogtool.cpp b/src/libs/vtools/dialogs/tools/dialogtool.cpp
index 4735497c4..d49ce8812 100644
--- a/src/libs/vtools/dialogs/tools/dialogtool.cpp
+++ b/src/libs/vtools/dialogs/tools/dialogtool.cpp
@@ -218,9 +218,9 @@ void DialogTool::FillComboBoxPiecesList(QComboBox *box, const QVector<quint32> &
     SCASSERT(box != nullptr)
     box->blockSignals(true);
     box->clear();
-    for (int i=0; i < list.size(); ++i)
+    for (auto id : list)
     {
-        box->addItem(data->GetPiece(list.at(i)).GetName(), list.at(i));
+        box->addItem(data->GetPiece(id).GetName(), id);
     }
     box->blockSignals(false);
     box->setCurrentIndex(-1); // Force a user to choose
diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp
index e207b2718..8066d8667 100644
--- a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp
+++ b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp
@@ -1022,9 +1022,8 @@ void DialogPiecePath::InitPassmarksList()
 
     const QVector<VPieceNode> nodes = GetListInternals<VPieceNode>(ui->listWidget);
 
-    for (int i = 0; i < nodes.size(); ++i)
+    for (auto &node : nodes)
     {
-        const VPieceNode node = nodes.at(i);
         if (node.GetTypeTool() == Tool::NodePoint && node.IsPassmark())
         {
             const QString name = GetNodeName(node);
diff --git a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp
index 9eb7daa91..b3907c4e1 100644
--- a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp
+++ b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp
@@ -163,11 +163,6 @@ DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, const quint32 &
     flagMainPathIsValid = MainPathIsValid();
     CheckState();
 
-    if (not applyAllowed)
-    {
-        vis = new VisToolPiece(data);
-    }
-
     m_ftb->SetCurrentIndex(TabOrder::Paths);// Show always first tab active on start.
 }
 
@@ -203,6 +198,11 @@ void DialogSeamAllowance::EnableApply(bool enable)
     m_ftb->SetTabEnabled(TabOrder::Grainline, applyAllowed);
     m_ftb->SetTabEnabled(TabOrder::Passmarks, applyAllowed);
     m_ftb->SetTabEnabled(TabOrder::PlaceLabels, applyAllowed);
+
+    if (not applyAllowed && vis.isNull())
+    {
+        vis = new VisToolPiece(data);
+    }
 }
 
 //---------------------------------------------------------------------------------------------------------------------
@@ -223,9 +223,9 @@ void DialogSeamAllowance::SetPiece(const VPiece &piece)
     uiTabPaths->checkBoxHideMainPath->setChecked(piece.IsHideMainPath());
     uiTabPaths->listWidgetCustomSA->blockSignals(true);
     uiTabPaths->listWidgetCustomSA->clear();
-    for (int i = 0; i < piece.GetCustomSARecords().size(); ++i)
+    QVector<CustomSARecord> records = piece.GetCustomSARecords();
+    for (auto record : records)
     {
-        const CustomSARecord &record = piece.GetCustomSARecords().at(i);
         if (record.path > NULL_ID)
         {
             const QString name = GetPathName(record.path, record.reverse);
@@ -240,9 +240,9 @@ void DialogSeamAllowance::SetPiece(const VPiece &piece)
     uiTabPaths->listWidgetCustomSA->blockSignals(false);
 
     uiTabPaths->listWidgetInternalPaths->clear();
-    for (int i = 0; i < piece.GetInternalPaths().size(); ++i)
+    const QVector<quint32> paths = piece.GetInternalPaths();
+    for (auto path : paths)
     {
-        const quint32 path = piece.GetInternalPaths().at(i);
         if (path > NULL_ID)
         {
             const QString name = GetPathName(path);
@@ -277,17 +277,19 @@ void DialogSeamAllowance::SetPiece(const VPiece &piece)
     };
 
     uiTabPins->listWidgetPins->clear();
-    for (int i = 0; i < piece.GetPins().size(); ++i)
+    const QVector<quint32> pins = piece.GetPins();
+    for (auto pin : pins)
     {
-        NewSpecialPoint(uiTabPins->listWidgetPins, piece.GetPins().at(i));
+        NewSpecialPoint(uiTabPins->listWidgetPins, pin);
     }
 
     InitAllPinComboboxes();
 
     uiTabPlaceLabels->listWidgetPlaceLabels->clear();
-    for (int i = 0; i < piece.GetPlaceLabels().size(); ++i)
+    const QVector<quint32> labels = piece.GetPlaceLabels();
+    for (auto label : labels)
     {
-        NewSpecialPoint(uiTabPlaceLabels->listWidgetPlaceLabels, piece.GetPlaceLabels().at(i));
+        NewSpecialPoint(uiTabPlaceLabels->listWidgetPlaceLabels, label);
     }
 
     if (piece.GetPlaceLabels().size() > 0)
@@ -2471,9 +2473,8 @@ void DialogSeamAllowance::InitNodesList()
 
     const QVector<VPieceNode> nodes = GetListInternals<VPieceNode>(uiTabPaths->listWidgetMainPath);
 
-    for (int i = 0; i < nodes.size(); ++i)
+    for (auto &node : nodes)
     {
-        const VPieceNode node = nodes.at(i);
         if (node.GetTypeTool() == Tool::NodePoint && not node.IsExcluded())
         {
             const QString name = GetNodeName(node);
@@ -2505,9 +2506,8 @@ void DialogSeamAllowance::InitPassmarksList()
 
     const QVector<VPieceNode> nodes = GetListInternals<VPieceNode>(uiTabPaths->listWidgetMainPath);
 
-    for (int i = 0; i < nodes.size(); ++i)
+    for (auto &node : nodes)
     {
-        const VPieceNode node = nodes.at(i);
         if (node.GetTypeTool() == Tool::NodePoint && node.IsPassmark())
         {
             const QString name = GetNodeName(node);
@@ -2775,9 +2775,8 @@ void DialogSeamAllowance::InitCSAPoint(QComboBox *box)
 
     const QVector<VPieceNode> nodes = GetListInternals<VPieceNode>(uiTabPaths->listWidgetMainPath);
 
-    for (int i = 0; i < nodes.size(); ++i)
+    for (auto &node : nodes)
     {
-        const VPieceNode &node = nodes.at(i);
         if (node.GetTypeTool() == Tool::NodePoint && not node.IsExcluded())
         {
             const QString name = GetNodeName(node);
@@ -2802,10 +2801,9 @@ void DialogSeamAllowance::InitPinPoint(QComboBox *box)
 
     const QVector<quint32> pins = GetListInternals<quint32>(uiTabPins->listWidgetPins);
 
-    for (int i = 0; i < pins.size(); ++i)
+    for (auto pin : pins)
     {
-        const QSharedPointer<VGObject> pin = data->GetGObject(pins.at(i));
-        box->addItem(pin->name(), pins.at(i));
+        box->addItem(data->GetGObject(pin)->name(), pin);
     }
 
     const int index = uiTabPaths->comboBoxNodes->findData(currentId);
@@ -3028,10 +3026,13 @@ void DialogSeamAllowance::SetFormulaSAWidth(const QString &formula)
     }
     uiTabPaths->plainTextEditFormulaWidth->setPlainText(width);
 
-    VisToolPiece *path = qobject_cast<VisToolPiece *>(vis);
-    SCASSERT(path != nullptr)
-    const VPiece p = CreatePiece();
-    path->SetPiece(p);
+    if (not applyAllowed)
+    {
+        VisToolPiece *path = qobject_cast<VisToolPiece *>(vis);
+        SCASSERT(path != nullptr)
+        const VPiece p = CreatePiece();
+        path->SetPiece(p);
+    }
 
     MoveCursorToEnd(uiTabPaths->plainTextEditFormulaWidth);
 }
@@ -3298,9 +3299,9 @@ QString DialogSeamAllowance::GetDefaultPieceName() const
     QList<VPiece> pieces = data->DataPieces()->values();
     QSet<QString> names;
 
-    for (int i = 0; i < pieces.size(); ++i)
+    for (auto &piece : pieces)
     {
-        names.insert(pieces.at(i).GetName());
+        names.insert(piece.GetName());
     }
 
     const QString defName = tr("Detail");
diff --git a/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.cpp b/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.cpp
index fec1953b8..4ca9cfdb4 100644
--- a/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.cpp
+++ b/src/libs/vtools/tools/drawTools/operation/flipping/vabstractflipping.cpp
@@ -55,9 +55,8 @@ void VAbstractFlipping::CreateDestination(VAbstractOperationInitData &initData,
 
         initData.id = VContainer::getNextId();//Just reserve id for tool
 
-        for (int i = 0; i < initData.source.size(); ++i)
+        for (auto idObject : qAsConst(initData.source))
         {
-            const quint32 idObject = initData.source.at(i);
             const QSharedPointer<VGObject> obj = initData.data->GetGObject(idObject);
 
             // This check helps to find missed objects in the switch
diff --git a/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyaxis.cpp b/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyaxis.cpp
index bb1b11022..e9831fc36 100644
--- a/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyaxis.cpp
+++ b/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyaxis.cpp
@@ -130,9 +130,9 @@ VToolFlippingByAxis *VToolFlippingByAxis::Create(VToolFlippingByAxisInitData ini
         InitOperationToolConnections(initData.scene, tool);
         VAbstractPattern::AddTool(initData.id, tool);
         initData.doc->IncrementReferens(originPoint.getIdTool());
-        for (int i = 0; i < initData.source.size(); ++i)
+        for (auto idObject : qAsConst(initData.source))
         {
-            initData.doc->IncrementReferens(initData.data->GetGObject(initData.source.at(i))->getIdTool());
+            initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
         }
         return tool;
     }
diff --git a/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyline.cpp b/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyline.cpp
index 7167e607e..c1df9ce0a 100644
--- a/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyline.cpp
+++ b/src/libs/vtools/tools/drawTools/operation/flipping/vtoolflippingbyline.cpp
@@ -124,9 +124,9 @@ VToolFlippingByLine *VToolFlippingByLine::Create(VToolFlippingByLineInitData ini
         VAbstractPattern::AddTool(initData.id, tool);
         initData.doc->IncrementReferens(firstPoint.getIdTool());
         initData.doc->IncrementReferens(secondPoint.getIdTool());
-        for (int i = 0; i < initData.source.size(); ++i)
+        for (auto idObject : qAsConst(initData.source))
         {
-            initData.doc->IncrementReferens(initData.data->GetGObject(initData.source.at(i))->getIdTool());
+            initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
         }
         return tool;
     }
diff --git a/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp b/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp
index ce40b422b..478b032af 100644
--- a/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp
+++ b/src/libs/vtools/tools/drawTools/operation/vabstractoperation.cpp
@@ -519,26 +519,26 @@ void VAbstractOperation::SaveSourceDestination(QDomElement &tag)
     doc->RemoveAllChildren(tag);
 
     QDomElement tagObjects = doc->createElement(TagSource);
-    for (int i = 0; i < source.size(); ++i)
+    for (auto id : qAsConst(source))
     {
         QDomElement item = doc->createElement(TagItem);
-        doc->SetAttribute(item, AttrIdObject, source.at(i));
+        doc->SetAttribute(item, AttrIdObject, id);
         tagObjects.appendChild(item);
     }
     tag.appendChild(tagObjects);
 
     tagObjects = doc->createElement(TagDestination);
-    for (int i = 0; i < destination.size(); ++i)
+    for (auto dItem : qAsConst(destination))
     {
         QDomElement item = doc->createElement(TagItem);
-        doc->SetAttribute(item, AttrIdObject, destination.at(i).id);
+        doc->SetAttribute(item, AttrIdObject, dItem.id);
 
-        if (not VFuzzyComparePossibleNulls(destination.at(i).mx, INT_MAX) &&
-            not VFuzzyComparePossibleNulls(destination.at(i).my, INT_MAX))
+        if (not VFuzzyComparePossibleNulls(dItem.mx, INT_MAX) &&
+            not VFuzzyComparePossibleNulls(dItem.my, INT_MAX))
         {
-            doc->SetAttribute(item, AttrMx, qApp->fromPixel(destination.at(i).mx));
-            doc->SetAttribute(item, AttrMy, qApp->fromPixel(destination.at(i).my));
-            doc->SetAttribute<bool>(item, AttrShowLabel, destination.at(i).showLabel);
+            doc->SetAttribute(item, AttrMx, qApp->fromPixel(dItem.mx));
+            doc->SetAttribute(item, AttrMy, qApp->fromPixel(dItem.my));
+            doc->SetAttribute<bool>(item, AttrShowLabel, dItem.showLabel);
         }
 
         tagObjects.appendChild(item);
@@ -609,9 +609,8 @@ void VAbstractOperation::AllowCurveSelecting(bool enabled, GOType type)
 //---------------------------------------------------------------------------------------------------------------------
 void VAbstractOperation::InitOperatedObjects()
 {
-    for (int i = 0; i < destination.size(); ++i)
+    for (auto object : qAsConst(destination))
     {
-        const DestinationItem object = destination.at(i);
         const QSharedPointer<VGObject> obj = VAbstractTool::data.GetGObject(object.id);
 
         // This check helps to find missed objects in the switch
diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolmove.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolmove.cpp
index 6f4d388a5..f2c58688a 100644
--- a/src/libs/vtools/tools/drawTools/operation/vtoolmove.cpp
+++ b/src/libs/vtools/tools/drawTools/operation/vtoolmove.cpp
@@ -82,9 +82,8 @@ QPointF GetOriginPoint(const QVector<quint32> objects, const VContainer *data, q
 {
     QPolygonF originObjects;
 
-    for (int i = 0; i < objects.size(); ++i)
+    for (auto id : objects)
     {
-        const quint32 id = objects.at(i);
         const QSharedPointer<VGObject> obj = data->GetGObject(id);
 
         // This check helps to find missed objects in the switch
@@ -106,7 +105,7 @@ QPointF GetOriginPoint(const QVector<quint32> objects, const VContainer *data, q
                 originObjects.append(data->GeometricObject<VAbstractCurve>(id)->GetPoints());
 #else
                 const QVector<QPointF> points = data->GeometricObject<VAbstractCurve>(id)->GetPoints();
-                foreach (const QPointF &point, points)
+                for (auto &point : points)
                 {
                     originObjects.append(point);
                 }
@@ -200,9 +199,8 @@ VToolMove *VToolMove::Create(VToolMoveInitData &initData)
 
         initData.id = VContainer::getNextId();//Just reserve id for tool
 
-        for (int i = 0; i < initData.source.size(); ++i)
+        for (auto idObject : qAsConst(initData.source))
         {
-            const quint32 idObject = initData.source.at(i);
             const QSharedPointer<VGObject> obj = initData.data->GetGObject(idObject);
 
             // This check helps to find missed objects in the switch
@@ -332,9 +330,9 @@ QT_WARNING_POP
             initData.doc->IncrementReferens(originPoint->getIdTool());
         }
 
-        for (int i = 0; i < initData.source.size(); ++i)
+        for (auto idObject : qAsConst(initData.source))
         {
-            initData.doc->IncrementReferens(initData.data->GetGObject(initData.source.at(i))->getIdTool());
+            initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
         }
         return tool;
     }
diff --git a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp
index a96a8f83f..bf0317612 100644
--- a/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp
+++ b/src/libs/vtools/tools/drawTools/operation/vtoolrotation.cpp
@@ -144,9 +144,8 @@ VToolRotation *VToolRotation::Create(VToolRotationInitData &initData)
 
         initData.id = VContainer::getNextId();//Just reserve id for tool
 
-        for (int i = 0; i < initData.source.size(); ++i)
+        for (auto idObject : qAsConst(initData.source))
         {
-            const quint32 idObject = initData.source.at(i);
             const QSharedPointer<VGObject> obj = initData.data->GetGObject(idObject);
 
             // This check helps to find missed objects in the switch
@@ -259,9 +258,9 @@ QT_WARNING_POP
         InitOperationToolConnections(initData.scene, tool);
         VAbstractPattern::AddTool(initData.id, tool);
         initData.doc->IncrementReferens(originPoint.getIdTool());
-        for (int i = 0; i < initData.source.size(); ++i)
+        for (auto idObject : qAsConst(initData.source))
         {
-            initData.doc->IncrementReferens(initData.data->GetGObject(initData.source.at(i))->getIdTool());
+            initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
         }
         return tool;
     }
diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp
index e0d011c2f..8260beb7d 100644
--- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp
+++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp
@@ -174,7 +174,7 @@ void VAbstractSpline::AllowHover(bool enabled)
     // Manually handle hover events. Need for setting cursor for not selectable paths.
     m_acceptHoverEvents = enabled;
 
-    foreach (auto *point, controlPoints)
+    for (auto point : qAsConst(controlPoints))
     {
         point->setAcceptHoverEvents(enabled);
     }
@@ -185,7 +185,7 @@ void VAbstractSpline::AllowSelecting(bool enabled)
 {
     setFlag(QGraphicsItem::ItemIsSelectable, enabled);
 
-    foreach (auto *point, controlPoints)
+    for (auto point : qAsConst(controlPoints))
     {
         point->setFlag(QGraphicsItem::ItemIsSelectable, enabled);
     }
@@ -424,7 +424,7 @@ void VAbstractSpline::CurveSelected(bool selected)
 {
     setSelected(selected);
 
-    foreach (auto *point, controlPoints)
+    for (auto point : qAsConst(controlPoints))
     {
         point->blockSignals(true);
         point->setSelected(selected);
@@ -442,9 +442,9 @@ void VAbstractSpline::InitDefShape()
 //---------------------------------------------------------------------------------------------------------------------
 void VAbstractSpline::ShowHandles(bool show)
 {
-    for (int i = 0; i < controlPoints.size(); ++i)
+    for (auto point : qAsConst(controlPoints))
     {
-        controlPoints.at(i)->setVisible(show);
+        point->setVisible(show);
     }
     update();// Show direction
 }
diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp
index 13068ea6b..6720c7955 100644
--- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp
+++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolspline.cpp
@@ -294,7 +294,7 @@ void VToolSpline::EnableToolMove(bool move)
 {
     this->setFlag(QGraphicsItem::ItemIsMovable, move);
 
-    foreach (auto *point, controlPoints)
+    for (auto point : qAsConst(controlPoints))
     {
         point->setFlag(QGraphicsItem::ItemIsMovable, move);
     }
@@ -562,7 +562,7 @@ bool VToolSpline::IsMovable() const
 void VToolSpline::RefreshCtrlPoints()
 {
     // Very important to disable control points. Without it the pogram can't move the curve.
-    foreach (auto *point, controlPoints)
+    for (auto point : qAsConst(controlPoints))
     {
         point->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false);
     }
@@ -595,7 +595,7 @@ void VToolSpline::RefreshCtrlPoints()
     controlPoints[0]->blockSignals(false);
     controlPoints[1]->blockSignals(false);
 
-    foreach (auto *point, controlPoints)
+    for (auto point : qAsConst(controlPoints))
     {
         point->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
     }
diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp
index 115b415d4..ea1c306a0 100644
--- a/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp
+++ b/src/libs/vtools/tools/drawTools/toolcurve/vtoolsplinepath.cpp
@@ -293,7 +293,7 @@ void VToolSplinePath::EnableToolMove(bool move)
 {
     this->setFlag(QGraphicsItem::ItemIsMovable, move);
 
-    foreach (auto *point, controlPoints)
+    for (auto point : qAsConst(controlPoints))
     {
         point->setFlag(QGraphicsItem::ItemIsMovable, move);
     }
@@ -727,7 +727,7 @@ bool VToolSplinePath::IsMovable(int index) const
 void VToolSplinePath::RefreshCtrlPoints()
 {
     // Very important to disable control points. Without it the pogram can't move the curve.
-    foreach (auto *point, controlPoints)
+    for (auto point : qAsConst(controlPoints))
     {
         point->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false);
     }
@@ -765,7 +765,7 @@ void VToolSplinePath::RefreshCtrlPoints()
         controlPoints[j-1]->blockSignals(false);
     }
 
-    foreach (auto *point, controlPoints)
+    for (auto point : qAsConst(controlPoints))
     {
         point->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
     }
diff --git a/src/libs/vtools/tools/vabstracttool.cpp b/src/libs/vtools/tools/vabstracttool.cpp
index b788279a8..efd09b52e 100644
--- a/src/libs/vtools/tools/vabstracttool.cpp
+++ b/src/libs/vtools/tools/vabstracttool.cpp
@@ -411,12 +411,12 @@ void VAbstractTool::ToolCreation(const Source &typeCreation)
 //---------------------------------------------------------------------------------------------------------------------
 VToolRecord VAbstractTool::GetRecord(const quint32 id, const Tool &toolType, VAbstractPattern *doc)
 {
-    QVector<VToolRecord> *history = doc->getHistory();
-    for(int i = 0; i < history->size(); ++i)
+    const QVector<VToolRecord> *history = doc->getHistory();
+    for(auto &record : *history)
     {
-        if (history->at(i).getId() == id && history->at(i).getTypeTool() == toolType)
+        if (record.getId() == id && record.getTypeTool() == toolType)
         {
-            return history->at(i);
+            return record;
         }
     }
     return VToolRecord();
diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp
index e9c0ef4f0..cda38b259 100644
--- a/src/libs/vtools/tools/vtoolseamallowance.cpp
+++ b/src/libs/vtools/tools/vtoolseamallowance.cpp
@@ -300,9 +300,9 @@ void VToolSeamAllowance::AddCSARecords(VAbstractPattern *doc, QDomElement &domEl
     if (records.size() > 0)
     {
         QDomElement csaRecordsElement = doc->createElement(VToolSeamAllowance::TagCSA);
-        for (int i = 0; i < records.size(); ++i)
+        for (auto record : records)
         {
-            AddCSARecord(doc, csaRecordsElement, records.at(i));
+            AddCSARecord(doc, csaRecordsElement, record);
         }
         domElement.appendChild(csaRecordsElement);
     }
@@ -314,10 +314,10 @@ void VToolSeamAllowance::AddInternalPaths(VAbstractPattern *doc, QDomElement &do
     if (paths.size() > 0)
     {
         QDomElement iPathsElement = doc->createElement(VToolSeamAllowance::TagIPaths);
-        for (int i = 0; i < paths.size(); ++i)
+        for (auto path : paths)
         {
             QDomElement recordNode = doc->createElement(VToolSeamAllowance::TagRecord);
-            doc->SetAttribute(recordNode, VAbstractPattern::AttrPath, paths.at(i));
+            doc->SetAttribute(recordNode, VAbstractPattern::AttrPath, path);
             iPathsElement.appendChild(recordNode);
         }
         domElement.appendChild(iPathsElement);
@@ -1240,9 +1240,9 @@ void VToolSeamAllowance::keyReleaseEvent(QKeyEvent *event)
                     {
                         qApp->getUndoStack()->beginMacro(tr("multi deletion"));
 
-                        for(int i=0; i < toolList.size(); ++i)
+                        for(auto tool : toolList)
                         {
-                            toolList.at(i)->RemoveWithConfirm(false);
+                            tool->RemoveWithConfirm(false);
                         }
                     }
                     DeleteToolWithConfirm(false);
@@ -1332,12 +1332,12 @@ void VToolSeamAllowance::UpdateExcludeState()
 //---------------------------------------------------------------------------------------------------------------------
 void VToolSeamAllowance::UpdateInternalPaths()
 {
-    const VPiece detail = VAbstractTool::data.GetPiece(m_id);
-    for (int i = 0; i < detail.GetInternalPaths().size(); ++i)
+    const QVector<quint32> paths = VAbstractTool::data.GetPiece(m_id).GetInternalPaths();
+    for (auto path : paths)
     {
         try
         {
-            if (auto *tool = qobject_cast<VToolPiecePath*>(VAbstractPattern::getTool(detail.GetInternalPaths().at(i))))
+            if (auto *tool = qobject_cast<VToolPiecePath*>(VAbstractPattern::getTool(path)))
             {
                 tool->RefreshGeometry();
             }
@@ -1355,7 +1355,9 @@ void VToolSeamAllowance::RefreshGeometry(bool updateChildren)
     this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false);
 
     const VPiece detail = VAbstractTool::data.GetPiece(m_id);
-    QFuture<QPainterPath > futurePath = QtConcurrent::run(detail, &VPiece::MainPathPath, this->getData());
+    QFuture<QPainterPath > futurePath = QtConcurrent::run(detail,
+                                                          QOverload<const VContainer *>::of(&VPiece::MainPathPath),
+                                                          this->getData());
     QFuture<QVector<QPointF> > futureSeamAllowance;
 
     if (detail.IsSeamAllowance())
@@ -1440,7 +1442,7 @@ void VToolSeamAllowance::SaveDialogChange(const QString &undoText)
     {
         qApp->getUndoStack()->beginMacro(undoText.isEmpty() ? saveCommand->text(): undoText);
 
-        foreach (QUndoCommand* command, undocommands)
+        for (auto command : undocommands)
         {
             qApp->getUndoStack()->push(command);
         }
@@ -1764,18 +1766,20 @@ void VToolSeamAllowance::InitNode(const VPieceNode &node, VMainGraphicsScene *sc
 //---------------------------------------------------------------------------------------------------------------------
 void VToolSeamAllowance::InitCSAPaths(const VPiece &detail) const
 {
-    for (int i = 0; i < detail.GetCustomSARecords().size(); ++i)
+    const QVector<CustomSARecord> records = detail.GetCustomSARecords();
+    for (auto record : records)
     {
-        doc->IncrementReferens(detail.GetCustomSARecords().at(i).path);
+        doc->IncrementReferens(record.path);
     }
 }
 
 //---------------------------------------------------------------------------------------------------------------------
 void VToolSeamAllowance::InitInternalPaths(const VPiece &detail)
 {
-    for (int i = 0; i < detail.GetInternalPaths().size(); ++i)
+    const QVector<quint32> paths = detail.GetInternalPaths();
+    for (auto path : paths)
     {
-        auto *tool = qobject_cast<VToolPiecePath*>(VAbstractPattern::getTool(detail.GetInternalPaths().at(i)));
+        auto *tool = qobject_cast<VToolPiecePath*>(VAbstractPattern::getTool(path));
         SCASSERT(tool != nullptr);
 
         if (tool->parent() != this)
@@ -1784,16 +1788,16 @@ void VToolSeamAllowance::InitInternalPaths(const VPiece &detail)
             tool->SetParentType(ParentType::Item);
         }
         tool->show();
-        doc->IncrementReferens(detail.GetInternalPaths().at(i));
+        doc->IncrementReferens(path);
     }
 }
 
 //---------------------------------------------------------------------------------------------------------------------
 void VToolSeamAllowance::InitSpecialPoints(const QVector<quint32> &points) const
 {
-    for (int i = 0; i < points.size(); ++i)
+    for (auto point : points)
     {
-        doc->IncrementReferens(points.at(i));
+        doc->IncrementReferens(point);
     }
 }
 
@@ -1890,9 +1894,9 @@ QList<VToolSeamAllowance *> VToolSeamAllowance::SelectedTools() const
 
         if (not list.isEmpty())
         {
-            for(int i=0; i < list.size(); ++i)
+            for(auto item : list)
             {
-                VToolSeamAllowance *tool = qgraphicsitem_cast<VToolSeamAllowance *>(list.at(i));
+                VToolSeamAllowance *tool = qgraphicsitem_cast<VToolSeamAllowance *>(item);
                 if (tool != nullptr && tool->getId() != m_id)
                 {
                     tools.append(tool);
@@ -1911,10 +1915,10 @@ void VToolSeamAllowance::AddPointRecords(VAbstractPattern *doc, QDomElement &dom
     if (records.size() > 0)
     {
         QDomElement pinsElement = doc->createElement(tag);
-        for (int i = 0; i < records.size(); ++i)
+        for (auto record : records)
         {
             QDomElement recordNode = doc->createElement(VToolSeamAllowance::TagRecord);
-            recordNode.appendChild(doc->createTextNode(QString().setNum(records.at(i))));
+            recordNode.appendChild(doc->createTextNode(QString().setNum(record)));
             pinsElement.appendChild(recordNode);
         }
         domElement.appendChild(pinsElement);
@@ -2009,9 +2013,8 @@ QVector<CustomSARecord> VToolSeamAllowance::DuplicateCustomSARecords(const QVect
                                                                      const QMap<quint32, quint32> &replacements)
 {
     QVector<CustomSARecord> newRecords;
-    for(int i=0; i < records.size(); ++i)
+    for(auto record : records)
     {
-        CustomSARecord record = records.at(i);
         record.path = DuplicatePiecePath(record.path, initData);
         record.startPoint = replacements.value(record.startPoint, NULL_ID);
         record.endPoint = replacements.value(record.endPoint, NULL_ID);
@@ -2025,9 +2028,9 @@ QVector<quint32> VToolSeamAllowance::DuplicateInternalPaths(const QVector<quint3
                                                             const VToolSeamAllowanceInitData &initData)
 {
     QVector<quint32> newPaths;
-    for(int i=0; i < iPaths.size(); ++i)
+    for(auto iPath : iPaths)
     {
-        newPaths.append(DuplicatePiecePath(iPaths.at(i), initData));
+        newPaths.append(DuplicatePiecePath(iPath, initData));
     }
     return newPaths;
 }
@@ -2037,11 +2040,11 @@ QVector<quint32> VToolSeamAllowance::DuplicatePins(const QVector<quint32> &pins,
                                                    const VToolSeamAllowanceInitData &initData)
 {
     QVector<quint32> newPins;
-    for(int i=0; i < pins.size(); ++i)
+    for(auto p : pins)
     {
-        QSharedPointer<VPointF> pin = initData.data->GeometricObject<VPointF>(pins.at(i));
+        QSharedPointer<VPointF> pin = initData.data->GeometricObject<VPointF>(p);
 
-        VAbstractNode *tool = qobject_cast<VAbstractNode *>(VAbstractPattern::getTool(pins.at(i)));
+        VAbstractNode *tool = qobject_cast<VAbstractNode *>(VAbstractPattern::getTool(p));
         SCASSERT(tool != nullptr)
 
         VToolPinInitData initNodeData;
@@ -2066,10 +2069,10 @@ QVector<quint32> VToolSeamAllowance::DuplicatePlaceLabels(const QVector<quint32>
                                                           const VToolSeamAllowanceInitData &initData)
 {
     QVector<quint32> newPlaceLabels;
-    for(int i=0; i < placeLabels.size(); ++i)
+    for(auto placeLabel : placeLabels)
     {
-        QSharedPointer<VPlaceLabelItem> label = initData.data->GeometricObject<VPlaceLabelItem>(placeLabels.at(i));
-        VAbstractNode *tool = qobject_cast<VAbstractNode *>(VAbstractPattern::getTool(placeLabels.at(i)));
+        QSharedPointer<VPlaceLabelItem> label = initData.data->GeometricObject<VPlaceLabelItem>(placeLabel);
+        VAbstractNode *tool = qobject_cast<VAbstractNode *>(VAbstractPattern::getTool(placeLabel));
         SCASSERT(tool != nullptr)
 
         VToolPlaceLabelInitData initNodeData;
diff --git a/src/libs/vtools/tools/vtooluniondetails.cpp b/src/libs/vtools/tools/vtooluniondetails.cpp
index bf3a395db..214025956 100644
--- a/src/libs/vtools/tools/vtooluniondetails.cpp
+++ b/src/libs/vtools/tools/vtooluniondetails.cpp
@@ -813,10 +813,10 @@ void SaveChildren(VAbstractPattern *doc, quint32 id, QDomElement section, const
 {
     if (children.size() > 0)
     {
-        for (int i=0; i<children.size(); ++i)
+        for (auto child : children)
         {
             QDomElement tagChild = doc->createElement(VToolUnionDetails::TagChild);
-            tagChild.appendChild(doc->createTextNode(QString().setNum(children.at(i))));
+            tagChild.appendChild(doc->createTextNode(QString().setNum(child)));
             section.appendChild(tagChild);
         }
 
@@ -1131,21 +1131,20 @@ void CreateUnitedNodes(VPiece &newDetail, const VPiece &d1, const VPiece &d2, co
     const VPiecePath d1Path = d1.GetPath().RemoveEdge(initData.indexD1);
     const VPiecePath d2Path = d2.GetPath().RemoveEdge(initData.indexD2);
 
-    const QVector<QPair<bool, VPieceNode> > unitedPath = VToolUnionDetails::CalcUnitedPath(d1Path, d2Path,
-                                                                                           initData.indexD2, pRotate);
+    const auto unitedPath = VToolUnionDetails::CalcUnitedPath(d1Path, d2Path, initData.indexD2, pRotate);
 
     QVector<quint32> children;
     VPiecePath newPath;
 
-    for (int i=0; i < unitedPath.size(); ++i)
+    for (auto &path : unitedPath)
     {
-        if (unitedPath.at(i).first)
+        if (path.first)
         {// first piece
-            AddNodeToNewPath(initData, newPath, unitedPath.at(i).second, children, drawName);
+            AddNodeToNewPath(initData, newPath, path.second, children, drawName);
         }
         else
         {// second piece
-            AddNodeToNewPath(initData, newPath, unitedPath.at(i).second, children, drawName, dx, dy, pRotate, angle);
+            AddNodeToNewPath(initData, newPath, path.second, children, drawName, dx, dy, pRotate, angle);
         }
     }
 
@@ -1161,9 +1160,9 @@ void CreateUnitedDetailCSA(VPiece &newDetail, const VPiece &d, QVector<quint32>
                            quint32 pRotate, qreal angle)
 {
     QVector<quint32> nodeChildren;
-    for(int i=0; i < d.GetCustomSARecords().size(); ++i)
+    const QVector<CustomSARecord> records = d.GetCustomSARecords();
+    for(auto record : records)
     {
-        CustomSARecord record = d.GetCustomSARecords().at(i);
         const VPiecePath path = initData.data->GetPiecePath(record.path);
         VPiecePath newPath = path;
         newPath.Clear();//Clear nodes
@@ -1204,9 +1203,10 @@ void CreateUnitedDetailCSA(VPiece &newDetail, const VPiece &d, QVector<quint32>
 void CreateUnitedCSA(VPiece &newDetail, const VPiece &d1, const VPiece &d2, const QString &drawName,
                      const VToolUnionDetailsInitData &initData, qreal dx, qreal dy, quint32 pRotate, qreal angle)
 {
-    for (int i = 0; i < d1.GetCustomSARecords().size(); ++i)
+    const QVector<CustomSARecord> records = d1.GetCustomSARecords();
+    for (auto record : records)
     {
-        newDetail.GetCustomSARecords().append(d1.GetCustomSARecords().at(i));
+        newDetail.GetCustomSARecords().append(record);
     }
 
     QVector<quint32> children;
@@ -1220,9 +1220,10 @@ void CreateUnitedDetailInternalPaths(VPiece &newDetail, const VPiece &d, QVector
                                      qreal dy, quint32 pRotate, qreal angle)
 {
     QVector<quint32> nodeChildren;
-    for(int i=0; i < d.GetInternalPaths().size(); ++i)
+    const QVector<quint32> internalPaths = d.GetInternalPaths();
+    for(auto iPath : internalPaths)
     {
-        const VPiecePath path = initData.data->GetPiecePath(d.GetInternalPaths().at(i));
+        const VPiecePath path = initData.data->GetPiecePath(iPath);
         VPiecePath newPath = path;
         newPath.Clear();//Clear nodes
 
@@ -1263,9 +1264,10 @@ void CreateUnitedInternalPaths(VPiece &newDetail, const VPiece &d1, const VPiece
                                const VToolUnionDetailsInitData &initData, qreal dx, qreal dy, quint32 pRotate,
                                qreal angle)
 {
-    for (int i = 0; i < d1.GetInternalPaths().size(); ++i)
+    const QVector<quint32> paths = d1.GetInternalPaths();
+    for (auto path : paths)
     {
-        newDetail.GetInternalPaths().append(d1.GetInternalPaths().at(i));
+        newDetail.GetInternalPaths().append(path);
     }
 
     QVector<quint32> children;
@@ -1280,9 +1282,10 @@ void CreateUnitedDetailPins(VPiece &newDetail, const VPiece &d, QVector<quint32>
                             quint32 pRotate, qreal angle)
 {
     QVector<quint32> nodeChildren;
-    for(int i=0; i < d.GetPins().size(); ++i)
+    const QVector<quint32> pins = d.GetPins();
+    for(auto pin : pins)
     {
-        const quint32 id = AddPin(d.GetPins().at(i), initData, children, drawName, dx, dy, pRotate, angle);
+        const quint32 id = AddPin(pin, initData, children, drawName, dx, dy, pRotate, angle);
         newDetail.GetPins().append(id);
     }
     children += nodeChildren;
@@ -1294,10 +1297,10 @@ void CreateUnitedDetailPlaceLabels(VPiece &newDetail, const VPiece &d, QVector<q
                                    qreal dy, quint32 pRotate, qreal angle)
 {
     QVector<quint32> nodeChildren;
-    for(int i=0; i < d.GetPlaceLabels().size(); ++i)
+    const QVector<quint32> placeLabels = d.GetPlaceLabels();
+    for(auto placeLabel : placeLabels)
     {
-        const quint32 id = AddPlaceLabel(d.GetPlaceLabels().at(i), initData, children, drawName, dx, dy, pRotate,
-                                         angle);
+        const quint32 id = AddPlaceLabel(placeLabel, initData, children, drawName, dx, dy, pRotate, angle);
         newDetail.GetPlaceLabels().append(id);
     }
     children += nodeChildren;
@@ -1307,9 +1310,10 @@ void CreateUnitedDetailPlaceLabels(VPiece &newDetail, const VPiece &d, QVector<q
 void CreateUnitedPins(VPiece &newDetail, const VPiece &d1, const VPiece &d2, const QString &drawName,
                       const VToolUnionDetailsInitData &initData, qreal dx, qreal dy, quint32 pRotate, qreal angle)
 {
-    for (int i = 0; i < d1.GetPins().size(); ++i)
+    const auto pins = d1.GetPins();
+    for (auto pin : pins)
     {
-        newDetail.GetPins().append(d1.GetPins().at(i));
+        newDetail.GetPins().append(pin);
     }
 
     QVector<quint32> children;
@@ -1322,9 +1326,10 @@ void CreateUnitedPlaceLabels(VPiece &newDetail, const VPiece &d1, const VPiece &
                              const VToolUnionDetailsInitData &initData, qreal dx, qreal dy, quint32 pRotate,
                              qreal angle)
 {
-    for (int i = 0; i < d1.GetPlaceLabels().size(); ++i)
+    const auto labels = d1.GetPlaceLabels();
+    for (auto label : labels)
     {
-        newDetail.GetPlaceLabels().append(d1.GetPlaceLabels().at(i));
+        newDetail.GetPlaceLabels().append(label);
     }
 
     QVector<quint32> children;
@@ -1350,19 +1355,17 @@ void UpdateUnitedNodes(const VToolUnionDetailsInitData &initData, qreal dx, qrea
                           "Time to refactor the code.");
         if (children.size() == countNodeD1 + countNodeD2-1)
         {
-            const QVector<QPair<bool, VPieceNode> > unitedPath = VToolUnionDetails::CalcUnitedPath(d1REPath, d2REPath,
-                                                                                                   initData.indexD2,
-                                                                                                   pRotate);
+            const auto unitedPath = VToolUnionDetails::CalcUnitedPath(d1REPath, d2REPath, initData.indexD2, pRotate);
 
-            for (int i=0; i < unitedPath.size(); ++i)
+            for (auto path : unitedPath)
             {
-                if (unitedPath.at(i).first)
+                if (path.first)
                 {// first piece
-                    UpdatePathNode(initData.data, unitedPath.at(i).second, children);
+                    UpdatePathNode(initData.data, path.second, children);
                 }
                 else
                 {// second piece
-                    UpdatePathNode(initData.data, unitedPath.at(i).second, children, dx, dy, pRotate, angle);
+                    UpdatePathNode(initData.data, path.second, children, dx, dy, pRotate, angle);
                 }
             }
         }
@@ -1400,9 +1403,9 @@ void UpdateUnitedNodes(const VToolUnionDetailsInitData &initData, qreal dx, qrea
 void UpdateUnitedDetailPaths(const VToolUnionDetailsInitData &initData, qreal dx, qreal dy, quint32 pRotate,
                              qreal angle, const QVector<quint32> &records, QVector<quint32> children)
 {
-    for (int i=0; i < records.size(); ++i)
+    for (auto record : records)
     {
-        const VPiecePath path = initData.data->GetPiecePath(records.at(i));
+        const VPiecePath path = initData.data->GetPiecePath(record);
 
         if (initData.version == 1)
         {
@@ -1442,9 +1445,9 @@ void UpdateUnitedDetailCSA(const VToolUnionDetailsInitData &initData, qreal dx,
                            qreal angle, const QVector<CustomSARecord> &records)
 {
     QVector<quint32> idRecords;
-    for (int i = 0; i < records.size(); ++i)
+    for (auto record : records)
     {
-        idRecords.append(records.at(i).path);
+        idRecords.append(record.path);
     }
     UpdateUnitedDetailPaths(initData, dx, dy, pRotate, angle, idRecords, GetCSAChildren(initData.doc, initData.id));
 }
@@ -1463,9 +1466,9 @@ void UpdateUnitedDetailPins(const VToolUnionDetailsInitData &initData, qreal dx,
 {
     QVector<quint32> children = GetPinChildren(initData.doc, initData.id);
 
-    for (int i = 0; i < records.size(); ++i)
+    for (auto record : records)
     {
-        QScopedPointer<VPointF> point(new VPointF(*initData.data->GeometricObject<VPointF>(records.at(i))));
+        QScopedPointer<VPointF> point(new VPointF(*initData.data->GeometricObject<VPointF>(record)));
         point->setMode(Draw::Modeling);
         if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID)
         {
@@ -1482,9 +1485,9 @@ void UpdateUnitedDetailPlaceLabels(const VToolUnionDetailsInitData &initData, qr
 {
     QVector<quint32> children = GetPlaceLabelChildren(initData.doc, initData.id);
 
-    for (int i = 0; i < records.size(); ++i)
+    for (auto record : records)
     {
-        QSharedPointer<VPlaceLabelItem> parentLabel = initData.data->GeometricObject<VPlaceLabelItem>(records.at(i));
+        QSharedPointer<VPlaceLabelItem> parentLabel = initData.data->GeometricObject<VPlaceLabelItem>(record);
         if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID)
         {
             BiasRotatePoint(parentLabel.data(), dx, dy,
@@ -1645,9 +1648,9 @@ void VToolUnionDetails::incrementReferens()
     if (_referens == 1)
     {
         const QVector<quint32> objects = GetReferenceObjects();
-        for(int i = 0; i < objects.size(); ++i)
+        for(auto object : objects)
         {
-            doc->IncrementReferens(objects.at(i));
+            doc->IncrementReferens(object);
         }
 
         QDomElement domElement = doc->elementById(m_id, getTagName());
@@ -1665,9 +1668,9 @@ void VToolUnionDetails::decrementReferens()
     if (_referens == 0)
     {
         const QVector<quint32> objects = GetReferenceObjects();
-        for(int i = 0; i < objects.size(); ++i)
+        for(auto object : objects)
         {
-            doc->DecrementReferens(objects.at(i));
+            doc->DecrementReferens(object);
         }
 
         QDomElement domElement = doc->elementById(m_id, getTagName());
diff --git a/src/libs/vtools/visualization/line/operation/visoperation.cpp b/src/libs/vtools/visualization/line/operation/visoperation.cpp
index 5f60f42bc..2ddec7859 100644
--- a/src/libs/vtools/visualization/line/operation/visoperation.cpp
+++ b/src/libs/vtools/visualization/line/operation/visoperation.cpp
@@ -104,9 +104,8 @@ void VisOperation::RefreshFlippedObjects(const QPointF &firstPoint, const QPoint
 {
     int iPoint = -1;
     int iCurve = -1;
-    for (int i = 0; i < objects.size(); ++i)
+    for (auto id : qAsConst(objects))
     {
-        const quint32 id = objects.at(i);
         const QSharedPointer<VGObject> obj = Visualization::data->GetGObject(id);
 
         // This check helps to find missed objects in the switch
diff --git a/src/libs/vtools/visualization/line/operation/vistoolmove.cpp b/src/libs/vtools/visualization/line/operation/vistoolmove.cpp
index 8a27c9ad7..40dd9cdc5 100644
--- a/src/libs/vtools/visualization/line/operation/vistoolmove.cpp
+++ b/src/libs/vtools/visualization/line/operation/vistoolmove.cpp
@@ -271,9 +271,8 @@ int VisToolMove::AddMovedRotatedCurve(qreal angle, qreal length, quint32 id, int
 QPointF VisToolMove::GetOriginPoint(const QVector<QGraphicsItem *> &objects)
 {
     QRectF boundingRect;
-    for (int i=0; i < objects.size(); ++i)
+    for (auto object : qAsConst(objects))
     {
-        QGraphicsItem *object = objects.at(i);
         if (object)
         {
             QRectF childrenRect = object->childrenBoundingRect();
@@ -300,9 +299,8 @@ QVector<QGraphicsItem *> VisToolMove::CreateOriginObjects(int &iPoint, int &iCur
 {
     QVector<QGraphicsItem *> originObjects;
 
-    for (int i = 0; i < objects.size(); ++i)
+    for (auto id : qAsConst(objects))
     {
-        const quint32 id = objects.at(i);
         const QSharedPointer<VGObject> obj = Visualization::data->GetGObject(id);
 
         // This check helps to find missed objects in the switch
@@ -358,9 +356,8 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default")
 void VisToolMove::CreateMovedRotatedObjects(int &iPoint, int &iCurve, qreal length, qreal angle, qreal rotationAngle,
                                             const QPointF &rotationOrigin)
 {
-    for (int i = 0; i < objects.size(); ++i)
+    for (auto id : qAsConst(objects))
     {
-        const quint32 id = objects.at(i);
         const QSharedPointer<VGObject> obj = Visualization::data->GetGObject(id);
 
         // This check helps to find missed objects in the switch
diff --git a/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp b/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp
index 11f9fa258..c2d33636b 100644
--- a/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp
+++ b/src/libs/vtools/visualization/line/operation/vistoolrotation.cpp
@@ -125,9 +125,8 @@ void VisToolRotation::RefreshGeometry()
 
     int iPoint = -1;
     int iCurve = -1;
-    for (int i = 0; i < objects.size(); ++i)
+    for (auto id : qAsConst(objects))
     {
-        const quint32 id = objects.at(i);
         const QSharedPointer<VGObject> obj = Visualization::data->GetGObject(id);
 
         // This check helps to find missed objects in the switch
diff --git a/src/libs/vtools/visualization/path/vispiecespecialpoints.cpp b/src/libs/vtools/visualization/path/vispiecespecialpoints.cpp
index 78e1b2fb6..99353a129 100644
--- a/src/libs/vtools/visualization/path/vispiecespecialpoints.cpp
+++ b/src/libs/vtools/visualization/path/vispiecespecialpoints.cpp
@@ -87,9 +87,9 @@ VSimplePoint *VisPieceSpecialPoints::GetPoint(quint32 i, const QColor &color)
 //---------------------------------------------------------------------------------------------------------------------
 void VisPieceSpecialPoints::HideAllItems()
 {
-    for (int i=0; i < m_points.size(); ++i)
+    for (auto item : qAsConst(m_points))
     {
-        if (QGraphicsEllipseItem *item = m_points.at(i))
+        if (item)
         {
             item->setVisible(false);
         }
diff --git a/src/libs/vtools/visualization/path/vistoolpiece.cpp b/src/libs/vtools/visualization/path/vistoolpiece.cpp
index 486e5afa3..2065e5ec5 100644
--- a/src/libs/vtools/visualization/path/vistoolpiece.cpp
+++ b/src/libs/vtools/visualization/path/vistoolpiece.cpp
@@ -35,13 +35,15 @@
 VisToolPiece::VisToolPiece(const VContainer *data, QGraphicsItem *parent)
     : VisPath(data, parent),
       m_points(),
+      m_curves(),
       m_line1(nullptr),
       m_line2(nullptr),
       m_piece(),
       m_pieceCached(false),
       m_cachedMainPath(),
       m_cachedNodes(),
-      m_cachedMainPathPoints()
+      m_cachedMainPathPoints(),
+      m_cachedCurvesPath()
 {
     m_line1 = InitItem<VScaledLine>(supportColor, this);
     m_line2 = InitItem<VScaledLine>(supportColor, this);
@@ -56,11 +58,16 @@ void VisToolPiece::RefreshGeometry()
     {
         if (not m_pieceCached)
         {
-            m_cachedMainPath = m_piece.MainPathPath(Visualization::data);
             m_cachedNodes = m_piece.MainPathNodePoints(Visualization::data);
             if (mode == Mode::Creation)
             {
+                m_cachedCurvesPath = m_piece.CurvesPainterPath(Visualization::data);
                 m_cachedMainPathPoints = m_piece.MainPathPoints(Visualization::data);
+                m_cachedMainPath = VPiece::MainPathPath(m_cachedMainPathPoints);
+            }
+            else
+            {
+                m_cachedMainPath = m_piece.MainPathPath(Visualization::data);
             }
             m_pieceCached = true;
         }
@@ -75,6 +82,12 @@ void VisToolPiece::RefreshGeometry()
 
         if (mode == Mode::Creation)
         {
+            for (int i = 0; i < m_cachedCurvesPath.size(); ++i)
+            {
+                VCurvePathItem *path = GetCurve(static_cast<quint32>(i), supportColor);
+                DrawPath(path, m_cachedCurvesPath.at(i), supportColor);
+            }
+
             DrawLine(m_line1, QLineF(m_cachedMainPathPoints.first(), Visualization::scenePos), supportColor,
                      Qt::DashLine);
 
@@ -100,6 +113,12 @@ VScaledEllipse *VisToolPiece::GetPoint(quint32 i, const QColor &color)
     return GetPointItem(m_points, i, color, this);
 }
 
+//---------------------------------------------------------------------------------------------------------------------
+VCurvePathItem *VisToolPiece::GetCurve(quint32 i, const QColor &color)
+{
+    return GetCurveItem(m_curves, i, color, this);
+}
+
 //---------------------------------------------------------------------------------------------------------------------
 void VisToolPiece::HideAllItems()
 {
@@ -113,9 +132,17 @@ void VisToolPiece::HideAllItems()
         m_line2->setVisible(false);
     }
 
-    for (int i=0; i < m_points.size(); ++i)
+    for(QGraphicsEllipseItem *item : qAsConst(m_points))
     {
-        if (QGraphicsEllipseItem *item = m_points.at(i))
+        if (item)
+        {
+            item->setVisible(false);
+        }
+    }
+
+    for(QGraphicsPathItem *item : qAsConst(m_curves))
+    {
+        if (item)
         {
             item->setVisible(false);
         }
diff --git a/src/libs/vtools/visualization/path/vistoolpiece.h b/src/libs/vtools/visualization/path/vistoolpiece.h
index dae2be9a3..39eb52c04 100644
--- a/src/libs/vtools/visualization/path/vistoolpiece.h
+++ b/src/libs/vtools/visualization/path/vistoolpiece.h
@@ -50,6 +50,7 @@ public:
 private:
     Q_DISABLE_COPY(VisToolPiece)
     QVector<VScaledEllipse *> m_points;
+    QVector<VCurvePathItem *> m_curves;
 
     VScaledLine *m_line1;
     VScaledLine *m_line2;
@@ -58,8 +59,10 @@ private:
     QPainterPath m_cachedMainPath;
     QVector<VPointF> m_cachedNodes;
     QVector<QPointF> m_cachedMainPathPoints;
+    QVector<QPainterPath> m_cachedCurvesPath;
 
     VScaledEllipse* GetPoint(quint32 i, const QColor &color);
+    VCurvePathItem *GetCurve(quint32 i, const QColor &color);
 
     void HideAllItems();
 };
diff --git a/src/libs/vtools/visualization/path/vistoolpiecepath.cpp b/src/libs/vtools/visualization/path/vistoolpiecepath.cpp
index 25aa6ab14..9e73cc653 100644
--- a/src/libs/vtools/visualization/path/vistoolpiecepath.cpp
+++ b/src/libs/vtools/visualization/path/vistoolpiecepath.cpp
@@ -99,9 +99,9 @@ void VisToolPiecePath::HideAllItems()
         m_line->setVisible(false);
     }
 
-    for (int i=0; i < m_points.size(); ++i)
+    for (auto item : qAsConst(m_points))
     {
-        if (QGraphicsEllipseItem *item = m_points.at(i))
+        if (item)
         {
             item->setVisible(false);
         }
diff --git a/src/libs/vtools/visualization/visualization.cpp b/src/libs/vtools/visualization/visualization.cpp
index 657b13ce2..d0f84bbf7 100644
--- a/src/libs/vtools/visualization/visualization.cpp
+++ b/src/libs/vtools/visualization/visualization.cpp
@@ -59,6 +59,44 @@ template <class K, class V> class QHash;
 
 Q_LOGGING_CATEGORY(vVis, "v.visualization")
 
+namespace
+{
+//---------------------------------------------------------------------------------------------------------------------
+VScaledEllipse *InitPointItem(const QColor &color, QGraphicsItem *parent, qreal z = 0)
+{
+    VScaledEllipse *point = new VScaledEllipse(parent);
+    point->setZValue(1);
+    point->setBrush(QBrush(Qt::NoBrush));
+
+    QPen visPen = point->pen();
+    visPen.setColor(color);
+
+    point->setPen(visPen);
+    point->setRect(PointRect(ScaledRadius(SceneScale(qApp->getCurrentScene()))));
+    point->setPos(QPointF());
+    point->setFlags(QGraphicsItem::ItemStacksBehindParent);
+    point->setZValue(z);
+    point->setVisible(false);
+    return point;
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+VCurvePathItem *InitCurveItem(const QColor &color, QGraphicsItem *parent, qreal z = 0)
+{
+    VCurvePathItem *curve = new VCurvePathItem(parent);
+    curve->setBrush(QBrush(Qt::NoBrush));
+
+    QPen visPen = curve->pen();
+    visPen.setColor(color);
+    curve->setPen(visPen);
+
+    curve->setFlags(QGraphicsItem::ItemStacksBehindParent);
+    curve->setZValue(z);
+    curve->setVisible(false);
+    return curve;
+}
+}
+
 //---------------------------------------------------------------------------------------------------------------------
 Visualization::Visualization(const VContainer *data)
     :QObject(),
@@ -261,22 +299,19 @@ VScaledEllipse *Visualization::GetPointItem(QVector<VScaledEllipse *> &points, q
 }
 
 //---------------------------------------------------------------------------------------------------------------------
-VScaledEllipse *Visualization::InitPointItem(const QColor &color, QGraphicsItem *parent, qreal z)
+VCurvePathItem *Visualization::GetCurveItem(QVector<VCurvePathItem *> &curves, quint32 i, const QColor &color,
+                                            QGraphicsItem *parent)
 {
-    VScaledEllipse *point = new VScaledEllipse(parent);
-    point->setZValue(1);
-    point->setBrush(QBrush(Qt::NoBrush));
-
-    QPen visPen = point->pen();
-    visPen.setColor(color);
-
-    point->setPen(visPen);
-    point->setRect(PointRect(ScaledRadius(SceneScale(qApp->getCurrentScene()))));
-    point->setPos(QPointF());
-    point->setFlags(QGraphicsItem::ItemStacksBehindParent);
-    point->setZValue(z);
-    point->setVisible(false);
-    return point;
+    if (not curves.isEmpty() && static_cast<quint32>(curves.size() - 1) >= i)
+    {
+        return curves.at(static_cast<int>(i));
+    }
+    else
+    {
+        auto point = InitCurveItem(color, parent);
+        curves.append(point);
+        return point;
+    }
 }
 
 //---------------------------------------------------------------------------------------------------------------------
diff --git a/src/libs/vtools/visualization/visualization.h b/src/libs/vtools/visualization/visualization.h
index c10b7b4a9..106a7d557 100644
--- a/src/libs/vtools/visualization/visualization.h
+++ b/src/libs/vtools/visualization/visualization.h
@@ -114,10 +114,10 @@ protected:
 
     static VScaledEllipse *GetPointItem(QVector<VScaledEllipse *> &points, quint32 i, const QColor &color,
                                         QGraphicsItem *parent);
+    static VCurvePathItem *GetCurveItem(QVector<VCurvePathItem *> &curves, quint32 i, const QColor &color,
+                                        QGraphicsItem *parent);
 private:
     Q_DISABLE_COPY(Visualization)
-
-    static VScaledEllipse* InitPointItem(const QColor &color, QGraphicsItem *parent, qreal z = 0);
 };
 
 //---------------------------------------------------------------------------------------------------------------------
diff --git a/src/libs/vwidgets/fancytabbar/fancytabbar.cpp b/src/libs/vwidgets/fancytabbar/fancytabbar.cpp
index 41779ecd9..de76c60ad 100644
--- a/src/libs/vwidgets/fancytabbar/fancytabbar.cpp
+++ b/src/libs/vwidgets/fancytabbar/fancytabbar.cpp
@@ -88,7 +88,7 @@ QSize FancyTabBar::TabSizeHint(bool minimum) const
         if (words.size() > 1)
         {
             QString sentence;
-            foreach(const QString & word, words)
+            for (auto &word : words)
             {
                 sentence = sentence.isEmpty() ? sentence = word : sentence + QLatin1Char(' ') + word;
 
diff --git a/src/libs/vwidgets/fancytabbar/stylehelper.cpp b/src/libs/vwidgets/fancytabbar/stylehelper.cpp
index 98c43c3ca..3e5b0660a 100644
--- a/src/libs/vwidgets/fancytabbar/stylehelper.cpp
+++ b/src/libs/vwidgets/fancytabbar/stylehelper.cpp
@@ -114,7 +114,8 @@ void StyleHelper::setBaseColor(const QColor &newcolor)
     if (color.isValid() && color != m_baseColor)
     {
         m_baseColor = color;
-        foreach (QWidget *w, QApplication::topLevelWidgets())
+        const QWidgetList widgets = QApplication::topLevelWidgets();
+        for (auto w : widgets)
         {
             w->update();
         }
diff --git a/src/libs/vwidgets/vabstractmainwindow.cpp b/src/libs/vwidgets/vabstractmainwindow.cpp
index 7b03bc347..f158d8a39 100644
--- a/src/libs/vwidgets/vabstractmainwindow.cpp
+++ b/src/libs/vwidgets/vabstractmainwindow.cpp
@@ -106,8 +106,11 @@ QString VAbstractMainWindow::CSVFilePath()
     const QString suffix("csv");
     const QString path = QDir::homePath()  + QLatin1String("/") + tr("values") + QLatin1String(".") + suffix;
 
-    QString fileName = QFileDialog::getSaveFileName(this, tr("Export to CSV"), path, filters, nullptr,
-                                                    QFileDialog::DontUseNativeDialog);
+    QString fileName = QFileDialog::getSaveFileName(this, tr("Export to CSV"), path, filters, nullptr
+#ifdef Q_OS_LINUX
+                                                    , QFileDialog::DontUseNativeDialog
+#endif
+                                                    );
 
     if (fileName.isEmpty())
     {
diff --git a/src/libs/vwidgets/vmaingraphicsscene.cpp b/src/libs/vwidgets/vmaingraphicsscene.cpp
index 1f4a59a4e..f8928304e 100644
--- a/src/libs/vwidgets/vmaingraphicsscene.cpp
+++ b/src/libs/vwidgets/vmaingraphicsscene.cpp
@@ -209,7 +209,7 @@ void VMainGraphicsScene::InitOrigins()
 //---------------------------------------------------------------------------------------------------------------------
 void VMainGraphicsScene::SetOriginsVisible(bool visible)
 {
-    foreach (QGraphicsItem *item, origins)
+    for (auto item : qAsConst(origins))
     {
         item->setVisible(visible);
     }
@@ -225,7 +225,8 @@ QPointF VMainGraphicsScene::getScenePos() const
 QRectF VMainGraphicsScene::VisibleItemsBoundingRect() const
 {
     QRectF rect;
-    foreach(QGraphicsItem *item, items())
+    const QList<QGraphicsItem *> qItems = items();
+    for (auto item : qItems)
     {
         if(not item->isVisible())
         {
diff --git a/src/libs/vwidgets/vmaingraphicsview.cpp b/src/libs/vwidgets/vmaingraphicsview.cpp
index fa4ce6629..18f058e0a 100644
--- a/src/libs/vwidgets/vmaingraphicsview.cpp
+++ b/src/libs/vwidgets/vmaingraphicsview.cpp
@@ -486,14 +486,13 @@ void VMainGraphicsView::mousePressEvent(QMouseEvent *event)
                     emit itemClicked(nullptr);
                     break;
                 }
-                for (int i = 0; i < list.size(); ++i)
+                for (auto item : list)
                 {
-                    if (this->scene()->items().contains(list.at(i)))
+                    if (this->scene()->items().contains(item))
                     {
-                        if (list.at(i)->type() > QGraphicsItem::UserType &&
-                            list.at(i)->type() <= VSimpleCurve::Type)
+                        if (item->type() > QGraphicsItem::UserType && item->type() <= VSimpleCurve::Type)
                         {
-                            emit itemClicked(list.at(i));
+                            emit itemClicked(item);
                             break;
                         }
                         else
@@ -692,7 +691,8 @@ void VMainGraphicsView::NewSceneRect(QGraphicsScene *sc, QGraphicsView *view, QG
     else
     {
         QRectF rect = item->sceneBoundingRect();
-        foreach(QGraphicsItem *child, item->childItems())
+        const QList<QGraphicsItem *> children = item->childItems();
+        for (auto child : children)
         {
             if(child->isVisible())
             {
diff --git a/src/test/TranslationsTest/qttestmainlambda.cpp b/src/test/TranslationsTest/qttestmainlambda.cpp
index f6f28f2c7..7e41972bd 100644
--- a/src/test/TranslationsTest/qttestmainlambda.cpp
+++ b/src/test/TranslationsTest/qttestmainlambda.cpp
@@ -51,16 +51,16 @@ int main(int argc, char** argv)
     ASSERT_TEST(new TST_TSTranslation());
 
     const QStringList locales = SupportedLocales();
-    for(int l = 0, sz = locales.size(); l < sz; ++l)
+    for(auto &locale : locales)
     {
         for(quint32 s = 0; s < TST_MeasurementRegExp::systemCounts; ++s)
         {
-            ASSERT_TEST(new TST_MeasurementRegExp(s, locales.at(l)));
+            ASSERT_TEST(new TST_MeasurementRegExp(s, locale));
         }
 
-        ASSERT_TEST(new TST_TSLocaleTranslation(locales.at(l)));
-        ASSERT_TEST(new TST_BuitInRegExp(locales.at(l)));
-        ASSERT_TEST(new TST_QmuParserErrorMsg(locales.at(l)));
+        ASSERT_TEST(new TST_TSLocaleTranslation(locale));
+        ASSERT_TEST(new TST_BuitInRegExp(locale));
+        ASSERT_TEST(new TST_QmuParserErrorMsg(locale));
     }
 
     return status;
diff --git a/src/test/TranslationsTest/tst_buitinregexp.cpp b/src/test/TranslationsTest/tst_buitinregexp.cpp
index d5a817b24..89a572ec3 100644
--- a/src/test/TranslationsTest/tst_buitinregexp.cpp
+++ b/src/test/TranslationsTest/tst_buitinregexp.cpp
@@ -183,11 +183,11 @@ void TST_BuitInRegExp::TestCheckInternalVaribleRegExp_data()
     QTest::addColumn<QString>("var");
     QTest::addColumn<QString>("originalName");
 
-    foreach(const QString &var, builInVariables)
+    for (auto &var : qAsConst(builInVariables))
     {
         const QString tag = QString("Locale: '%1'. Var '%2'").arg(m_locale, var);
         const QStringList originalNames = AllNames();
-        foreach(const QString &str, originalNames)
+        for (auto &str : originalNames)
         {
             QTest::newRow(qUtf8Printable(tag)) << var << str;
         }
@@ -231,10 +231,10 @@ void TST_BuitInRegExp::TestTemplatePlaceholders()
     QSet<QString> originals;
     QSet<QString> translations;
 
-    for (int i = 0; i < labelTemplatePlaceholders.size(); ++i)
+    for (auto &placeholder : labelTemplatePlaceholders)
     {
-        originals.insert(labelTemplatePlaceholders.at(i));
-        translations.insert(m_trMs->PlaceholderToUser(labelTemplatePlaceholders.at(i)));
+        originals.insert(placeholder);
+        translations.insert(m_trMs->PlaceholderToUser(placeholder));
     }
 
     QCOMPARE(originals.size(), labelTemplatePlaceholders.size()); // All tags are unique
@@ -254,7 +254,7 @@ void TST_BuitInRegExp::PrepareData()
 
     QTest::addColumn<QString>("originalName");
 
-    foreach(const QString &str, originalNames)
+    for (auto &str : originalNames)
     {
         const QString tag = QString("Locale: '%1'. Name '%2'").arg(m_locale, str);
         QTest::newRow(qUtf8Printable(tag)) << str;
diff --git a/src/test/TranslationsTest/tst_measurementregexp.cpp b/src/test/TranslationsTest/tst_measurementregexp.cpp
index cdb2cb928..6ce6579f3 100644
--- a/src/test/TranslationsTest/tst_measurementregexp.cpp
+++ b/src/test/TranslationsTest/tst_measurementregexp.cpp
@@ -170,7 +170,7 @@ void TST_MeasurementRegExp::PrepareData()
 
     QTest::addColumn<QString>("originalName");
 
-    foreach(const QString &str, originalNames)
+    for (auto &str : originalNames)
     {
         const QString tag = QString("System: '%1', locale: '%2'. Name '%3'").arg(m_system, m_locale, str);
         QTest::newRow(qUtf8Printable(tag)) << str;
diff --git a/src/test/TranslationsTest/tst_tslocaletranslation.cpp b/src/test/TranslationsTest/tst_tslocaletranslation.cpp
index 6577365d3..f6674907e 100644
--- a/src/test/TranslationsTest/tst_tslocaletranslation.cpp
+++ b/src/test/TranslationsTest/tst_tslocaletranslation.cpp
@@ -299,19 +299,19 @@ void TST_TSLocaleTranslation::TestHTMLTags()
                                                   << QLatin1String("html")
                                                   << QLatin1String("body");
     static const QString pattern("{1}.*>");
-    for (int i=0; i < tags.size(); ++i)
+    for (auto &tag : tags)
     {
-        const QRegularExpression openRegex(QLatin1String("<") + tags.at(i) + pattern,
+        const QRegularExpression openRegex(QLatin1String("<") + tag + pattern,
                                            QRegularExpression::DotMatchesEverythingOption);
         if (source.contains(openRegex))
         {
             const int countOpenTag = source.count(openRegex);
-            const QRegularExpression closeRegex(QLatin1String("</") + tags.at(i) + pattern,
+            const QRegularExpression closeRegex(QLatin1String("</") + tag + pattern,
                                                 QRegularExpression::DotMatchesEverythingOption);
             const int countCloseTag = translation.count(closeRegex);
             if (not translation.contains(closeRegex) || countCloseTag != countOpenTag)
             {
-                const QString message = QString("Tag mismatch. Tag: '<%1>'. ").arg(tags.at(i)) +
+                const QString message = QString("Tag mismatch. Tag: '<%1>'. ").arg(tag) +
                         QString("Original name:'%1'").arg(source) + QString(", translated name:'%1'").arg(translation);
                 QFAIL(qUtf8Printable(message));
             }
diff --git a/src/test/ValentinaTest/tst_nameregexp.cpp b/src/test/ValentinaTest/tst_nameregexp.cpp
index abd79e3a5..c4b199f2c 100644
--- a/src/test/ValentinaTest/tst_nameregexp.cpp
+++ b/src/test/ValentinaTest/tst_nameregexp.cpp
@@ -49,14 +49,14 @@ void TST_NameRegExp::TestNameRegExp_data()
     const QList<QLocale> allLocales =
             QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry);
 
-    for(int i = 0; i < allLocales.size(); ++i)
+    for(auto &locale : allLocales)
     {
-        INIT_LOCALE_VARIABLES(allLocales.at(i));
+        INIT_LOCALE_VARIABLES(locale);
         Q_UNUSED(positiveSign)
         Q_UNUSED(expUpper)
         Q_UNUSED(expLower)
 
-        const QString localeName = allLocales.at(i).name();
+        const QString localeName = locale.name();
         QString tag = localeName+QLatin1String(". First character can't be ")+sign0;
         QTest::newRow(qUtf8Printable(tag)) << sign0+QLatin1String("a") << false;
 
@@ -169,7 +169,7 @@ void TST_NameRegExp::TestOriginalMeasurementNamesRegExp_data()
     QTest::addColumn<QString>("str");
 
     const QStringList originalNames = AllGroupNames();
-    foreach(const QString &str, originalNames)
+    for (auto &str : originalNames)
     {
         const QString name = QString("Measurement '%1'").arg(str);
         QTest::newRow(qUtf8Printable(name)) << str;
diff --git a/src/test/ValentinaTest/tst_qmutokenparser.cpp b/src/test/ValentinaTest/tst_qmutokenparser.cpp
index 8650b571d..693baf289 100644
--- a/src/test/ValentinaTest/tst_qmutokenparser.cpp
+++ b/src/test/ValentinaTest/tst_qmutokenparser.cpp
@@ -84,9 +84,8 @@ void TST_QmuTokenParser::TokenFromUser_data()
 
     const QList<QLocale> allLocales =
             QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry);
-    for(int i = 0; i < allLocales.size(); ++i)
+    for(auto &locale : allLocales)
     {
-        const QLocale locale = allLocales.at(i);
         PrepareVal(1000.5, locale);
         PrepareVal(-1000.5, locale);
     }
diff --git a/src/test/ValentinaTest/tst_readval.cpp b/src/test/ValentinaTest/tst_readval.cpp
index 7e46024ef..88a3ddae4 100644
--- a/src/test/ValentinaTest/tst_readval.cpp
+++ b/src/test/ValentinaTest/tst_readval.cpp
@@ -50,9 +50,8 @@ void TST_ReadVal::TestReadVal_data()
 
     const QList<QLocale> allLocales =
             QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry);
-    for(int i = 0; i < allLocales.size(); ++i)
+    for(auto &locale : allLocales)
     {
-        const QLocale locale = allLocales.at(i);
         PrepareVal(1., locale);
         PrepareVal(1.0, locale);
         PrepareVal(-1.0, locale);
diff --git a/src/test/ValentinaTest/tst_varc.cpp b/src/test/ValentinaTest/tst_varc.cpp
index 260829313..1dec7d3d5 100644
--- a/src/test/ValentinaTest/tst_varc.cpp
+++ b/src/test/ValentinaTest/tst_varc.cpp
@@ -180,9 +180,9 @@ void TST_VArc::TestGetPoints()
     {
         const qreal epsRadius = 1.5; // computing error
 
-        for (int i=0; i < points.size(); ++i)
+        for (auto point : points)
         {
-            QLineF rLine(static_cast<QPointF>(center), points.at(i));
+            QLineF rLine(static_cast<QPointF>(center), point);
             const qreal value = qAbs(rLine.length() - radius);
             const QString errorMsg = QString("Broken the first rule. All points should be on the same distance from "
                                              "the center. Error ='%1'.").arg(value);
diff --git a/src/test/ValentinaTest/tst_vcommandline.cpp b/src/test/ValentinaTest/tst_vcommandline.cpp
index e3d0ce402..3f7a995e3 100644
--- a/src/test/ValentinaTest/tst_vcommandline.cpp
+++ b/src/test/ValentinaTest/tst_vcommandline.cpp
@@ -48,7 +48,7 @@ void TST_VCommandLine::UniqueKeys()
     const QStringList options = AllKeys();
     QSet<QString> unique;
 
-    foreach(const QString &str, options)
+    for (auto &str : options)
     {
         const QString message = QString("Options '%1' is not unique!").arg(str);
         QVERIFY2(not unique.contains(str), qUtf8Printable(message));
diff --git a/src/test/ValentinaTest/tst_vellipticalarc.cpp b/src/test/ValentinaTest/tst_vellipticalarc.cpp
index 3e9936b41..8d591d822 100644
--- a/src/test/ValentinaTest/tst_vellipticalarc.cpp
+++ b/src/test/ValentinaTest/tst_vellipticalarc.cpp
@@ -281,9 +281,8 @@ void TST_VEllipticalArc::TestGetPoints1()
     { // equation of ellipse will be different when rotation angle isn't 0 so we can't use this test in this case
         const qreal eps = 0.05;
 
-        for (int i=0; i < points.size(); ++i)
+        for (auto p : points)
         {
-            QPointF p = points.at(i);
             const qreal equationRes = p.rx()*p.rx()/(radius1*radius1) + p.ry()*p.ry()/(radius2*radius2);
             const qreal diff = qAbs(equationRes - 1);
             const QString errorMsg = QString("Broken the first rule. Any point must satisfy the equation of ellipse."
diff --git a/src/test/ValentinaTest/tst_vposter.cpp b/src/test/ValentinaTest/tst_vposter.cpp
index 8dbc4afe6..1feb0ea3a 100644
--- a/src/test/ValentinaTest/tst_vposter.cpp
+++ b/src/test/ValentinaTest/tst_vposter.cpp
@@ -65,9 +65,9 @@ void TST_VPoster::BigPoster()
 
     QCOMPARE(poster.size(), 12);
 
-    for (int i=0; i < poster.size(); i++)
+    for (auto p : poster)
     {
-        QCOMPARE(poster.at(i).rect.size(), PageRect(printer).size());
+        QCOMPARE(p.rect.size(), PageRect(printer).size());
     }
 }
 
diff --git a/src/test/ValentinaTest/tst_vtranslatevars.cpp b/src/test/ValentinaTest/tst_vtranslatevars.cpp
index ad0d15a5a..5d9bd414b 100644
--- a/src/test/ValentinaTest/tst_vtranslatevars.cpp
+++ b/src/test/ValentinaTest/tst_vtranslatevars.cpp
@@ -58,10 +58,10 @@ void TST_VTranslateVars::TestFormulaFromUser_data()
 
     const QList<QLocale> allLocales =
             QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry);
-    for(int i = 0; i < allLocales.size(); ++i)
+    for(auto &locale : allLocales)
     {
-        PrepareValFromUser(1000.5, allLocales.at(i));
-        PrepareValFromUser(-1000.5, allLocales.at(i));
+        PrepareValFromUser(1000.5, locale);
+        PrepareValFromUser(-1000.5, locale);
     }
 }
 
@@ -88,10 +88,10 @@ void TST_VTranslateVars::TestFormulaToUser_data()
 
     const QList<QLocale> allLocales =
             QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry);
-    for(int i = 0; i < allLocales.size(); ++i)
+    for(auto &locale : allLocales)
     {
-        PrepareValToUser(1000.5, allLocales.at(i));
-        PrepareValToUser(-1000.5, allLocales.at(i));
+        PrepareValToUser(1000.5, locale);
+        PrepareValToUser(-1000.5, locale);
     }
 }