diff --git a/src/main/java/org/eclipse/openk/statementpublicaffairs/service/mail/MailContext.java b/src/main/java/org/eclipse/openk/statementpublicaffairs/service/mail/MailContext.java
index 66521a3..fad89fa 100644
--- a/src/main/java/org/eclipse/openk/statementpublicaffairs/service/mail/MailContext.java
+++ b/src/main/java/org/eclipse/openk/statementpublicaffairs/service/mail/MailContext.java
@@ -73,7 +73,7 @@
 	private static final String IMAP_FOLDER_PROCESSED_STATEMENTS = "Processed Statements";
 	private static final String IMAP_FOLDER_TRASH = "Trash";
 
-	private Object syncobject = new Object();
+	private final Object syncobject = new Object();
 	private MailSession session;
 	private MailUtil mailUtil;
 
@@ -95,65 +95,69 @@
 		return getSession().newMessage();
 	}
 
-	public Folder getFolder(String folderPath) throws MessagingException {
+	public Store getStore() throws MessagingException {
 		Store store = session.getStore(IMAP);
 		if (!store.isConnected()) {
 			store.connect();
 		}
-		return store.getFolder(folderPath);
+		return store;
 	}
 
-	public Folder getInbox() throws MessagingException {
-		return getFolder(IMAP_FOLDER_INBOX);
+	public Folder getInbox(Store store) throws MessagingException {
+		return store.getFolder(IMAP_FOLDER_INBOX);
 	}
 
-	public Folder getTrash() throws MessagingException {
-		return getFolder(IMAP_FOLDER_TRASH);
+	public Folder getTrash(Store store) throws MessagingException {
+		return store.getFolder(IMAP_FOLDER_TRASH);
 	}
 
-	public Folder getProcessedStatementBox() throws MessagingException {
-		return getFolder(IMAP_FOLDER_PROCESSED_STATEMENTS);
+	public Folder getProcessedStatementBox(Store store) throws MessagingException {
+		return store.getFolder(IMAP_FOLDER_PROCESSED_STATEMENTS);
 	}
 
 	public List<String> getInboxMessageIds(String filterMailToAddress) throws MessagingException {
-		Folder inbox = getInbox();
-		inbox.open(Folder.READ_ONLY);
-		List<String> messageIds = new ArrayList<>();
-		for (Message m : inbox.getMessages()) {
-			if (filterMailToAddress != null) {
-				List<InternetAddress> to = Stream.of(m.getAllRecipients()).filter(InternetAddress.class::isInstance)
-						.map(InternetAddress.class::cast).collect(Collectors.toList());
-				boolean found = false;
-				for (InternetAddress addr : to) {
-					if (filterMailToAddress.equals(addr.getAddress())) {
-						found = true;
-						break;
+		try (Store store = getStore()) {
+			Folder inbox = getInbox(store);
+			inbox.open(Folder.READ_ONLY);
+			List<String> messageIds = new ArrayList<>();
+			for (Message m : inbox.getMessages()) {
+				if (filterMailToAddress != null) {
+					List<InternetAddress> to = Stream.of(m.getAllRecipients()).filter(InternetAddress.class::isInstance)
+							.map(InternetAddress.class::cast).collect(Collectors.toList());
+					boolean found = false;
+					for (InternetAddress addr : to) {
+						if (filterMailToAddress.equals(addr.getAddress())) {
+							found = true;
+							break;
+						}
+					}
+					if (!found) {
+						continue;
 					}
 				}
-				if (!found) {
-					continue;
+				String[] s = m.getHeader(MESSAGE_ID);
+				if (s.length > 0) {
+					messageIds.add(s[0]);
 				}
 			}
-			String[] s = m.getHeader(MESSAGE_ID);
-			if (s.length > 0) {
-				messageIds.add(s[0]);
-			}
+			inbox.close();
+			return messageIds;
 		}
-		inbox.close();
-		return messageIds;
 	}
 
 	public List<MailEntry> getInboxMessages(String filterMailToAddress) throws MessagingException {
-		Folder inbox = getInbox();
-		inbox.open(Folder.READ_ONLY);
-		List<MailEntry> mails = new ArrayList<>();
-		for (Message m : inbox.getMessages()) {
-			if (toAddressMatches(m, filterMailToAddress)) {
-				parseMail(m).ifPresent(mails::add);
+		try (Store store = getStore()) {
+			Folder inbox = getInbox(store);
+			inbox.open(Folder.READ_ONLY);
+			List<MailEntry> mails = new ArrayList<>();
+			for (Message m : inbox.getMessages()) {
+				if (toAddressMatches(m, filterMailToAddress)) {
+					parseMail(m).ifPresent(mails::add);
+				}
 			}
+			inbox.close();
+			return mails;
 		}
-		inbox.close();
-		return mails;
 	}
 
 	private String parseFrom(Message m) throws MessagingException {
@@ -208,27 +212,33 @@
 			String folderPath) {
 		Optional<Map<String, AttachmentFile>> result = Optional.empty();
 
-		Folder folder = null;
-		try {
-			folder = getFolder(folderPath);
-			folder.open(Folder.READ_ONLY);
-			SearchTerm messageIdSearch = new MessageIDTerm(messageId);
-			Message[] messages = folder.search(messageIdSearch);
-			if (messages.length > 0) {
-				Message m = messages[0];
-				result = Optional.of(getAttachmentFilesFromMessage(m, fileNames));
-			}
-			folder.close();
-		} catch (MessagingException e) {
-			log.warning(CLOSING_INBOX_FAILED + e.getMessage());
-		}
-		if (folder.isOpen()) {
+		try (Store store = getStore()) {
+			Folder folder = null;
 			try {
+				folder = store.getFolder(folderPath);
+				folder.open(Folder.READ_ONLY);
+				SearchTerm messageIdSearch = new MessageIDTerm(messageId);
+				Message[] messages = folder.search(messageIdSearch);
+				if (messages.length > 0) {
+					Message m = messages[0];
+					result = Optional.of(getAttachmentFilesFromMessage(m, fileNames));
+				}
 				folder.close();
 			} catch (MessagingException e) {
 				log.warning(CLOSING_INBOX_FAILED + e.getMessage());
 			}
+			if (folder.isOpen()) {
+				try {
+					folder.close();
+				} catch (MessagingException e) {
+					log.warning(CLOSING_INBOX_FAILED + e.getMessage());
+				}
+			}
+
+		} catch (MessagingException e) {
+			log.warning(CLOSING_INBOX_FAILED + e.getMessage());
 		}
+
 		return result;
 	}
 
@@ -360,10 +370,10 @@
 		synchronized (syncobject) {
 			Folder sourceFolder = null;
 			Folder dstFolder = null;
-			try {
-				sourceFolder = getFolder(sourceFolderPath);
+			try (Store store = getStore()) {
+				sourceFolder = store.getFolder(sourceFolderPath);
 				sourceFolder.open(Folder.READ_WRITE);
-				dstFolder = getFolder(destFolderPath);
+				dstFolder = store.getFolder(destFolderPath);
 				dstFolder.open(Folder.READ_WRITE);
 
 				SearchTerm messageIdSearch = new MessageIDTerm(messageId);
@@ -424,8 +434,8 @@
 	private Optional<MailEntry> findMail(String messageId, String folderPath) {
 		Optional<MailEntry> oMail = Optional.empty();
 		Folder folder = null;
-		try {
-			folder = getFolder(folderPath);
+		try (Store store = getStore()) {
+			folder = store.getFolder(folderPath);
 			folder.open(Folder.READ_ONLY);
 			SearchTerm messageIdSearch = new MessageIDTerm(messageId);
 			Message[] messages = folder.search(messageIdSearch);
diff --git a/src/test/java/org/eclipse/openk/statementpublicaffairs/service/mail/MailContextTest.java b/src/test/java/org/eclipse/openk/statementpublicaffairs/service/mail/MailContextTest.java
index a561ca4..857cadb 100644
--- a/src/test/java/org/eclipse/openk/statementpublicaffairs/service/mail/MailContextTest.java
+++ b/src/test/java/org/eclipse/openk/statementpublicaffairs/service/mail/MailContextTest.java
@@ -93,7 +93,8 @@
 		Mockito.when(store.getFolder(folderPath)).thenReturn(folder);
 
 		MailContext mailContext = new MailContext(mailUtil, propertiesPath);
-		Folder responseFolder = mailContext.getFolder(folderPath);
+		Store store = mailContext.getStore();
+		Folder responseFolder = store.getFolder(folderPath);
 		assertEquals(folder, responseFolder);
 		Mockito.verify(store).isConnected();
 		Mockito.verify(store).connect();
@@ -109,7 +110,8 @@
 		Mockito.when(store.getFolder(folderPath)).thenReturn(folder);
 
 		MailContext mailContext = new MailContext(mailUtil, propertiesPath);
-		Folder responseFolder = mailContext.getInbox();
+		Store store = mailContext.getStore();
+		Folder responseFolder = mailContext.getInbox(store);
 		assertEquals(folder, responseFolder);
 		Mockito.verify(store).isConnected();
 		Mockito.verify(store).connect();
@@ -125,7 +127,8 @@
 		Mockito.when(store.getFolder(folderPath)).thenReturn(folder);
 
 		MailContext mailContext = new MailContext(mailUtil, propertiesPath);
-		Folder responseFolder = mailContext.getTrash();
+		Store store = mailContext.getStore();
+		Folder responseFolder = mailContext.getTrash(store);
 		assertEquals(folder, responseFolder);
 		Mockito.verify(store).isConnected();
 		Mockito.verify(store).connect();
@@ -141,7 +144,8 @@
 		Mockito.when(store.getFolder(folderPath)).thenReturn(folder);
 
 		MailContext mailContext = new MailContext(mailUtil, propertiesPath);
-		Folder responseFolder = mailContext.getProcessedStatementBox();
+		Store store = mailContext.getStore();
+		Folder responseFolder = mailContext.getProcessedStatementBox(store);
 		assertEquals(folder, responseFolder);
 		Mockito.verify(store).isConnected();
 		Mockito.verify(store).connect();
