diff -Naur a/src/location/configure.json b/qtlocation/src/location/configure.json
--- a/src/location/configure.json	2023-10-11 15:01:35.000000000 +0200
+++ b/src/location/configure.json	2024-05-08 13:23:51.501947834 +0200
@@ -9,7 +9,7 @@
             "label": "Qt.labs.location experimental QML plugin",
             "purpose": "Provides experimental QtLocation QML types",
             "section": "Location",
-            "condition": "config.opengl",
+            "condition": "features.opengl",
             "output": [ "privateFeature" ]
         },
         "geoservices_osm": {
diff -Naur a/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp b/qtlocation/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp
--- a/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp	2023-10-11 15:01:35.000000000 +0200
+++ b/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp	2024-05-08 13:23:51.501947834 +0200
@@ -158,7 +158,7 @@
     if (!root)
         return;
 
-    if (m_mapObjectsRootNode && m_mapObjectsRootNode->parent())
+    if (m_mapObjectsRootNode && !m_mapObjectsRootNode->parent())
         root->appendChildNode(m_mapObjectsRootNode.get());
 
     if (!m_mapObjectsRootNode) {
diff -Naur a/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.cpp
--- a/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.cpp	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.cpp	2024-05-08 13:23:51.501947834 +0200
@@ -66,11 +66,8 @@
     Q_ASSERT(networkManager);
     m_networkManager->setParent(this);
 
-    if (parameters.contains(QStringLiteral("here.token")))
-        m_token = parameters.value(QStringLiteral("here.token")).toString();
-
-    if (parameters.contains(QStringLiteral("here.app_id")))
-        m_applicationId = parameters.value(QStringLiteral("here.app_id")).toString();
+    if (parameters.contains(QStringLiteral("here.apiKey")))
+        m_apiKey = parameters.value(QStringLiteral("here.apiKey")).toString();
 
     if (error)
         *error = QGeoServiceProvider::NoError;
@@ -85,12 +82,9 @@
 {
     QString authenticationString;
 
-    if (!m_token.isEmpty() && !m_applicationId.isEmpty()) {
-        authenticationString += "?app_code=";
-        authenticationString += m_token;
-
-        authenticationString += "&app_id=";
-        authenticationString += m_applicationId;
+    if (!m_apiKey.isEmpty()) {
+        authenticationString += "?apiKey=";
+        authenticationString += m_apiKey;
     }
 
     return authenticationString;
diff -Naur a/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.h b/qtlocation/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.h
--- a/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.h	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.h	2024-05-08 13:23:51.501947834 +0200
@@ -82,8 +82,7 @@
     QGeoNetworkAccessManager *m_networkManager;
     QGeoUriProvider *m_uriProvider;
     QGeoUriProvider *m_reverseGeocodingUriProvider;
-    QString m_token;
-    QString m_applicationId;
+    QString m_apiKey;
 };
 
 QT_END_NAMESPACE
diff -Naur a/src/plugins/geoservices/nokia/qgeoerror_messages.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeoerror_messages.cpp
--- a/src/plugins/geoservices/nokia/qgeoerror_messages.cpp	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/qgeoerror_messages.cpp	2024-05-08 13:23:51.501947834 +0200
@@ -39,7 +39,7 @@
 QT_BEGIN_NAMESPACE
 
 const char NOKIA_PLUGIN_CONTEXT_NAME[] = "QtLocationQML";
-const char MISSED_CREDENTIALS[] = QT_TRANSLATE_NOOP("QtLocationQML", "Qt Location requires app_id and token parameters.\nPlease register at https://developer.here.com/ to get your personal application credentials.");
+const char MISSED_CREDENTIALS[] = QT_TRANSLATE_NOOP("QtLocationQML", "Qt Location requires apiKey parameter.\nPlease register at https://developer.here.com/ to get your personal application credentials.");
 const char SAVING_PLACE_NOT_SUPPORTED[] = QT_TRANSLATE_NOOP("QtLocationQML", "Saving places is not supported.");
 const char REMOVING_PLACE_NOT_SUPPORTED[] = QT_TRANSLATE_NOOP("QtLocationQML", "Removing places is not supported.");
 const char SAVING_CATEGORY_NOT_SUPPORTED[] = QT_TRANSLATE_NOOP("QtLocationQML", "Saving categories is not supported.");
diff -Naur a/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.cpp
--- a/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.cpp	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.cpp	2024-05-08 13:23:51.501947834 +0200
@@ -60,8 +60,7 @@
     Q_ASSERT(networkManager);
     m_networkManager->setParent(this);
 
-    m_appId = parameters.value(QStringLiteral("here.app_id")).toString();
-    m_token = parameters.value(QStringLiteral("here.token")).toString();
+    m_apiKey = parameters.value(QStringLiteral("here.apiKey")).toString();
 
     QGeoRouteRequest::FeatureTypes featureTypes;
     featureTypes |= QGeoRouteRequest::TollFeature;
@@ -219,18 +218,16 @@
         return QStringList();
     QStringList requests;
 
-    QString baseRequest = QStringLiteral("http://");
+    QString baseRequest = QStringLiteral("https://");
     baseRequest += m_uriProvider->getCurrentHost();
     baseRequest += QStringLiteral("/routing/7.2/calculateroute.xml");
 
     baseRequest += QStringLiteral("?alternatives=");
     baseRequest += QString::number(request.numberAlternativeRoutes());
 
-    if (!m_appId.isEmpty() && !m_token.isEmpty()) {
-        baseRequest += QStringLiteral("&app_id=");
-        baseRequest += m_appId;
-        baseRequest += QStringLiteral("&token=");
-        baseRequest += m_token;
+    if (!m_apiKey.isEmpty()) {
+        baseRequest += QStringLiteral("&apiKey=");
+        baseRequest += m_apiKey;
     }
 
     const QList<QVariantMap> metadata = request.waypointsMetadata();
@@ -281,7 +278,7 @@
         return QStringList();
     QStringList requests;
 
-    QString baseRequest = "http://";
+    QString baseRequest = "https://";
     baseRequest += m_uriProvider->getCurrentHost();
     baseRequest += "/routing/7.2/getroute.xml";
 
diff -Naur a/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.h b/qtlocation/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.h
--- a/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.h	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.h	2024-05-08 13:23:51.501947834 +0200
@@ -77,8 +77,7 @@
 
     QGeoNetworkAccessManager *m_networkManager;
     QGeoUriProvider *m_uriProvider;
-    QString m_appId;
-    QString m_token;
+    QString m_apiKey;
 };
 
 QT_END_NAMESPACE
diff -Naur a/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp
--- a/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp	2024-05-08 13:23:51.501947834 +0200
@@ -75,20 +75,15 @@
 
     void checkUsageTerms(const QVariantMap &parameters, QGeoServiceProvider::Error *error, QString *errorString)
     {
-        QString appId, token;
+        const QString apiKey = parameters.value(QStringLiteral("here.apiKey")).toString();
 
-        appId = parameters.value(QStringLiteral("here.app_id")).toString();
-        token = parameters.value(QStringLiteral("here.token")).toString();
-
-        if (isValidParameter(appId) && isValidParameter(token))
+        if (isValidParameter(apiKey))
              return;
-        else if (!isValidParameter(appId))
-            qWarning() << "Invalid here.app_id";
         else
-            qWarning() << "Invalid here.token";
+            qWarning() << "Invalid here.apiKey";
 
-        if (parameters.contains(QStringLiteral("app_id")) || parameters.contains(QStringLiteral("token")))
-            qWarning() << QStringLiteral("Please prefix 'app_id' and 'token' with prefix 'here' (e.g.: 'here.app_id')");
+        if (parameters.contains(QStringLiteral("apiKey")))
+            qWarning() << QStringLiteral("Please prefix 'apiKey' with prefix 'here' (e.g.: 'here.apiKey')");
 
         *error = QGeoServiceProvider::MissingRequiredParameterError;
         *errorString = QCoreApplication::translate(NOKIA_PLUGIN_CONTEXT_NAME, MISSED_CREDENTIALS);
diff -Naur a/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.cpp
--- a/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.cpp	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.cpp	2024-05-08 13:23:51.501947834 +0200
@@ -84,8 +84,7 @@
     m_tileSize = qMax(tileSize.width(), tileSize.height());
     m_networkManager->setParent(this);
 
-    m_applicationId = parameters.value(QStringLiteral("here.app_id")).toString();
-    m_token = parameters.value(QStringLiteral("here.token")).toString();
+    m_apiKey = parameters.value(QStringLiteral("here.apiKey")).toString();
 }
 
 QGeoTileFetcherNokia::~QGeoTileFetcherNokia()
@@ -127,7 +126,7 @@
     if (!m_engineNokia)
         return QString();
 
-    static const QString http("http://");
+    static const QString http("https://");
     static const QString path("/maptile/2.1/maptile/newest/");
     static const QChar slash('/');
 
@@ -152,12 +151,9 @@
     static const QString slashpng("/png8");
     requestString += slashpng;
 
-    if (!m_token.isEmpty() && !m_applicationId.isEmpty()) { // TODO: remove the if
-        requestString += "?token=";
-        requestString += m_token;
-
-        requestString += "&app_id=";
-        requestString += m_applicationId;
+    if (!m_apiKey.isEmpty()) { // TODO: remove the if
+        requestString += "?apiKey=";
+        requestString += m_apiKey;
     }
 
     requestString += "&ppi=" + QString::number(ppi);
@@ -235,14 +231,9 @@
     // No "lg" param means that we want English.
 }
 
-QString QGeoTileFetcherNokia::token() const
-{
-    return m_token;
-}
-
-QString QGeoTileFetcherNokia::applicationId() const
+QString QGeoTileFetcherNokia::apiKey() const
 {
-    return m_applicationId;
+    return m_apiKey;
 }
 
 void QGeoTileFetcherNokia::copyrightsFetched()
@@ -271,19 +262,14 @@
 
 void QGeoTileFetcherNokia::fetchCopyrightsData()
 {
-    QString copyrightUrl = QStringLiteral("http://");
+    QString copyrightUrl = QStringLiteral("https://");
 
     copyrightUrl += m_baseUriProvider->getCurrentHost();
     copyrightUrl += QStringLiteral("/maptile/2.1/copyright/newest?output=json");
 
-    if (!token().isEmpty()) {
-        copyrightUrl += QStringLiteral("&token=");
-        copyrightUrl += token();
-    }
-
-    if (!applicationId().isEmpty()) {
-        copyrightUrl += QStringLiteral("&app_id=");
-        copyrightUrl += applicationId();
+    if (!apiKey().isEmpty()) {
+        copyrightUrl += QStringLiteral("&apiKey=");
+        copyrightUrl += apiKey();
     }
 
     QNetworkRequest netRequest((QUrl(copyrightUrl)));
@@ -303,19 +289,14 @@
 
 void QGeoTileFetcherNokia::fetchVersionData()
 {
-    QString versionUrl = QStringLiteral("http://");
+    QString versionUrl = QStringLiteral("https://");
 
     versionUrl += m_baseUriProvider->getCurrentHost();
     versionUrl += QStringLiteral("/maptile/2.1/version");
 
-    if (!token().isEmpty()) {
-        versionUrl += QStringLiteral("?token=");
-        versionUrl += token();
-    }
-
-    if (!applicationId().isEmpty()) {
-        versionUrl += QStringLiteral("&app_id=");
-        versionUrl += applicationId();
+    if (!apiKey().isEmpty()) {
+        versionUrl += QStringLiteral("?apiKey=");
+        versionUrl += apiKey();
     }
 
     QNetworkRequest netRequest((QUrl(versionUrl)));
diff -Naur a/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.h b/qtlocation/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.h
--- a/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.h	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.h	2024-05-08 13:23:51.501947834 +0200
@@ -62,8 +62,7 @@
 
     QGeoTiledMapReply *getTileImage(const QGeoTileSpec &spec);
 
-    QString token() const;
-    QString applicationId() const;
+    QString apiKey() const;
 
 public Q_SLOTS:
     void copyrightsFetched();
@@ -82,11 +81,10 @@
     QGeoNetworkAccessManager *m_networkManager;
     int m_tileSize;
     int m_ppi;
-    QString m_token;
     QNetworkReply *m_copyrightsReply;
     QNetworkReply *m_versionReply;
 
-    QString m_applicationId;
+    QString m_apiKey;
     QGeoUriProvider *m_baseUriProvider;
     QGeoUriProvider *m_aerialUriProvider;
 };
diff -Naur a/src/plugins/geoservices/nokia/qgeouriprovider.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeouriprovider.cpp
--- a/src/plugins/geoservices/nokia/qgeouriprovider.cpp	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/qgeouriprovider.cpp	2024-05-08 13:23:51.501947834 +0200
@@ -61,7 +61,7 @@
 QString QGeoUriProvider::getCurrentHost() const
 {
     if (m_maxSubdomains) {
-        QString result(m_firstSubdomain.toLatin1() + QRandomGenerator::global()->bounded(m_maxSubdomains));
+        QString result(static_cast<char>(m_firstSubdomain.toLatin1() + QRandomGenerator::global()->bounded(m_maxSubdomains)));
         result += '.' + m_currentHost;
         return result;
     }
diff -Naur a/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp b/qtlocation/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp
--- a/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp	2024-05-08 13:23:51.505281187 +0200
@@ -208,8 +208,7 @@
 
     m_locales.append(QLocale());
 
-    m_appId = parameters.value(QStringLiteral("here.app_id")).toString();
-    m_appCode = parameters.value(QStringLiteral("here.token")).toString();
+    m_apiKey = parameters.value(QStringLiteral("here.apiKey")).toString();
 
     m_theme = parameters.value(IconThemeKey, QString()).toString();
 
@@ -237,7 +236,7 @@
 
 QPlaceDetailsReply *QPlaceManagerEngineNokiaV2::getPlaceDetails(const QString &placeId)
 {
-    QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() +
+    QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() +
                     QStringLiteral("/places/v1/places/") + placeId);
 
     QUrlQuery queryItems;
@@ -268,7 +267,7 @@
 
        networkReply = sendRequest(u);
     } else {
-        QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() +
+        QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() +
                         QStringLiteral("/places/v1/places/") + request.placeId() +
                         QStringLiteral("/media/"));
 
@@ -410,7 +409,7 @@
         networkReply = sendRequest(u);
     } else if (!query.searchTerm().isEmpty()) {
         // search term query
-        QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() +
+        QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() +
                         QStringLiteral("/places/v1/discover/search"));
 
         queryItems.addQueryItem(QStringLiteral("q"), query.searchTerm());
@@ -432,7 +431,7 @@
 
         return reply;
     } else if (!query.recommendationId().isEmpty()) {
-        QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() +
+        QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() +
                         QStringLiteral("/places/v1/places/") + query.recommendationId() +
                         QStringLiteral("/related/recommended"));
 
@@ -443,7 +442,7 @@
         networkReply = sendRequest(requestUrl);
     } else {
         // category search
-        QUrl requestUrl(QStringLiteral("http://") + m_uriProvider->getCurrentHost() +
+        QUrl requestUrl(QStringLiteral("https://") + m_uriProvider->getCurrentHost() +
              QStringLiteral("/places/v1/discover/explore"));
 
         QStringList ids;
@@ -498,7 +497,7 @@
         return reply;
     }
 
-    QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() +
+    QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() +
                     QStringLiteral("/places/v1/suggest"));
 
     QUrlQuery queryItems;
@@ -633,7 +632,7 @@
     for (auto it = m_tempTree.keyBegin(), end = m_tempTree.keyEnd(); it != end; ++it) {
         if (*it == QString())
             continue;
-        QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() +
+        QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() +
                         QStringLiteral("/places/v1/categories/places/") + *it);
         QNetworkReply *networkReply = sendRequest(requestUrl);
         connect(networkReply, SIGNAL(finished()), this, SLOT(categoryReplyFinished()));
@@ -831,8 +830,7 @@
 QNetworkReply *QPlaceManagerEngineNokiaV2::sendRequest(const QUrl &url)
 {
     QUrlQuery queryItems(url);
-    queryItems.addQueryItem(QStringLiteral("app_id"), m_appId);
-    queryItems.addQueryItem(QStringLiteral("app_code"), m_appCode);
+    queryItems.addQueryItem(QStringLiteral("apiKey"), m_apiKey);
 
     QUrl requestUrl = url;
     requestUrl.setQuery(queryItems);
diff -Naur a/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.h b/qtlocation/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.h
--- a/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.h	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.h	2024-05-08 13:23:51.505281187 +0200
@@ -122,8 +122,7 @@
     QPointer<QPlaceCategoriesReplyHere> m_categoryReply;
     QHash<QString, QNetworkReply *> m_categoryRequests;
 
-    QString m_appId;
-    QString m_appCode;
+    QString m_apiKey;
 
     QString m_localDataPath;
     QString m_theme;
diff -Naur a/src/plugins/geoservices/nokia/uri_constants.cpp b/qtlocation/src/plugins/geoservices/nokia/uri_constants.cpp
--- a/src/plugins/geoservices/nokia/uri_constants.cpp	2023-10-11 15:01:35.000000000 +0200
+++ b/src/plugins/geoservices/nokia/uri_constants.cpp	2024-05-08 13:23:51.505281187 +0200
@@ -37,11 +37,11 @@
 
 QT_BEGIN_NAMESPACE
 
-const QString ROUTING_HOST = QLatin1String("route.api.here.com");
-const QString GEOCODING_HOST = QLatin1String("geocoder.api.here.com");
-const QString REVERSE_GEOCODING_HOST = QLatin1String("reverse.geocoder.api.here.com");
-const QString PLACES_HOST = QLatin1String("places.api.here.com");
-const QString MAP_TILES_HOST = QLatin1String("1-4.base.maps.api.here.com");
-const QString MAP_TILES_HOST_AERIAL = QLatin1String("1-4.aerial.maps.api.here.com");
+const QString ROUTING_HOST = QLatin1String("route.ls.hereapi.com");
+const QString GEOCODING_HOST = QLatin1String("geocoder.ls.hereapi.com");
+const QString REVERSE_GEOCODING_HOST = QLatin1String("reverse.geocoder.ls.hereapi.com");
+const QString PLACES_HOST = QLatin1String("places.ls.hereapi.com");
+const QString MAP_TILES_HOST = QLatin1String("1-4.base.maps.ls.hereapi.com");
+const QString MAP_TILES_HOST_AERIAL = QLatin1String("1-4.aerial.maps.ls.hereapi.com");
 
 QT_END_NAMESPACE
