diff --git a/src/modules/locale/LocaleConfiguration.cpp b/src/modules/locale/LocaleConfiguration.cpp
index ca0a707ad..2e0689090 100644
--- a/src/modules/locale/LocaleConfiguration.cpp
+++ b/src/modules/locale/LocaleConfiguration.cpp
@@ -27,16 +27,17 @@ LocaleConfiguration::LocaleConfiguration()
 }
 
 
-LocaleConfiguration::LocaleConfiguration( const QString& localeName )
+LocaleConfiguration::LocaleConfiguration( const QString& localeName, const QString& formatsName )
     : LocaleConfiguration()
 {
     lc_numeric = lc_time = lc_monetary = lc_paper = lc_name
             = lc_address = lc_telephone = lc_measurement
-            = lc_identification = localeName;
+            = lc_identification = formatsName;
 
     (void) setLanguage( localeName );
 }
 
+
 QString
 LocaleConfiguration::setLanguage(const QString& localeName )
 {
@@ -51,8 +52,7 @@ LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale,
                                               const QStringList& availableLocales,
                                               const QString& countryCode )
 {
-    LocaleConfiguration lc;
-    QString language = lc.setLanguage( languageLocale );
+    QString language = languageLocale.split( '_' ).first();
 
     QStringList linesForLanguage;
     for ( const QString &line : availableLocales )
@@ -269,12 +269,7 @@ LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale,
     if ( lc_formats.isEmpty() )
         lc_formats = lang;
 
-    lc.lang = lang;
-    lc.lc_address = lc.lc_identification = lc.lc_measurement = lc.lc_monetary
-                  = lc.lc_name = lc.lc_numeric = lc.lc_paper = lc.lc_telephone
-                  = lc.lc_time = lc_formats;
-
-    return lc;
+    return LocaleConfiguration( lang, lc_formats );
 }
 
 
diff --git a/src/modules/locale/LocaleConfiguration.h b/src/modules/locale/LocaleConfiguration.h
index 95dadd5c3..0bd310d9d 100644
--- a/src/modules/locale/LocaleConfiguration.h
+++ b/src/modules/locale/LocaleConfiguration.h
@@ -29,7 +29,10 @@ public:
     /// @brief Create an empty locale, with nothing set
     explicit LocaleConfiguration();
     /// @brief Create a locale with everything set to the given @p localeName
-    explicit LocaleConfiguration( const QString& localeName /* "en_US.UTF-8" */ );
+    explicit LocaleConfiguration( const QString& localeName /* "en_US.UTF-8" */ )
+        : LocaleConfiguration( localeName, localeName ) { };
+    /// @brief Create a locale with language and formats separate
+    explicit LocaleConfiguration( const QString& localeName, const QString& formatsName );
 
     static LocaleConfiguration fromLanguageAndLocation( const QString& language,
                                                         const QStringList& availableLocales,
diff --git a/src/modules/locale/LocalePage.cpp b/src/modules/locale/LocalePage.cpp
index 45397b1ab..c456ef940 100644
--- a/src/modules/locale/LocalePage.cpp
+++ b/src/modules/locale/LocalePage.cpp
@@ -452,22 +452,7 @@ LocalePage::onActivate()
 LocaleConfiguration
 LocalePage::guessLocaleConfiguration() const
 {
-    static QString defaultLocale = QStringLiteral( "en_US.UTF-8" );
-
-    QLocale myLocale;   // User-selected language
-
-    // If we cannot say anything about available locales
-    if ( m_localeGenLines.isEmpty() )
-    {
-        cWarning() << "guessLocaleConfiguration can't guess from an empty list.";
-        return LocaleConfiguration( defaultLocale );
-    }
-
-    QString myLanguageLocale = myLocale.name();
-    if ( myLanguageLocale.isEmpty() )
-        return LocaleConfiguration( defaultLocale );
-
-    return LocaleConfiguration::fromLanguageAndLocation( myLanguageLocale,
+    return LocaleConfiguration::fromLanguageAndLocation( QLocale().name(),
                                                          m_localeGenLines,
                                                          m_tzWidget->getCurrentLocation().country );
 }
diff --git a/src/modules/locale/Tests.cpp b/src/modules/locale/Tests.cpp
index 6cad2ef74..91fea42b8 100644
--- a/src/modules/locale/Tests.cpp
+++ b/src/modules/locale/Tests.cpp
@@ -50,4 +50,27 @@ void LocaleTests::testDefaultLocaleConfiguration()
     LocaleConfiguration lc( "en_US.UTF-8" );
     QVERIFY( !lc.isEmpty() );
     QCOMPARE( lc.toBcp47(), "en" );
+
+    LocaleConfiguration lc2( "de_DE.UTF-8" );
+    QVERIFY( !lc2.isEmpty() );
+    QCOMPARE( lc2.toBcp47(), "de" );
+}
+
+void LocaleTests::testSplitLocaleConfiguration()
+{
+    LocaleConfiguration lc( "en_US.UTF-8", "de_DE.UTF-8" );
+    QVERIFY( !lc.isEmpty() );
+    QCOMPARE( lc.toBcp47(), "en" );
+    QCOMPARE( lc.lc_numeric, QStringLiteral( "de_DE.UTF-8" ) );
+
+    LocaleConfiguration lc2( "de_DE.UTF-8", "da_DK.UTF-8" );
+    QVERIFY( !lc2.isEmpty() );
+    QCOMPARE( lc2.toBcp47(), "de" );
+    QCOMPARE( lc2.lc_numeric, "da_DK.UTF-8" );
+
+    LocaleConfiguration lc3( "da_DK.UTF-8", "de_DE.UTF-8" );
+    QVERIFY( !lc3.isEmpty() );
+    QCOMPARE( lc3.toBcp47(), "da" );
+    QCOMPARE( lc3.lc_numeric, "de_DE.UTF-8" );
+
 }
diff --git a/src/modules/locale/Tests.h b/src/modules/locale/Tests.h
index acb3ab309..299eac61d 100644
--- a/src/modules/locale/Tests.h
+++ b/src/modules/locale/Tests.h
@@ -34,6 +34,7 @@ private Q_SLOTS:
     // Check the sample config file is processed correctly
     void testEmptyLocaleConfiguration();
     void testDefaultLocaleConfiguration();
+    void testSplitLocaleConfiguration();
 };
 
 #endif