diff --git a/src/helper.cpp b/src/helper.cpp
index cbaeb0f90baeabba932a3d8475212162247e119f..928100ba9fda3745d5bf6c3a3181f32b00884703 100644
--- a/src/helper.cpp
+++ b/src/helper.cpp
@@ -200,42 +200,50 @@ bool lessThanVersion(const QString &q1, const QString &q2)
 {
     QStringList      version1 = q1.split(QLatin1Char('.'));
     QStringList      version2 = q2.split(QLatin1Char('.'));
-    std::vector<int> version1_digits;
-    std::vector<int> version2_digits;
+    std::vector<int> version1_parts;
+    std::vector<int> version2_parts;
+    constexpr int    amountOfVersionParts = 3;
 
-    for(int i = 0; i < version1.length(); ++i)
+    for(const auto &versionPart : version1)
     {
-        if(version1[i].length() == 1 && version1[i][0].isDigit())
+        bool ok;
+        int  part = versionPart.toInt(&ok, 10);
+        if(ok)
         {
-            version1_digits.push_back(version1[i].toInt());
+            version1_parts.push_back(part);
         }
         else
         {
-            throw std::invalid_argument("Invalid Input String!");
+            throw std::invalid_argument("Invalid PeTrack version string: Version is non-numeric!");
         }
     }
-    for(int i = 0; i < version2.length(); ++i)
+    for(const auto &versionPart : version2)
     {
-        if(version2[i].length() == 1 && version2[i][0].isDigit())
+        bool ok;
+        int  part = versionPart.toInt(&ok, 10);
+        if(ok)
         {
-            version2_digits.push_back(version2[i].toInt());
+            version2_parts.push_back(part);
         }
         else
         {
-            throw std::invalid_argument("Invalid Input String!");
+            throw std::invalid_argument("Invalid PeTrack version string: Version is non-numeric!");
         }
     }
-    int length = std::min(version1_digits.size(), version2_digits.size());
-    for(int i = 0; i < length; ++i)
+    if(!(version1_parts.size() == amountOfVersionParts && version2_parts.size() == amountOfVersionParts))
     {
-        if(version1_digits[i] > version2_digits[i])
+        throw std::invalid_argument("Invalid PeTrack version string: Amount of version parts is wrong!");
+    }
+    for(int i = 0; i < amountOfVersionParts; ++i)
+    {
+        if(version1_parts[i] > version2_parts[i])
         {
             return true;
         }
-        else if(version1_digits[i] < version2_digits[i])
+        else if(version1_parts[i] < version2_parts[i])
         {
             return false;
         }
     }
-    return version1_digits.size() > version2_digits.size();
+    return false;
 }
diff --git a/tests/unit_test/tst_helper.cpp b/tests/unit_test/tst_helper.cpp
index 83d2d6afafb0046fb9ad668b70327ca373b0d189..2158c827cf00000f4c250dea5cbfadf6a96420ef 100644
--- a/tests/unit_test/tst_helper.cpp
+++ b/tests/unit_test/tst_helper.cpp
@@ -28,16 +28,17 @@ TEST_CASE("Petrack version strings are compared", "[lessThanVersion]")
     CHECK(lessThanVersion(QString("0.9.1"), QString("0.9.0")));
     CHECK(lessThanVersion(QString("0.9.0"), QString("0.8.0")));
     CHECK(lessThanVersion(QString("1.8.0"), QString("0.9.0")));
-    CHECK(lessThanVersion(QString("0.9.1.1"), QString("0.9.0")));
-    CHECK(lessThanVersion(QString("0.9.0.0"), QString("0.9.0")));
+    CHECK(lessThanVersion(QString("0.9.15"), QString("0.9.3")));
+    CHECK(lessThanVersion(QString("0.130.1"), QString("0.9.3")));
+    CHECK(lessThanVersion(QString("15.9.16"), QString("0.9.3")));
 
     CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.1")));
     CHECK_FALSE(lessThanVersion(QString("0.8.0"), QString("0.9.0")));
     CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("1.9.0")));
-    CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.1.1")));
-    CHECK_FALSE(lessThanVersion(QString("0.9.0.1"), QString("0.9.1")));
-    CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.0.0")));
     CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.0")));
+    CHECK_FALSE(lessThanVersion(QString("0.9.1"), QString("0.9.13")));
+    CHECK_FALSE(lessThanVersion(QString("0.9.1"), QString("0.967.13")));
+    CHECK_FALSE(lessThanVersion(QString("0.9.1"), QString("19.9.13")));
 
     CHECK_THROWS(lessThanVersion(QString("0.8.k"), QString("0.9.0")));
     CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("0.9.k")));
@@ -46,4 +47,7 @@ TEST_CASE("Petrack version strings are compared", "[lessThanVersion]")
     CHECK_THROWS(lessThanVersion(QString("k.8.9"), QString("0.9.0")));
     CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("k.9.0")));
     CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("k.9.0")));
+    CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("k.15.0")));
+    CHECK_THROWS(lessThanVersion(QString("0.8k.9"), QString("0.15.0")));
+    CHECK_THROWS(lessThanVersion(QString("0.9.0.1"), QString("0.9.1")));
 }