diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/cache/PermanentDatabaseLevelCache.java b/annotation/src/main/java/lcsb/mapviewer/annotation/cache/PermanentDatabaseLevelCache.java
index 607a26f3ba2166176d90aa00fa55c754a1d6c97f..ed4c5e5240cf5305eb7890d48e38ced44f6d7965 100644
--- a/annotation/src/main/java/lcsb/mapviewer/annotation/cache/PermanentDatabaseLevelCache.java
+++ b/annotation/src/main/java/lcsb/mapviewer/annotation/cache/PermanentDatabaseLevelCache.java
@@ -80,14 +80,16 @@ public class PermanentDatabaseLevelCache extends XmlParser implements PermanentD
 
 		@Override
 		public CacheQuery call() throws Exception {
-			logger.debug("Query task call");
-			dbUtils.createSessionForCurrentThread();
-			logger.debug("Query task session started");
-			CacheQuery entry = getCacheQueryDao().getByQuery((String) query, type);
-			logger.debug("Query task data retrieved");
-			dbUtils.closeSessionForCurrentThread();
-			logger.debug("Query task return");
-			return entry;
+          logger.debug("Query task call");
+          try {
+            dbUtils.createSessionForCurrentThread();
+            logger.debug("Query task session started");
+            CacheQuery entry = getCacheQueryDao().getByQuery((String) query, type);
+            logger.debug("Query task data retrieved");
+            return entry;
+          } finally {
+            dbUtils.closeSessionForCurrentThread();
+          }
 		}
 
 	}
@@ -227,26 +229,29 @@ public class PermanentDatabaseLevelCache extends XmlParser implements PermanentD
 
 		@Override
 		public CacheQuery call() throws Exception {
-			logger.debug("Add task call");
-			dbUtils.createSessionForCurrentThread();
-			CacheQuery entry = getCacheQueryDao().getByQuery((String) query, type);
-
-			if (entry == null) {
-				entry = new CacheQuery();
-				entry.setQuery((String) query);
-				entry.setAccessed(Calendar.getInstance());
-			} else {
-				entry.setAccessed(Calendar.getInstance());
-			}
-			entry.setValue(value);
-			entry.setType(type);
-			Calendar expires = Calendar.getInstance();
-			expires.add(Calendar.DAY_OF_MONTH, type.getValidity());
-			entry.setExpires(expires);
-
-			getCacheQueryDao().add(entry);
-			dbUtils.closeSessionForCurrentThread();
-			return entry;
+            logger.debug("Add task call");
+            try {
+              dbUtils.createSessionForCurrentThread();
+              CacheQuery entry = getCacheQueryDao().getByQuery((String) query, type);
+      
+              if (entry == null) {
+                entry = new CacheQuery();
+                entry.setQuery((String) query);
+                entry.setAccessed(Calendar.getInstance());
+              } else {
+                entry.setAccessed(Calendar.getInstance());
+              }
+              entry.setValue(value);
+              entry.setType(type);
+              Calendar expires = Calendar.getInstance();
+              expires.add(Calendar.DAY_OF_MONTH, type.getValidity());
+              entry.setExpires(expires);
+      
+              getCacheQueryDao().add(entry);
+              return entry;
+            } finally {
+              dbUtils.closeSessionForCurrentThread();
+            }
 		}
 
 	}
@@ -290,13 +295,16 @@ public class PermanentDatabaseLevelCache extends XmlParser implements PermanentD
 		@Override
 		public CacheQuery call() throws Exception {
 			logger.debug("Remove task call");
-			dbUtils.createSessionForCurrentThread();
-			CacheQuery entry = getCacheQueryDao().getByQuery((String) query, type);
-			if (entry != null) {
-				getCacheQueryDao().delete(entry);
-			}
-			dbUtils.closeSessionForCurrentThread();
-			return entry;
+            try {
+              dbUtils.createSessionForCurrentThread();
+              CacheQuery entry = getCacheQueryDao().getByQuery((String) query, type);
+              if (entry != null) {
+                getCacheQueryDao().delete(entry);
+              }
+              return entry;
+            } finally {
+              dbUtils.closeSessionForCurrentThread();
+            }
 		}
 
 	}