diff --git a/beekeepy/beekeepy/_interface/abc/asynchronous/wallet.py b/beekeepy/beekeepy/_interface/abc/asynchronous/wallet.py
index 6f536f2aeff24d17e5c528d594e9ac6bcc1b2a58..4fcd73fe08099c8eaceb1d2da779e8533409bc05 100644
--- a/beekeepy/beekeepy/_interface/abc/asynchronous/wallet.py
+++ b/beekeepy/beekeepy/_interface/abc/asynchronous/wallet.py
@@ -22,6 +22,9 @@ class Wallet(ContainsWalletName, ABC):
     @abstractmethod
     async def unlocked(self) -> UnlockedWallet | None: ...
 
+    @abstractmethod
+    async def is_unlocked(self) -> bool: ...
+
     @abstractmethod
     async def unlock(self, password: str) -> UnlockedWallet: ...
 
diff --git a/beekeepy/beekeepy/_interface/abc/synchronous/wallet.py b/beekeepy/beekeepy/_interface/abc/synchronous/wallet.py
index 6ea8292e687224ed399ae93a965cbceb97e05e25..91a835c756ad95626e71b5c87c0762f1c1e49a5a 100644
--- a/beekeepy/beekeepy/_interface/abc/synchronous/wallet.py
+++ b/beekeepy/beekeepy/_interface/abc/synchronous/wallet.py
@@ -25,6 +25,9 @@ class Wallet(ContainsWalletName, ABC):
     @abstractmethod
     def unlock(self, password: str) -> UnlockedWallet: ...
 
+    @abstractmethod
+    def is_unlocked(self) -> bool: ...
+
     @property
     @abstractmethod
     def name(self) -> str: ...
diff --git a/beekeepy/beekeepy/_interface/asynchronous/session.py b/beekeepy/beekeepy/_interface/asynchronous/session.py
index e245b3f80ad2c8d8a1448a47134a68e2edf32bde..e898d0d927699c9873885f1688ce81a9157d04e9 100644
--- a/beekeepy/beekeepy/_interface/asynchronous/session.py
+++ b/beekeepy/beekeepy/_interface/asynchronous/session.py
@@ -97,7 +97,7 @@ class Session(SessionInterface, StateInvalidator):
     @property
     async def wallets_unlocked(self) -> list[UnlockedWalletInterface]:
         result = []
-        for wallet in await self.__list_wallets(refresh_timeout=False):
+        for wallet in await self.__list_wallets():
             unlocked_wallet = await wallet.unlocked
             if unlocked_wallet:
                 result.append(unlocked_wallet)
@@ -111,7 +111,7 @@ class Session(SessionInterface, StateInvalidator):
 
     @property
     async def wallets(self) -> list[WalletInterface]:
-        return await self.__list_wallets(refresh_timeout=True)
+        return await self.__list_wallets()
 
     @property
     async def wallets_created(self) -> list[WalletInterface]:
@@ -134,13 +134,11 @@ class Session(SessionInterface, StateInvalidator):
         self.register_invalidable(wallet)
         return wallet
 
-    async def __list_wallets(self, *, refresh_timeout: bool) -> list[WalletInterface]:
+    async def __list_wallets(self) -> list[WalletInterface]:
         return await asyncio.gather(
             *[
                 self.__construct_wallet(name=wallet.name)
-                for wallet in (
-                    await self.__beekeeper.api.list_wallets(token=await self.token, refresh_timeout=refresh_timeout)
-                ).wallets
+                for wallet in (await self.__beekeeper.api.list_wallets(token=await self.token)).wallets
             ]
         )
 
