diff --git a/src/org/openbravo/retail/posterminal/process/UnlinkDeviceActionHandler.java b/src/org/openbravo/retail/posterminal/process/UnlinkDeviceActionHandler.java
index 9cbc3c765..ffb50c64d 100644
--- a/src/org/openbravo/retail/posterminal/process/UnlinkDeviceActionHandler.java
+++ b/src/org/openbravo/retail/posterminal/process/UnlinkDeviceActionHandler.java
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2012 Openbravo S.L.U.
+ * Copyright (C) 2012-2020 Openbravo S.L.U.
  * Licensed under the Openbravo Commercial License version 1.0
  * You may obtain a copy of the License at http://www.openbravo.com/legal/obcl.html
  * or in the legal folder of this module distribution.
@@ -10,6 +10,7 @@ package org.openbravo.retail.posterminal.process;
 
 import java.util.Map;
 
+import org.apache.commons.lang.ArrayUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.codehaus.jettison.json.JSONArray;
@@ -19,6 +20,7 @@ import org.openbravo.client.application.process.BaseProcessActionHandler;
 import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.erpCommon.utility.OBMessageUtils;
+import org.openbravo.model.common.enterprise.Organization;
 import org.openbravo.retail.posterminal.OBPOSApplications;
 
 public class UnlinkDeviceActionHandler extends BaseProcessActionHandler {
@@ -36,20 +38,32 @@ public class UnlinkDeviceActionHandler extends BaseProcessActionHandler {
     try {
       selectedObject = new JSONObject(content);
       terminalId = selectedObject.getString("inpobposApplicationsId");
+
       OBPOSApplications terminal = OBDal.getInstance().get(OBPOSApplications.class, terminalId);
-      terminal.setLinked(false);
-      previousCacheSessionId = terminal.getCurrentCacheSession();
-      terminal.setCurrentCacheSession(null);
-      OBDal.getInstance().save(terminal);
-      OBDal.getInstance().getConnection().commit();
-      log.info("[TermAuth] Terminal " + terminal.getIdentifier() + " (" + previousCacheSessionId
-          + ") has been unlinked by user " + OBContext.getOBContext().getUser().getIdentifier());
-      msg.put("msgType", "success");
-      msg.put("msgTitle", OBMessageUtils.messageBD("OBPOS_UnlinkDeviceSuccessTitle"));
-      msg.put("msgText", OBMessageUtils.messageBD("OBPOS_UnlinkDeviceSuccessMsg"));
-      showMsgInView.put("showMsgInView", msg);
-      actions.put(showMsgInView);
-      result.put("responseActions", actions);
+
+      boolean terminalOrganizationIsReadable = organizationIsReadable(terminal.getOrganization());
+      if (terminalOrganizationIsReadable) {
+        OBContext.setAdminMode(false);
+      }
+      try {
+        terminal.setLinked(false);
+        previousCacheSessionId = terminal.getCurrentCacheSession();
+        terminal.setCurrentCacheSession(null);
+        OBDal.getInstance().save(terminal);
+        OBDal.getInstance().getConnection().commit();
+        log.info("[TermAuth] Terminal " + terminal.getIdentifier() + " (" + previousCacheSessionId
+            + ") has been unlinked by user " + OBContext.getOBContext().getUser().getIdentifier());
+        msg.put("msgType", "success");
+        msg.put("msgTitle", OBMessageUtils.messageBD("OBPOS_UnlinkDeviceSuccessTitle"));
+        msg.put("msgText", OBMessageUtils.messageBD("OBPOS_UnlinkDeviceSuccessMsg"));
+        showMsgInView.put("showMsgInView", msg);
+        actions.put(showMsgInView);
+        result.put("responseActions", actions);
+      } finally {
+        if (terminalOrganizationIsReadable) {
+          OBContext.restorePreviousMode();
+        }
+      }
 
     } catch (Exception e) {
       try {
@@ -68,4 +82,9 @@ public class UnlinkDeviceActionHandler extends BaseProcessActionHandler {
     }
     return result;
   }
+
+  private boolean organizationIsReadable(Organization terminalOrganization) {
+    return ArrayUtils.contains(OBContext.getOBContext().getReadableOrganizations(),
+        terminalOrganization.getId());
+  }
 }
