diff --git a/services/tunnelbroker/src/Service/TunnelbrokerServiceImpl.cpp b/services/tunnelbroker/src/Service/TunnelbrokerServiceImpl.cpp
--- a/services/tunnelbroker/src/Service/TunnelbrokerServiceImpl.cpp
+++ b/services/tunnelbroker/src/Service/TunnelbrokerServiceImpl.cpp
@@ -227,13 +227,25 @@
           "No such session found. SessionID: " + sessionID);
     }
 
+    tunnelbroker::GetResponse response;
     // Handling of device notification token expiration and update
-    if (request->has_newnotifytoken() &&
-        !database::DatabaseManager::getInstance().updateSessionItemDeviceToken(
-            sessionID, request->newnotifytoken())) {
-      return grpc::Status(
-          grpc::StatusCode::INTERNAL,
-          "Can't update device token in the database");
+    if (request->has_newnotifytoken()) {
+      if (!database::DatabaseManager::getInstance()
+               .updateSessionItemDeviceToken(
+                   sessionID, request->newnotifytoken())) {
+        return grpc::Status(
+            grpc::StatusCode::INTERNAL,
+            "Can't update device token in the database");
+      }
+      sessionItem =
+          database::DatabaseManager::getInstance().findSessionItem(sessionID);
+    } else if (sessionItem->getNotifyToken().empty()) {
+      response.mutable_newnotifytokenrequired();
+      if (!writer->Write(response)) {
+        throw std::runtime_error(
+            "gRPC writer error on sending data to the client");
+      }
+      response.Clear();
     }
 
     const std::string clientDeviceID = sessionItem->getDeviceID();
@@ -249,7 +261,7 @@
       // DeliveryBroker.
       DeliveryBroker::getInstance().erase(clientDeviceID);
     }
-    tunnelbroker::GetResponse response;
+
     auto respondToWriter =
         [&writer, &response](std::string fromDeviceID, std::string payload) {
           response.mutable_responsemessage()->set_fromdeviceid(fromDeviceID);