diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index db7d65527dac966338fda587d2866b513c431eda..16525a26bfd0c884d00009130ef415671d47a7f1 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -246,43 +246,34 @@ const handleIdentityLogin = (identity, uuid, token) => {
   setKeyForUUID(uuid, publicKey);
 };
 
-function executeRestfulFunction(type, that, fn, config, ...args) {
+async function executeRestfulFunction(type, that, fn, config, ...args) {
   const { currentlyAuthenticatedIdentity, viamApi, currentlyLoadedIdentity } = window;
+  const response = await fn.apply(that, [config, ...args]);
 
-  return new Penpal.Promise(executeResult => {
-    fn.apply(that, [config, ...args]).then(async (response) => {
-      const identity = currentlyAuthenticatedIdentity || currentlyLoadedIdentity;
+  const identity = currentlyAuthenticatedIdentity || currentlyLoadedIdentity;
+  const { code, status } = response.data;
 
-      const { code, status } = response.data;
+  const deviceRevoked = type === "private" && code === "401" && status === STATUS_DEVICE_REVOKED;
+  if (deviceRevoked) {
+    destroyIdentity();
 
-      // Destroy local storage in case device was revoked
-      if (type === "private" && code === "401" && status === STATUS_DEVICE_REVOKED) {
-        destroyIdentity();
+    const event = createEvent("", "DeviceRevoked");
+    iframeParent.onEvent(event);
 
-        const event = createEvent("", "DeviceRevoked");
-        iframeParent.onEvent(event);
+    return response.data;
+  }
 
-        return executeResult(response.data);
-      }
+  const badSession = type === "private" && identity && code === "400" && status === "Bad session";
+  if (!badSession) return response.data;
 
-      if (type === "private" && identity && code === "400" && status === "Bad session") {
-        viamApi.identityLogin(null, "previousaddeddevice")
-          .then((response) => {
-            if (response.data.code === "200") {
-              const uuid = response.data.data["Uuid"];
-              const token = response.data.data["Session"];
-              handleIdentityLogin(identity, uuid, token);
-              fn.apply(that, [config, ...args]).then(({data}) => executeResult(data));
-            } else {
-              executeResult(response.data);
-            }
-          })
-          .catch(console.warn);
-      } else {
-        executeResult(response.data);
-      }
-    });
-  });
+  const loginResponse = await viamApi.identityLogin("previousaddeddevice");
+  if (loginResponse.data.code !== "200") return loginResponse.data;
+
+  const uuid = loginResponse.data.data["Uuid"];
+  const token = loginResponse.data.data["Session"];
+  handleIdentityLogin(identity, uuid, token);
+  const { data } = await fn.apply(that, [config, ...args]);
+  return data;
 }
 
 window.executeRestfulFunction = executeRestfulFunction;
@@ -1228,17 +1219,17 @@ connection.promise.then(parent => {
     }
   }
 
-  var anynomousDeviceKeyEventsProcessing = false;
-  var maxDeviceKeyAnonymousEventTime = 0;
+  let anynomousDeviceKeyEventsProcessing = false;
+  let maxDeviceKeyAnonymousEventTime = 0;
 
-  var eventsDeviceEventsProcessing = false;
-  var maxDeviceKeyEventTime = 0;
+  let eventsDeviceEventsProcessing = false;
+  let maxDeviceKeyEventTime = 0;
 
-  var eventsEntityEventsProcessing = false;
-  var maxEntityEventTime = 0;
+  let eventsEntityEventsProcessing = false;
+  let maxEntityEventTime = 0;
 
-  var identityLoadedEvent = false;
-  var identityAuthenticatedEvent = false;
+  let identityLoadedEvent = false;
+  let identityAuthenticatedEvent = false;
 
   setInterval(async function () {
     if (window.currentlyAuthenticatedIdentity) {
@@ -1297,15 +1288,16 @@ connection.promise.then(parent => {
     }
   }, 50);
 
-  setInterval(function() {
+  setInterval(async () => {
     if (window.currentlyLoadedIdentity && !anynomousDeviceKeyEventsProcessing && !window.currentlyAuthenticatedIdentity) {
       anynomousDeviceKeyEventsProcessing = true;
-      executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, null, "devicekey").then(async executeResult => {
+      try {
+        const executeResult = await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, null, "devicekey");
         if(executeResult.code === "200") {
-          var eventsLen = executeResult.data.length;
+          const eventsLen = executeResult.data.length;
           let changedMaxDeviceKeyAnonymousEventTime = false;
-          for (var i = 0; i < eventsLen; i++) {
-            var event = executeResult.data[i];
+          for (let i = 0; i < eventsLen; i++) {
+            const event = executeResult.data[i];
             switch (event.type) {
               case "Authenticated" : {
                 const uuid = event.payloads[0];
@@ -1313,25 +1305,23 @@ connection.promise.then(parent => {
                 handleIdentityLogin(window.currentlyLoadedIdentity, uuid, token);
                 const identityToStore = window.currentlyAuthenticatedIdentity;
                 event.payloads = [{fromQRCode: true}];
-                setIdentityInLocalStorage(identityToStore).then(() => {
-                  getProfileData(identityToStore).then(() => {
-                    parent.onEvent(event);
-                  });
-                });
+                await setIdentityInLocalStorage(identityToStore);
+                await getProfileData(identityToStore);
+                parent.onEvent(event);
                 break;
               }
 
               case "QRCodeUpdated" : {
-                var actionID = event["actionID"];
-                var QrCode = event["payloads"][1];
+                const actionID = event["actionID"];
+                const QrCode = event["payloads"][1];
 
-                var eventCopy = JSON.parse(JSON.stringify(event));
+                const eventCopy = JSON.parse(JSON.stringify(event));
 
                 QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
                   eventCopy["payloads"].push(url);
-                  parent.onEvent(eventCopy)
+                  parent.onEvent(eventCopy);
                 });
-                break
+                break;
               }
 
               case "KeyDeleted" : {
@@ -1346,106 +1336,100 @@ connection.promise.then(parent => {
                 window.lastTimeGetProfile = 0;
 
                 destroyIdentityFromLocalStorage(authenticationPublicKey);
-                break
+                break;
               }
 
               default : {
-                parent.onEvent(event)
+                parent.onEvent(event);
               }
             }
             changedMaxDeviceKeyAnonymousEventTime = true;
-            maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp)
+            maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp);
           }
 
           if(changedMaxDeviceKeyAnonymousEventTime) {
-            executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession,
-                null, "devicekey", maxDeviceKeyAnonymousEventTime.toString()).then(() => {
-              anynomousDeviceKeyEventsProcessing = false;
-            });
-          } else {
-            anynomousDeviceKeyEventsProcessing = false;
+            await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession,
+              null, "devicekey", maxDeviceKeyAnonymousEventTime.toString());
           }
-        } else {
-          anynomousDeviceKeyEventsProcessing = false;
         }
-      });
+      } catch (e) {
+        console.warn(e);
+      }
+      anynomousDeviceKeyEventsProcessing = false;
     }
 
     if (window.currentlyAuthenticatedIdentity != null && eventsDeviceEventsProcessing === false) {
       eventsDeviceEventsProcessing = true;
-      executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "devicekey").then(executeResult => {
-        if(executeResult.code === "200") {
-          var eventsLen = executeResult.data.length;
+      try {
+        const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "devicekey");
+        if (executeResult.code === "200") {
+          const eventsLen = executeResult.data.length;
           const changedMaxDeviceKeyEventTime = false;
-          for(var i = 0; i < eventsLen; i++) {
-            var event = executeResult.data[i];
-            if(event.type === "QRCodeUpdated") {
-              var actionID = event["actionID"];
-              var QrCode = event["payloads"][1];
+          for (let i = 0; i < eventsLen; i++) {
+            const event = executeResult.data[i];
+            if (event.type === "QRCodeUpdated") {
+              const actionID = event["actionID"];
+              const QrCode = event["payloads"][1];
 
-              var eventCopy = JSON.parse(JSON.stringify(event));
+              const eventCopy = JSON.parse(JSON.stringify(event));
 
               QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
                 eventCopy["payloads"].push(url);
-                parent.onEvent(eventCopy)
-              })
+                parent.onEvent(eventCopy);
+              });
             } else {
-              parent.onEvent(event)
+              parent.onEvent(event);
             }
-            maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp)
+            maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp);
           }
           if(changedMaxDeviceKeyEventTime) {
-            executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "devicekey",
-              maxDeviceKeyEventTime.toString()).then(executeResult1 => {
-              eventsDeviceEventsProcessing = false
-            })
-          } else {
-            eventsDeviceEventsProcessing = false
+            await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "devicekey",
+              maxDeviceKeyEventTime.toString());
           }
-        } else {
-          eventsDeviceEventsProcessing = false
         }
-      });
+      } catch (e) {
+        console.warn(e);
+      }
+      eventsDeviceEventsProcessing = false;
     }
 
     if (window.currentlyAuthenticatedIdentity != null && eventsEntityEventsProcessing === false) {
       eventsEntityEventsProcessing = true;
-      executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "entity").then(executeResult => {
-        if(executeResult.code === "200") {
-          var eventsLen = executeResult.data.length;
+      try {
+        const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "entity");
+
+        if (executeResult.code === "200") {
+          const eventsLen = executeResult.data.length;
           let changedMaxEntityEventTime = false;
-          for(var i = 0; i < eventsLen; i++) {
-            event = executeResult.data[i];
-            if(event.type === "QRCodeUpdated") {
-              var actionID = event["actionID"];
-              var QrCode = event["payloads"][1];
+          for (let i = 0; i < eventsLen; i++) {
+            const event = executeResult.data[i];
+            if (event.type === "QRCodeUpdated") {
+              const actionID = event["actionID"];
+              const QrCode = event["payloads"][1];
 
-              var eventCopy = JSON.parse(JSON.stringify(event));
+              const eventCopy = JSON.parse(JSON.stringify(event));
 
               QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
                 eventCopy["payloads"].push(url);
-                parent.onEvent(eventCopy)
+                parent.onEvent(eventCopy);
               });
 
-              continue
+              continue;
             }
 
             parent.onEvent(event);
             changedMaxEntityEventTime = true;
-            maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp)
+            maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp);
           }
           if(changedMaxEntityEventTime) {
-            executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "entity",
-              maxEntityEventTime.toString()).then(executeResult1 => {
-              eventsEntityEventsProcessing = false
-            })
-          } else {
-            eventsEntityEventsProcessing = false
+            await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "entity",
+              maxEntityEventTime.toString());
           }
-        } else {
-          eventsEntityEventsProcessing = false
         }
-      });
+      } catch (e) {
+        console.warn(e);
+      }
+      eventsEntityEventsProcessing = false;
     }
   }, 1000);
 });