diff --git a/beekeepy/beekeepy/_interface/asynchronous/wallet.py b/beekeepy/beekeepy/_interface/asynchronous/wallet.py
index 6092dd8aa361bfe403030c831a02b7b2971714cf..914fe5fec79538a8b7ca02c850aed98d71355230 100644
--- a/beekeepy/beekeepy/_interface/asynchronous/wallet.py
+++ b/beekeepy/beekeepy/_interface/asynchronous/wallet.py
@@ -40,12 +40,12 @@ class Wallet(WalletCommons[AsyncRemoteBeekeeper, AsyncWalletLocked, AsyncDelayGu
 
     @property
     async def unlocked(self) -> UnlockedWallet | None:
-        if await self.__is_unlocked():
+        if await self.is_unlocked():
             return self.__construct_unlocked_wallet()
         return None
 
     async def unlock(self, password: str) -> UnlockedWallet:
-        if not (await self.__is_unlocked()):
+        if not (await self.is_unlocked()):
             first_try = True
             while first_try or self._guard.error_occured():
                 first_try = False
@@ -56,13 +56,11 @@ class Wallet(WalletCommons[AsyncRemoteBeekeeper, AsyncWalletLocked, AsyncDelayGu
                         )
         return self.__construct_unlocked_wallet()
 
-    async def __is_unlocked(self) -> bool:
-        for wallet in (await self._beekeeper.api.list_wallets(token=self.session_token)).wallets:
-            if wallet.name == self.name:
-                self._last_lock_state = wallet.unlocked
-                return self._last_lock_state
-        self._last_lock_state = False
-        return self._last_lock_state
+    async def is_unlocked(self) -> bool:
+        return self._is_wallet_unlocked(
+            wallet_name=self.name,
+            wallets=(await self._beekeeper.api.list_wallets(token=self.session_token)).wallets,
+        )
 
     def __construct_unlocked_wallet(self) -> UnlockedWallet:
         wallet = UnlockedWallet(
diff --git a/beekeepy/beekeepy/_interface/common.py b/beekeepy/beekeepy/_interface/common.py
index e45b8726a0fa0b8065909a1a9b83882708d7ef7f..cac4a233d6bf837f76905f55d903431ca79ee813 100644
--- a/beekeepy/beekeepy/_interface/common.py
+++ b/beekeepy/beekeepy/_interface/common.py
@@ -70,7 +70,7 @@ class WalletCommons(ContainsWalletName, StateInvalidator, Generic[BeekeeperT, Ca
     def _last_lock_state(self, value: bool) -> None:
         self.__last_check_is_locked = value
 
-    def _is_wallet_locked(self, *, wallet_name: str, wallets: list[WalletDetails]) -> bool:
+    def _is_wallet_unlocked(self, *, wallet_name: str, wallets: list[WalletDetails]) -> bool:
         """Checks is wallet locked.
 
         Args:
@@ -82,8 +82,10 @@ class WalletCommons(ContainsWalletName, StateInvalidator, Generic[BeekeeperT, Ca
         """
         for wallet in wallets:
             if wallet.name == wallet_name:
-                return not wallet.unlocked
-        return True
+                self._last_lock_state = wallet.unlocked
+                return wallet.unlocked
+        self._last_lock_state = False
+        return False
 
     def _raise_wallet_is_locked_error(self, wallet_name: str) -> NoReturn:
         raise WalletIsLockedError(wallet_name=wallet_name)
@@ -91,7 +93,7 @@ class WalletCommons(ContainsWalletName, StateInvalidator, Generic[BeekeeperT, Ca
     async def _async_call_callback_if_locked(self, *, wallet_name: str, token: str) -> None:
         assert isinstance(self._beekeeper, AsyncRemoteBeekeeper), "invalid beekeeper type, require asynchronous"
         wallets = (await self._beekeeper.api.list_wallets(token=token)).wallets
-        if self._is_wallet_locked(wallet_name=wallet_name, wallets=wallets):
+        if not self._is_wallet_unlocked(wallet_name=wallet_name, wallets=wallets):
             if self._last_lock_state is False:
                 wallet_names = [w.name for w in wallets if w.unlocked is False]
                 await asyncio.gather(
@@ -106,7 +108,7 @@ class WalletCommons(ContainsWalletName, StateInvalidator, Generic[BeekeeperT, Ca
     def _sync_call_callback_if_locked(self, *, wallet_name: str, token: str) -> None:
         assert isinstance(self._beekeeper, SyncRemoteBeekeeper), "invalid beekeeper type, require synchronous"
         wallets = self._beekeeper.api.list_wallets(token=token).wallets
-        if self._is_wallet_locked(wallet_name=wallet_name, wallets=wallets):
+        if not self._is_wallet_unlocked(wallet_name=wallet_name, wallets=wallets):
             if self._last_lock_state is False:
                 wallet_names = [w.name for w in wallets if w.unlocked is False]
                 for callback in self.__wallet_close_callbacks:
diff --git a/beekeepy/beekeepy/_interface/synchronous/session.py b/beekeepy/beekeepy/_interface/synchronous/session.py
index 0713023b42d230f1dba353c04dabf3441bfc120d..923793741b7daae290eaa45721a4b917c4e2c8e1 100644
--- a/beekeepy/beekeepy/_interface/synchronous/session.py
+++ b/beekeepy/beekeepy/_interface/synchronous/session.py
@@ -87,7 +87,7 @@ class Session(SessionInterface, StateInvalidator):
 
     @property
     def wallets_unlocked(self) -> list[UnlockedWalletInterface]:
-        return [wallet.unlocked for wallet in self.__list_wallets(refresh_timeout=False) if wallet.unlocked]
+        return [wallet.unlocked for wallet in self.__list_wallets() if wallet.unlocked]
 
     @property
     def token(self) -> str:
@@ -97,7 +97,7 @@ class Session(SessionInterface, StateInvalidator):
 
     @property
     def wallets(self) -> list[WalletInterface]:
-        return self.__list_wallets(refresh_timeout=True)
+        return self.__list_wallets()
 
     @property
     def wallets_created(self) -> list[WalletInterface]:
@@ -120,10 +120,10 @@ class Session(SessionInterface, StateInvalidator):
         self.register_invalidable(wallet)
         return wallet
 
-    def __list_wallets(self, *, refresh_timeout: bool) -> list[WalletInterface]:
+    def __list_wallets(self) -> list[WalletInterface]:
         return [
             self.__construct_wallet(name=wallet.name)
-            for wallet in self.__beekeeper.api.list_wallets(token=self.token, refresh_timeout=refresh_timeout).wallets
+            for wallet in self.__beekeeper.api.list_wallets(token=self.token).wallets
         ]
 
     def _enter(self) -> SessionInterface:
diff --git a/beekeepy/beekeepy/_interface/synchronous/wallet.py b/beekeepy/beekeepy/_interface/synchronous/wallet.py
index ccdfc817ae9be04ff1e4723bb1ddb8e43335fe8e..38347828550a32c7156f5b8bc738e09f140fd4b7 100644
--- a/beekeepy/beekeepy/_interface/synchronous/wallet.py
+++ b/beekeepy/beekeepy/_interface/synchronous/wallet.py
@@ -40,12 +40,12 @@ class Wallet(WalletCommons[SyncRemoteBeekeeper, SyncWalletLocked, SyncDelayGuard
 
     @property
     def unlocked(self) -> UnlockedWallet | None:
-        if self.__is_unlocked():
+        if self.is_unlocked():
             return self.__construct_unlocked_wallet()
         return None
 
     def unlock(self, password: str) -> UnlockedWallet:
-        if not self.__is_unlocked():
+        if not self.is_unlocked():
             first_try = True
             while first_try or self._guard.error_occured():
                 first_try = False
@@ -53,13 +53,11 @@ class Wallet(WalletCommons[SyncRemoteBeekeeper, SyncWalletLocked, SyncDelayGuard
                     self._beekeeper.api.unlock(wallet_name=self.name, password=password, token=self.session_token)
         return self.__construct_unlocked_wallet()
 
-    def __is_unlocked(self) -> bool:
-        for wallet in self._beekeeper.api.list_wallets(token=self.session_token).wallets:
-            if wallet.name == self.name:
-                self._last_lock_state = wallet.unlocked
-                return self._last_lock_state
-        self._last_lock_state = False
-        return self._last_lock_state
+    def is_unlocked(self) -> bool:
+        return self._is_wallet_unlocked(
+            wallet_name=self.name,
+            wallets=(self._beekeeper.api.list_wallets(token=self.session_token)).wallets,
+        )
 
     def __construct_unlocked_wallet(self) -> UnlockedWallet:
         wallet = UnlockedWallet(