From f39ab43fc0120b7fa97028d40acd7851de8d4a99 Mon Sep 17 00:00:00 2001
From: Jakob Heher <jakob.heher@iaik.tugraz.at>
Date: Thu, 24 Nov 2022 14:14:37 +0100
Subject: Repository moved to GitHub: https://github.com/a-sit/pdf-over

---
 .../src/main/java/at/asit/pdfover/gui/Main.java    |  85 --
 .../main/java/at/asit/pdfover/gui/MainWindow.java  | 408 ---------
 .../at/asit/pdfover/gui/MainWindowBehavior.java    | 116 ---
 .../asit/pdfover/gui/PlaceholderSelectionGui.java  | 155 ----
 .../java/at/asit/pdfover/gui/bku/BKUHelper.java    | 105 ---
 .../at/asit/pdfover/gui/bku/LocalBKUConnector.java | 122 ---
 .../asit/pdfover/gui/bku/MobileBKUConnector.java   | 439 ----------
 .../asit/pdfover/gui/bku/mobile/ATrustParser.java  | 379 ---------
 .../pdfover/gui/bku/mobile/MobileBKUValidator.java |  93 ---
 .../at/asit/pdfover/gui/cliarguments/Argument.java | 127 ---
 .../pdfover/gui/cliarguments/ArgumentHandler.java  | 127 ---
 .../cliarguments/AutomaticPositioningArgument.java |  47 --
 .../asit/pdfover/gui/cliarguments/BKUArgument.java |  64 --
 .../gui/cliarguments/ConfigFileArgument.java       |  67 --
 .../pdfover/gui/cliarguments/EmblemArgument.java   |  76 --
 .../pdfover/gui/cliarguments/HelpArgument.java     |  95 ---
 .../gui/cliarguments/InputDocumentArgument.java    |  76 --
 .../pdfover/gui/cliarguments/InvisibleProfile.java |  70 --
 .../gui/cliarguments/KeystoreAliasArgument.java    |  67 --
 .../gui/cliarguments/KeystoreFileArgument.java     |  75 --
 .../gui/cliarguments/KeystoreKeyPassArgument.java  |  67 --
 .../cliarguments/KeystoreStorePassArgument.java    |  67 --
 .../gui/cliarguments/KeystoreTypeArgument.java     |  67 --
 .../gui/cliarguments/OutputFolderArgument.java     |  74 --
 .../pdfover/gui/cliarguments/PasswordArgument.java |  70 --
 .../gui/cliarguments/PhoneNumberArgument.java      |  73 --
 .../gui/cliarguments/ProxyHostArgument.java        |  67 --
 .../gui/cliarguments/ProxyPassArgument.java        |  67 --
 .../gui/cliarguments/ProxyPortArgument.java        |  74 --
 .../gui/cliarguments/ProxyUserArgument.java        |  67 --
 .../gui/cliarguments/SkipFinishArgument.java       |  46 --
 .../gui/composites/BKUSelectionComposite.java      | 131 ---
 .../gui/composites/ConfigurationComposite.java     | 404 ---------
 .../gui/composites/DataSourceSelectComposite.java  | 287 -------
 .../pdfover/gui/composites/OutputComposite.java    | 480 -----------
 .../gui/composites/PositioningComposite.java       | 371 ---------
 .../pdfover/gui/composites/SignaturePanel.java     | 483 -----------
 .../pdfover/gui/composites/StateComposite.java     |  59 --
 .../pdfover/gui/composites/WaitingComposite.java   |  71 --
 .../composites/configuration/AboutComposite.java   | 132 ---
 .../AdvancedConfigurationComposite.java            | 709 ----------------
 .../configuration/ConfigurationCompositeBase.java  |  77 --
 .../configuration/Fido2ConfigurationComposite.java |  95 ---
 .../KeystoreConfigurationComposite.java            | 592 -------------
 .../SimpleConfigurationComposite.java              | 717 ----------------
 .../mobilebku/MobileBKUEnterNumberComposite.java   | 283 -------
 .../mobilebku/MobileBKUEnterTANComposite.java      | 278 -------
 .../mobilebku/MobileBKUFido2Composite.java         | 133 ---
 .../mobilebku/MobileBKUFingerprintComposite.java   | 178 ----
 .../composites/mobilebku/MobileBKUQRComposite.java | 240 ------
 .../mobilebku/WaitingForAppComposite.java          | 106 ---
 .../asit/pdfover/gui/controls/ClickableCanvas.java | 119 ---
 .../java/at/asit/pdfover/gui/controls/Dialog.java  | 123 ---
 .../at/asit/pdfover/gui/controls/ErrorDialog.java  |  36 -
 .../at/asit/pdfover/gui/controls/ErrorMarker.java  |  79 --
 .../at/asit/pdfover/gui/controls/InputDialog.java  | 160 ----
 .../asit/pdfover/gui/controls/MainBarButton.java   | 370 ---------
 .../pdfover/gui/controls/MainBarEndButton.java     |  97 ---
 .../pdfover/gui/controls/MainBarMiddleButton.java  |  93 ---
 .../gui/controls/MainBarRectangleButton.java       | 174 ----
 .../pdfover/gui/controls/MainBarStartButton.java   | 154 ----
 .../pdfover/gui/controls/PasswordInputDialog.java  |  36 -
 .../gui/exceptions/ATrustConnectionException.java  |  40 -
 .../gui/exceptions/CantLoadKeystoreException.java  |  36 -
 .../gui/exceptions/InitializationException.java    |  35 -
 .../pdfover/gui/exceptions/InvalidEmblemFile.java  |  48 --
 .../gui/exceptions/InvalidPasswordException.java   |  35 -
 .../gui/exceptions/InvalidPortException.java       |  46 --
 .../KeystoreAliasDoesntExistException.java         |  36 -
 .../exceptions/KeystoreAliasNoKeyException.java    |  36 -
 .../exceptions/KeystoreDoesntExistException.java   |  38 -
 .../exceptions/KeystoreKeyPasswordException.java   |  35 -
 .../OutputfolderDoesntExistException.java          |  39 -
 .../OutputfolderNotADirectoryException.java        |  39 -
 .../gui/exceptions/PDFOverGUIException.java        |  58 --
 .../gui/exceptions/PasswordTooLongException.java   |  38 -
 .../gui/exceptions/PasswordTooShortException.java  |  38 -
 .../pdfover/gui/exceptions/ResumableException.java |  59 --
 .../asit/pdfover/gui/keystore/KeystoreUtils.java   |  28 -
 .../at/asit/pdfover/gui/osx/CocoaUIEnhancer.java   | 370 ---------
 .../asit/pdfover/gui/utils/FileUploadSource.java   |  57 --
 .../asit/pdfover/gui/utils/LocaleSerializer.java   |  59 --
 .../java/at/asit/pdfover/gui/utils/SWTUtils.java   | 235 ------
 .../asit/pdfover/gui/utils/UpdateCheckManager.java | 110 ---
 .../asit/pdfover/gui/utils/VersionComparator.java  | 101 ---
 .../java/at/asit/pdfover/gui/utils/Zipper.java     | 128 ---
 .../at/asit/pdfover/gui/workflow/StateMachine.java | 278 -------
 .../java/at/asit/pdfover/gui/workflow/Status.java  |  77 --
 .../workflow/config/ConfigurationDataInMemory.java | 196 -----
 .../gui/workflow/config/ConfigurationManager.java  | 919 ---------------------
 .../gui/workflow/states/BKUSelectionState.java     | 131 ---
 .../gui/workflow/states/ConfigurationUIState.java  | 128 ---
 .../asit/pdfover/gui/workflow/states/KSState.java  | 225 -----
 .../pdfover/gui/workflow/states/LocalBKUState.java | 215 -----
 .../gui/workflow/states/MobileBKUState.java        | 668 ---------------
 .../pdfover/gui/workflow/states/OpenState.java     | 275 ------
 .../pdfover/gui/workflow/states/OutputState.java   | 138 ----
 .../gui/workflow/states/PositioningState.java      | 228 -----
 .../workflow/states/PrepareConfigurationState.java | 348 --------
 .../gui/workflow/states/PrepareSigningState.java   | 263 ------
 .../pdfover/gui/workflow/states/SigningState.java  | 158 ----
 .../at/asit/pdfover/gui/workflow/states/State.java |  93 ---
 102 files changed, 16883 deletions(-)
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/MainWindow.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/MainWindowBehavior.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/PlaceholderSelectionGui.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/BKUHelper.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/LocalBKUConnector.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/MobileBKUConnector.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/ATrustParser.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/MobileBKUValidator.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/Argument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ArgumentHandler.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/AutomaticPositioningArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/BKUArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ConfigFileArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/EmblemArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/HelpArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InputDocumentArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InvisibleProfile.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreAliasArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreFileArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreKeyPassArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreStorePassArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreTypeArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/OutputFolderArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/PasswordArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/PhoneNumberArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyHostArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyPassArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyPortArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyUserArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/SkipFinishArgument.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/BKUSelectionComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/DataSourceSelectComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/StateComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/WaitingComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AboutComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AdvancedConfigurationComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/ConfigurationCompositeBase.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/Fido2ConfigurationComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/KeystoreConfigurationComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/SimpleConfigurationComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUEnterNumberComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUEnterTANComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUFido2Composite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUFingerprintComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUQRComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/WaitingForAppComposite.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ClickableCanvas.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/Dialog.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorDialog.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorMarker.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/InputDialog.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarButton.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarEndButton.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarMiddleButton.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarRectangleButton.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarStartButton.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/PasswordInputDialog.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/ATrustConnectionException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/CantLoadKeystoreException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InitializationException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidEmblemFile.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidPasswordException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidPortException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreAliasDoesntExistException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreAliasNoKeyException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreDoesntExistException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreKeyPasswordException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/OutputfolderDoesntExistException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/OutputfolderNotADirectoryException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PDFOverGUIException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PasswordTooLongException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PasswordTooShortException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/ResumableException.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/keystore/KeystoreUtils.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/osx/CocoaUIEnhancer.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/FileUploadSource.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/LocaleSerializer.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTUtils.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/UpdateCheckManager.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/VersionComparator.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/Zipper.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/StateMachine.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/Status.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationDataInMemory.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationManager.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/BKUSelectionState.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/ConfigurationUIState.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/KSState.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/LocalBKUState.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/MobileBKUState.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareConfigurationState.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/SigningState.java
 delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/State.java

(limited to 'pdf-over-gui/src/main/java/at/asit/pdfover/gui')

diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java
deleted file mode 100644
index 77e71581..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui;
-
-//Imports
-import java.io.File;
-import java.io.IOException;
-
-import javax.swing.JOptionPane;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.workflow.StateMachine;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import iaik.security.provider.IAIK;
-
-/**
- * Main entry point for production
- */
-public class Main {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(Main.class);
-//	private static URL url=null;
-
-	/**
-	 * @param args
-	 * @throws IOException
-	 */
-	public static void main(String[] args) throws IOException {
-		try {
-			log.info("This is " + Constants.APP_NAME_VERSION + ", " +
-			  "running on " + System.getProperty("os.arch") + " " + System.getProperty("os.name") + ", " +
-			  "powered by "+ System.getProperty("java.vendor") + " Java " + System.getProperty("java.version") + ".");
-			File configDir = new File(Constants.CONFIG_DIRECTORY);
-
-			if (!configDir.exists()) {
-				configDir.mkdir();
-			}
-
-			// force loading the IAIK JCE (cf. #95)
-			IAIK.addAsProvider();
-
-			// force keystore type (Adoptium JRE 17 still ships with JKS, cf. #95)
-			System.setProperty("javax.net.ssl.trustStoreType", "jks");
-
-			// disable display scaling for AWT components embedded in SWT (cf. #106)
-			System.setProperty("sun.java2d.uiScale", "1");
-
-			log.debug("Starting stateMachine ...");
-			(new StateMachine(args)).start();
-			log.debug("Ended stateMachine ...");
-		}
-		catch (Throwable e) {
-
-			log.error("Unhandled error", e);
-
-			JOptionPane.showMessageDialog(null,
-					"Error occured " + e.getMessage(),
-					null, JOptionPane.ERROR_MESSAGE);
-		}
-
-		// Workaround for remaining AWT-Shutdown thread on OSX
-		System.exit(0);
-	}
-
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/MainWindow.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/MainWindow.java
deleted file mode 100644
index a382bf4d..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/MainWindow.java
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui;
-
-// Imports
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.EnumMap;
-import java.util.Map;
-
-import at.asit.pdfover.commons.Constants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.SWTError;
-import org.eclipse.swt.custom.StackLayout;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.ShellAdapter;
-import org.eclipse.swt.events.ShellEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Monitor;
-import org.eclipse.swt.widgets.Shell;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.composites.StateComposite;
-import at.asit.pdfover.gui.controls.Dialog;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.Dialog.ICON;
-import at.asit.pdfover.gui.controls.MainBarButton;
-import at.asit.pdfover.gui.controls.MainBarEndButton;
-import at.asit.pdfover.gui.controls.MainBarMiddleButton;
-import at.asit.pdfover.gui.controls.MainBarRectangleButton;
-import at.asit.pdfover.gui.controls.MainBarStartButton;
-import at.asit.pdfover.gui.osx.CocoaUIEnhancer;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.states.BKUSelectionState;
-import at.asit.pdfover.gui.workflow.states.ConfigurationUIState;
-import at.asit.pdfover.gui.workflow.states.OpenState;
-import at.asit.pdfover.gui.workflow.states.PositioningState;
-
-/**
- * The Main Window of PDF-Over 4
- */
-public class MainWindow {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(MainWindow.class);
-
-	private Shell shell;
-	private Composite mainbar;
-	private FormData mainBarFormData;
-	private Composite container;
-	private FormData containerFormData;
-	private StackLayout stack;
-	StateMachine stateMachine;
-	private MainBarButton btn_sign;
-	private MainBarButton btn_position;
-	private MainBarButton btn_open;
-	private MainBarButton btn_config;
-
-	/**
-	 * Main bar Buttons
-	 */
-	public enum Buttons {
-		/** the configuration button */
-		CONFIG,
-
-		/** the open button */
-		OPEN,
-
-		/** the position button */
-		POSITION,
-
-		/** the signature button */
-		SIGN,
-
-		/** the final button */
-		FINAL
-	}
-
-	private Map<Buttons, MainBarButton> buttonMap;
-
-	private MainBarEndButton btn_end;
-
-	/**
-	 * Default constructor
-	 *
-	 * @param stateMachine
-	 *            The main workflow
-	 */
-	public MainWindow(StateMachine stateMachine) {
-		super();
-
-		this.stateMachine = stateMachine;
-
-		this.buttonMap = new EnumMap<MainWindow.Buttons, MainBarButton>(
-				Buttons.class);
-	}
-
-	/**
-	 * Sets top level composite for stack layout
-	 *
-	 * @param ctrl
-	 */
-	public void setTopControl(Control ctrl) {
-		if(ctrl != null)
-			log.debug("Top control: " + ctrl.toString());
-		this.stack.topControl = ctrl;
-		this.doLayout();
-	}
-
-	/**
-	 * Layout the Main Window
-	 */
-	public void doLayout() {
-		Control ctrl = this.stack.topControl;
-		if (this.container.isDisposed()) {
-			//Note: if the conainter is disposed, we are finished here
-			return;
-		}
-		this.container.layout(true, true);
-		getShell().layout(true, true);
-		// Note: SWT only layouts children! No grandchildren!
-		if (ctrl instanceof StateComposite) {
-			if (!ctrl.isDisposed()) {
-				((StateComposite) ctrl).reloadResources();
-				((StateComposite) ctrl).doLayout();
-			}
-		}
-	}
-
-	/**
-	 * Gets the container composite
-	 *
-	 * @return the container composite
-	 */
-	public Composite getContainer() {
-		return this.container;
-	}
-
-	/**
-	 * Open the window.
-	 *
-	 */
-	public void open() {
-		createContents();
-	}
-
-	/**
-	 * Reload the localization
-	 */
-	public void reloadLocalization() {
-		SWTUtils.setLocalizedText(btn_config, "main.configuration");
-		SWTUtils.setLocalizedToolTipText(btn_config, "main.configuration");
-		SWTUtils.setLocalizedText(btn_open, "common.open");
-		SWTUtils.setLocalizedToolTipText(btn_open, "common.open");
-
-		SWTUtils.setLocalizedText(btn_position, "main.position");
-		SWTUtils.setLocalizedToolTipText(btn_position, "main.position");
-
-		SWTUtils.setLocalizedText(btn_sign, "main.signature");
-		SWTUtils.setLocalizedToolTipText(btn_sign, "main.signature");
-
-		SWTUtils.setLocalizedText(btn_end, "main.done");
-		SWTUtils.setLocalizedToolTipText(btn_end, "main.done");
-
-		Control ctrl = this.stack.topControl;
-		if (ctrl instanceof StateComposite) {
-			if (!ctrl.isDisposed()) {
-				((StateComposite) ctrl).reloadResources();
-				((StateComposite) ctrl).doLayout();
-			}
-		}
-	}
-
-	/**
-	 * Create contents of the window.
-	 */
-	protected void createContents() {
-		this.shell = new Shell();
-		getShell().setSize(this.stateMachine.configProvider.getMainWindowSize());
-		if (System.getProperty("os.name").toLowerCase().contains("mac")) {
-			if (System.getProperty("os.name").contains("OS X")) {
-				hookupOSXMenu();
-			}
-		}
-		try {
-			Display display = Display.getCurrent();
-			Monitor primary = display.getPrimaryMonitor();
-			Rectangle bounds = primary.getBounds();
-			Rectangle main = getShell().getBounds();
-			getShell().setLocation(
-					bounds.x + (bounds.width - main.width) / 2,
-					bounds.y + (bounds.height - main.height) / 2);
-		}
-		catch (SWTError e) {
-			log.debug("Cannot get display", e);
-		}
-		Display.setAppVersion(Constants.APP_VERSION);
-		getShell().setText(Constants.APP_NAME);
-
-		getShell().addShellListener(new ShellAdapter() {
-			@Override
-			public void shellClosed(ShellEvent e) {
-				log.debug("Closing main window");
-				MainWindow.this.stateMachine.configProvider.setMainWindowSizePersistent(Constants.ISNOTNULL(getShell().getSize()));
-				try {
-					MainWindow.this.stateMachine.configProvider.saveToDisk();
-				} catch (IOException e1) {
-					log.error("Error saving configuration", e);
-				}
-				getShell().dispose();
-			}
-		});
-
-		ImageData data = new ImageData(this.getClass().getResourceAsStream(Constants.RES_ICON));
-		Image shellicon = new Image(getShell().getDisplay(), data);
-
-		getShell().setImage(shellicon);
-
-		getShell().setLayout(new FormLayout());
-
-		this.mainbar = new Composite(getShell(), SWT.NONE);
-		this.mainbar.setLayout(new FormLayout());
-		this.mainBarFormData = new FormData();
-		this.mainBarFormData.left = new FormAttachment(0, 10);
-		this.mainBarFormData.right = new FormAttachment(100, -10);
-		this.mainBarFormData.top = new FormAttachment(0, 10);
-		this.mainBarFormData.bottom = new FormAttachment(0, Constants.MAINBAR_HEIGHT);
-		this.mainbar.setLayoutData(this.mainBarFormData);
-
-		this.btn_config = new MainBarRectangleButton(this.mainbar, SWT.NONE);
-		SWTUtils.anchor(btn_config).bottom(100).right(0,50).top(0).left(0);
-		SWTUtils.setLocalizedText(btn_config, "main.configuration");
-		SWTUtils.setLocalizedToolTipText(btn_config, "main.configuration");
-		this.btn_config.addMouseListener(new MouseAdapter() {
-			@Override
-			public void mouseUp(MouseEvent e) {
-				MainWindow.this.stateMachine
-						.jumpToState(new ConfigurationUIState(
-								MainWindow.this.stateMachine));
-			}
-		});
-		this.buttonMap.put(Buttons.CONFIG, this.btn_config);
-
-		InputStream is = this.getClass().getResourceAsStream(Constants.RES_IMG_CONFIG);
-		((MainBarRectangleButton) this.btn_config).setEnabledImage(
-				new Image(Display.getDefault(), new ImageData(is)));
-		is = this.getClass().getResourceAsStream(Constants.RES_IMG_CONFIG_DISABLED);
-		((MainBarRectangleButton) this.btn_config).setDisabledImage(
-				new Image(Display.getDefault(), new ImageData(is)));
-
-		Composite mainbarContainer = new Composite(this.mainbar, SWT.NONE);
-		mainbarContainer.setLayout(new FormLayout());
-		SWTUtils.anchor(mainbarContainer).left(btn_config).right(100).top(0).bottom(100);
-
-		this.btn_open = new MainBarStartButton(mainbarContainer, SWT.NONE);
-		SWTUtils.anchor(btn_open).left(0).right(27, (MainBarButton.SplitFactor / 2)).top(0).bottom(100);
-		SWTUtils.setLocalizedText(btn_open, "common.open");
-		SWTUtils.setLocalizedToolTipText(btn_open, "common.open");
-		this.btn_open.addMouseListener(new MouseAdapter() {
-			@Override
-			public void mouseUp(MouseEvent e) {
-				if (MainWindow.this.stateMachine.status.getCurrentState() instanceof OpenState) {
-					((OpenState) MainWindow.this.stateMachine.status.getCurrentState()).openFileDialog();
-				} else {
-					MainWindow.this.stateMachine.jumpToState(new OpenState(
-							MainWindow.this.stateMachine));
-				}
-			}
-		});
-		this.buttonMap.put(Buttons.OPEN, this.btn_open);
-
-		this.btn_position = new MainBarMiddleButton(mainbarContainer, SWT.NONE);
-		SWTUtils.anchor(btn_position).left(27, -1 * (MainBarButton.SplitFactor / 2)).right(54, (MainBarButton.SplitFactor / 2)).top(0).bottom(100);
-		SWTUtils.setLocalizedText(btn_position, "main.position");
-		SWTUtils.setLocalizedToolTipText(btn_position, "main.position");
-		this.btn_position.addMouseListener(new MouseAdapter() {
-			@Override
-			public void mouseUp(MouseEvent e) {
-				MainWindow.this.stateMachine.jumpToState(new PositioningState(
-						MainWindow.this.stateMachine));
-			}
-		});
-		this.buttonMap.put(Buttons.POSITION, this.btn_position);
-
-		this.btn_sign = new MainBarMiddleButton(mainbarContainer, SWT.NONE);
-		SWTUtils.anchor(btn_sign).left(54, -1 * (MainBarButton.SplitFactor / 2)).right(81, (MainBarButton.SplitFactor / 2)).top(0).bottom(100);
-		SWTUtils.setLocalizedText(btn_sign, "main.signature");
-		SWTUtils.setLocalizedToolTipText(btn_sign, "main.signature");
-		this.btn_sign.addMouseListener(new MouseAdapter() {
-			@Override
-			public void mouseUp(MouseEvent e) {
-				MainWindow.this.stateMachine.jumpToState(new BKUSelectionState(
-						MainWindow.this.stateMachine));
-			}
-		});
-		this.buttonMap.put(Buttons.SIGN, this.btn_sign);
-
-		this.btn_end = new MainBarEndButton(mainbarContainer, SWT.NONE);
-		SWTUtils.anchor(btn_end).left(81, -1 * (MainBarButton.SplitFactor / 2)).right(100).top(0).bottom(100);
-		SWTUtils.setLocalizedText(btn_end, "main.done");
-		SWTUtils.setLocalizedToolTipText(btn_end, "main.done");
-		this.buttonMap.put(Buttons.FINAL, this.btn_end);
-
-		this.container = new Composite(getShell(), SWT.RESIZE);
-		this.containerFormData = new FormData();
-		this.containerFormData.bottom = new FormAttachment(100, -10);
-		this.containerFormData.right = new FormAttachment(100, -10);
-		this.containerFormData.top = new FormAttachment(0, Constants.MAINBAR_HEIGHT + 10);
-		this.containerFormData.left = new FormAttachment(0, 10);
-		this.container.setLayoutData(this.containerFormData);
-		this.stack = new StackLayout();
-		this.container.setLayout(this.stack);
-	}
-
-	/**
-	 * Hook up SWT menu under OS X
-	 */
-	private void hookupOSXMenu() {
-		log.debug("Hooking up OS X menu");
-		CocoaUIEnhancer.hookApplicationMenu(
-			getShell().getDisplay(),
-			/* quitListener */
-			(Event arg0) -> {
-				MainWindow.this.stateMachine.exit();
-			},
-			/* aboutListener */
-			(Event arg0) -> {
-				Dialog dialog = new Dialog(getShell(),
-						Messages.formatString("main.about", Constants.APP_NAME),
-						Constants.APP_NAME_VERSION, BUTTONS.OK, ICON.INFORMATION);
-				dialog.open();
-			},
-			/* preferencesListener */
-			(Event arg0) -> {
-				if (MainWindow.this.stateMachine.status.behavior.getEnabled(Buttons.CONFIG))
-					MainWindow.this.stateMachine.jumpToState(new ConfigurationUIState(MainWindow.this.stateMachine));
-			}
-		);
-	}
-
-	/**
-	 * Update MainWindow to fit new status
-	 */
-	public void applyBehavior() {
-		MainWindowBehavior behavior = this.stateMachine.status.behavior;
-
-		log.debug("Updating MainWindow state for : "
-				+ this.stateMachine.status.getCurrentState().toString());
-
-		for (Buttons button : Buttons.values()) {
-			boolean active = behavior.getActive(button);
-			boolean enabled = behavior.getEnabled(button);
-
-			MainBarButton theButton = this.buttonMap.get(button);
-			if (theButton != null) {
-				theButton.setEnabled(enabled);
-				theButton.setActive(active);
-			}
-		}
-
-		if (behavior.getMainBarVisible()) {
-			this.mainBarFormData.bottom = new FormAttachment(0, Constants.MAINBAR_HEIGHT);
-			this.containerFormData.top = new FormAttachment(0, Constants.MAINBAR_HEIGHT + 10);
-		} else {
-			this.mainBarFormData.bottom = new FormAttachment(0, 0);
-			this.containerFormData.top = new FormAttachment(0, 10);
-		}
-
-		getShell().getDisplay().update();
-		this.mainbar.layout(true, true);
-		this.mainbar.redraw();
-	}
-
-	/**
-	 * @return the shell
-	 */
-	public Shell getShell() {
-		return this.shell;
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/MainWindowBehavior.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/MainWindowBehavior.java
deleted file mode 100644
index ee78b628..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/MainWindowBehavior.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui;
-
-import java.util.EnumMap;
-import java.util.Map;
-
-import at.asit.pdfover.gui.MainWindow.Buttons;
-
-/**
- * Behavior manipulation for Main Window
- */
-public class MainWindowBehavior {
-	/**
-	 * Enabled buttons map
-	 */
-	protected Map<Buttons, Boolean> buttonsEnabled;
-
-	/**
-	 * active buttons map
-	 */
-	protected Map<Buttons, Boolean> buttonsActive;
-
-	/**
-	 * Main bar visible
-	 */
-	protected boolean mainBarVisible;
-
-	/**
-	 *
-	 */
-	public MainWindowBehavior() {
-		this.buttonsActive = new EnumMap<MainWindow.Buttons, Boolean>(MainWindow.Buttons.class);
-		this.buttonsEnabled = new EnumMap<MainWindow.Buttons, Boolean>(MainWindow.Buttons.class);
-		reset();
-	}
-
-	/**
-	 * set active buttons
-	 * @param button
-	 * @param active
-	 */
-	public void setActive(Buttons button, boolean active) {
-		this.buttonsActive.put(button, active);
-	}
-
-	/**
-	 * Gets the active state of a button from main bar
-	 * @param button the button
-	 * @return the active state
-	 */
-	public boolean getActive(Buttons button) {
-		return this.buttonsActive.get(button);
-	}
-
-	/**
-	 * Sets the enabled buttons in the main bar
-	 * @param button
-	 * @param enabled
-	 */
-	public void setEnabled(Buttons button, boolean enabled) {
-		this.buttonsEnabled.put(button, enabled);
-	}
-
-	/**
-	 * Get the enabled state of a button in main bar
-	 * @param button the button
-	 * @return the enabled state
-	 */
-	public boolean getEnabled(Buttons button) {
-		return this.buttonsEnabled.get(button);
-	}
-
-	/**
-	 * Resets all behavior to a default state
-	 * All buttons are inactive
-	 * All buttons are disabled
-	 * Main bar is visible
-	 */
-	public void reset() {
-		for (Buttons button : Buttons.values()) {
-			setActive(button, false);
-			setEnabled(button, false);
-		}
-		setMainBarVisible(true);
-	}
-
-	/**
-	 * Sets the main bar visible
-	 * @param visible
-	 */
-	public void setMainBarVisible(boolean visible) {
-		this.mainBarVisible = visible;
-	}
-
-	/**
-	 * Gets wether the main bar is visible
-	 * @return the visibility of the main bar
-	 */
-	public boolean getMainBarVisible() {
-		return this.mainBarVisible;
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/PlaceholderSelectionGui.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/PlaceholderSelectionGui.java
deleted file mode 100644
index f06e9f92..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/PlaceholderSelectionGui.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui;
-
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-import at.asit.pdfover.gui.utils.SWTUtils;
-
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Dialog;
-
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Label;
-
-
-/**
- *
- */
-public class PlaceholderSelectionGui extends Dialog {
-	/**
-	 * SLF4J Logger instance
-	 **/
-	protected Object result;
-	protected Shell shlInfo;
-	protected Combo placeholderNameDropDown;
-	protected String lblString;
-	protected List<String> placeholderList;
-	private Button btnCancel;
-	private Button btnOk;
-	protected int returnValue;
-
-
-	/**
-	 * Create the dialog.
-	 * @param parent
-	 * @param style
-	 * @param text
-	 * @param lblString
-	 * @param placeholderList
-	 */
-	public PlaceholderSelectionGui(Shell parent, int style, String text, String lblString, List<String> placeholderList) {
-		super(parent, style);
-		setText(text);
-		this.lblString = lblString;
-		this.placeholderList = placeholderList;
-	}
-
-	/**
-	 * Open the dialog.
-	 * @return the result
-	 */
-
-	public int open() {
-		createContents();
-		this.shlInfo.open();
-		this.shlInfo.layout();
-		Display display = getParent().getDisplay();
-		while (!this.shlInfo.isDisposed()) {
-			if (!display.readAndDispatch()) {
-				display.sleep();
-			}
-		}
-		return this.returnValue;
-	}
-
-	/**
-	 * @return
-	 */
-	public int getUserSelection() {
-		return this.returnValue;
-	}
-
-	/**
-	 * Create contents of the dialog.
-	 */
-	private void createContents() {
-		this.shlInfo = new Shell(getParent(), getStyle());
-		this.shlInfo.setSize(290, 195);
-		this.shlInfo.setText("Info");
-		this.shlInfo.setLayout(null);
-
-		this.placeholderNameDropDown = new Combo(this.shlInfo, SWT.NONE);
-		this.placeholderNameDropDown.setBounds(27, 77, 223, 23);
-		addDropDownEntries(this.placeholderList);
-		this.placeholderNameDropDown.select(0);
-
-		this.btnCancel = new Button(this.shlInfo, SWT.NONE);
-		this.btnCancel.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				PlaceholderSelectionGui.this.returnValue = -1;
-				PlaceholderSelectionGui.this.shlInfo.dispose();
-			}
-		});
-		this.btnCancel.setBounds(175, 118, 75, 25);
-		this.btnCancel.setText("Cancel");
-
-		this.btnOk = new Button(this.shlInfo, SWT.NONE);
-		this.btnOk.setBounds(94, 118, 75, 25);
-		this.btnOk.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				PlaceholderSelectionGui.this.returnValue = PlaceholderSelectionGui.this.placeholderNameDropDown.getSelectionIndex();
-				PlaceholderSelectionGui.this.shlInfo.dispose();
-			}
-		});
-		this.btnOk.setText("Ok");
-
-		Label lbLabel = new Label(this.shlInfo, SWT.WRAP);
-		lbLabel.setBounds(27, 10, 223, 41);
-		SWTUtils.setLocalizedText(lbLabel, "positioning.placeholder");
-
-	}
-
-	/**
-	 * @param list
-	 * @param Filling up the placeholder drop down list
-	 */
-	public void addDropDownEntries(List<String> list) {
-		for (String name : list) {
-			this.placeholderNameDropDown.add(name);
-		}
-	}
-
-	/**
-	 *
-	 */
-	protected void close() {
-		this.close();
-	}
-
-	@Override
-	protected void checkSubclass() {
-	    //  allow subclass
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/BKUHelper.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/BKUHelper.java
deleted file mode 100644
index 382a3d24..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/BKUHelper.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.bku;
-
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.UsernamePasswordCredentials;
-// Imports
-import org.apache.commons.httpclient.auth.AuthScope;
-import org.apache.http.client.config.CookieSpecs;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-
-/**
- *
- */
-public class BKUHelper {
-	/**
-	 * SLF4J Logger instance
-	 **/
-	@SuppressWarnings("unused")
-	private static final Logger log = LoggerFactory.getLogger(BKUHelper.class);
-
-	/* public static HttpClient getHttpClient(boolean useProxy) {
-	 HttpClient client = new HttpClient();
-	 client.getParams().setParameter("http.useragent",
-	 Constants.APP_NAME_VERSION);
-
-	  if (useProxy) {
-	 String host = System.getProperty("http.proxyHost");
-	 String port = System.getProperty("http.proxyPort");
-	 if (host != null && !host.isEmpty() &&
-	 port != null && !port.isEmpty()) {
-	 int p = Integer.parseInt(port);
-	 client.getHostConfiguration().setProxy(host, p);
-	 String user = System.getProperty("http.proxyUser");
-	 String pass = System.getProperty("http.proxyPassword");
-	 if (user != null && !user.isEmpty() && pass != null) {
-	 client.getState().setProxyCredentials(new AuthScope(host, p),
-	 new UsernamePasswordCredentials(user, pass));
-	 }
-	 }
-	 }
-
-	 return client;
-	 }*/
-
-	/**
-	 * Get a HTTP Client instance
-	 *
-	 * @param useProxy
-	 *            whether to use a potentially set proxy
-	 * @return the HttpClient
-	 */
-	@SuppressWarnings("deprecation")
-	public static HttpClient getHttpClient(boolean useProxy) {
-		HttpClient client = new HttpClient();
-		client.getParams().setParameter("http.useragent",
-				Constants.APP_NAME_VERSION);
-
-
-		client.getParams().setParameter("http.protocol.cookie-policy", CookieSpecs.BROWSER_COMPATIBILITY);
-
-		if (useProxy) {
-			String host = System.getProperty("http.proxyHost");//
-			String port = System.getProperty("http.proxyPort");//
-			if (host != null && !host.isEmpty() && port != null && !port.isEmpty()) {
-				int p = Integer.parseInt(port);
-				client.getHostConfiguration().setProxy(host, p);
-				String user = System.getProperty("http.proxyUser");//
-				String pass = System.getProperty("http.proxyPassword");//
-				if (user != null && !user.isEmpty() && pass != null) {
-					client.getState().setProxyCredentials(new AuthScope(host, p),
-							new UsernamePasswordCredentials(user, pass));
-				}
-			}
-		}
-
-		return client;
-
-	}
-
-	/**
-	 * Get a HTTP Client instance
-	 *
-	 * @return the HttpClient
-	 */
-	public static HttpClient getHttpClient() {
-		return getHttpClient(false);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/LocalBKUConnector.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/LocalBKUConnector.java
deleted file mode 100644
index 1f68a020..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/LocalBKUConnector.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.bku;
-
-// Imports
-import java.io.IOException;
-import java.net.Socket;
-
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpException;
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.httpclient.methods.PostMethod;
-import org.apache.commons.httpclient.methods.multipart.FilePart;
-import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
-import org.apache.commons.httpclient.methods.multipart.Part;
-import org.apache.commons.httpclient.methods.multipart.StringPart;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.utils.FileUploadSource;
-import at.asit.pdfover.signer.BkuSlConnector;
-import at.asit.pdfover.signer.SignatureException;
-import at.asit.pdfover.signer.pdfas.PdfAs4SLRequest;
-
-/**
- *
- */
-public class LocalBKUConnector implements BkuSlConnector {
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(LocalBKUConnector.class);
-
-	private static boolean isAvailable = false;
-	public static boolean IsAvailable() { return isAvailable; }
-	private static Thread pollingThread = new Thread(() -> {
-		while (true) {
-			try { Thread.sleep(isAvailable ? 30000 : 5000); } catch (InterruptedException e) {}
-			try (Socket socket = new Socket("127.0.0.1", 3495)) {
-				isAvailable = true;
-			} catch (IOException e) {
-				isAvailable = false;
-			}
-		}
-	}, "LocalBKUProbeThread");
-	static {
-		pollingThread.setDaemon(true);
-		pollingThread.start();
-	}
-	
-
-	/**
-	 * HTTP Response server HEADER
-	 */
-	public final static String BKU_RESPONSE_HEADER_SERVER = "server";
-
-	/**
-	 * HTTP Response user-agent HEADER
-	 */
-	public final static String BKU_RESPONSE_HEADER_USERAGENT = "user-agent";
-
-	/**
-	 * HTTP Response SignatureLayout HEADER
-	 */
-	public final static String BKU_RESPONSE_HEADER_SIGNATURE_LAYOUT = "SignatureLayout";
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.signator.BkuSlConnector#handleSLRequest(java.lang.String)
-	 */
-	@Override
-	public String handleSLRequest(PdfAs4SLRequest request) throws SignatureException {
-		try {
-			HttpClient client = BKUHelper.getHttpClient();
-			PostMethod method = new PostMethod(Constants.LOCAL_BKU_URL);
-
-			String sl_request = request.xmlRequest;
-			if (request.signatureData == null) {
-				method.addParameter("XMLRequest", sl_request);
-			} else {
-				StringPart xmlpart = new StringPart(
-						"XMLRequest", sl_request, "UTF-8");
-
-				FilePart filepart = new FilePart("fileupload", new FileUploadSource(request.signatureData));
-
-				Part[] parts = { xmlpart, filepart };
-
-				method.setRequestEntity(new MultipartRequestEntity(parts, method
-						.getParams()));
-			}
-			log.trace("SL REQUEST: " + sl_request);
-
-			int returnCode = client.executeMethod(method);
-
-			if (returnCode != HttpStatus.SC_OK) {
-				throw new HttpException(
-						method.getResponseBodyAsString());
-			}
-
-			return method.getResponseBodyAsString();
-		} catch (HttpException e) {
-			log.error("LocalBKUConnector: ", e);
-			throw new SignatureException(e);
-		} catch (IOException e) {
-			log.error("LocalBKUConnector: ", e);
-			throw new SignatureException(e);
-		}
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/MobileBKUConnector.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/MobileBKUConnector.java
deleted file mode 100644
index 779e24c6..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/MobileBKUConnector.java
+++ /dev/null
@@ -1,439 +0,0 @@
-package at.asit.pdfover.gui.bku;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Base64;
-import java.util.List;
-import java.util.Optional;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-import org.apache.hc.client5.http.classic.methods.HttpGet;
-import org.apache.hc.client5.http.classic.methods.HttpPost;
-import org.apache.hc.client5.http.entity.UrlEncodedFormEntity;
-import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder;
-import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
-import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
-import org.apache.hc.client5.http.impl.classic.HttpClients;
-import org.apache.hc.core5.http.ClassicHttpRequest;
-import org.apache.hc.core5.http.ContentType;
-import org.apache.hc.core5.http.Header;
-import org.apache.hc.core5.http.HttpEntity;
-import org.apache.hc.core5.http.HttpStatus;
-import org.apache.hc.core5.http.NameValuePair;
-import org.apache.hc.core5.http.NoHttpResponseException;
-import org.apache.hc.core5.http.ParseException;
-import org.apache.hc.core5.http.ProtocolException;
-import org.apache.hc.core5.http.io.entity.EntityUtils;
-import org.apache.hc.core5.http.message.BasicNameValuePair;
-import org.json.JSONObject;
-import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
-import org.jsoup.nodes.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.bku.mobile.ATrustParser;
-import at.asit.pdfover.gui.workflow.states.MobileBKUState;
-import at.asit.pdfover.gui.workflow.states.MobileBKUState.UsernameAndPassword;
-import at.asit.pdfover.signer.BkuSlConnector;
-import at.asit.pdfover.signer.SignatureException;
-import at.asit.pdfover.signer.UserCancelledException;
-import at.asit.pdfover.signer.pdfas.PdfAs4SLRequest;
-import at.asit.webauthn.WebAuthN;
-
-import static at.asit.pdfover.commons.Constants.ISNOTNULL;
-
-public class MobileBKUConnector implements BkuSlConnector {
-    private static final Logger log = LoggerFactory.getLogger(MobileBKUConnector.class);
-    
-    private final @Nonnull MobileBKUState state;
-    public MobileBKUConnector(@Nonnull MobileBKUState state) {
-        this.state = state;
-        this.wantsFido2Default = WebAuthN.isAvailable() && state.getConfig().getFido2ByDefault();
-        state.storeRememberedCredentialsTo(this.credentials);
-    }
-
-    private class UserDisplayedError extends Exception {
-        private final @Nonnull String msg;
-        @Override public @Nonnull String getMessage() { return this.msg; }
-        private UserDisplayedError(@Nonnull String s) { this.msg = s; }
-    }
-
-    public @Nonnull UsernameAndPassword credentials = new UsernameAndPassword();
-
-    /**
-     * This method takes the SLRequest from PDF-AS, and blocks until it has obtained a response
-     */
-    @Override
-	public String handleSLRequest(PdfAs4SLRequest slRequest) throws SignatureException, UserCancelledException {
-        log.debug("Got security layer request: (has file part: {})\n{}", (slRequest.signatureData != null), slRequest.xmlRequest);
-        try (final CloseableHttpClient httpClient = HttpClients.custom().disableRedirectHandling().build()) {
-            ClassicHttpRequest currentRequest = buildInitialRequest(slRequest);
-            ATrustParser.Result response;
-            while ((response = sendHTTPRequest(httpClient, currentRequest)).slResponse == null)
-                currentRequest = presentResponseToUserAndReturnNextRequest(ISNOTNULL(response.html));
-            log.debug("Returning security layer response:\n{}", response.slResponse);
-            return response.slResponse;
-        } catch (UserDisplayedError e) {
-            state.showUnrecoverableError(e.getMessage());
-            throw new IllegalStateException("unreachable", e); /* showUnrecoverableError always throws */
-        } catch (UserCancelledException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new SignatureException(e);
-        }
-    }
-
-    /* some anti-infinite-loop safeguards so we don't murder the atrust servers by accident */
-    private int loopHTTPRequestCounter = 0;
-    private Long lastHTTPRequestTime = null;
-    /**
-     * Sends the specified request, following redirects (including meta-tag redirects) recursively
-     * @return The JSOUP document retrieved
-     * @throws IOException on HTTP error codes
-     * @throws ProtocolException
-     * @throws URISyntaxException
-     * @throws InterruptedException
-     */
-    private @Nonnull ATrustParser.Result sendHTTPRequest(CloseableHttpClient httpClient, ClassicHttpRequest request) throws IOException, ProtocolException, URISyntaxException, UserDisplayedError {
-        long now = System.nanoTime();
-        if ((lastHTTPRequestTime != null) && ((now - lastHTTPRequestTime) < 2e+9)) { /* less than 2s since last request */
-            ++loopHTTPRequestCounter;
-            if (loopHTTPRequestCounter > 250)
-                throw new IOException("Infinite loop protection triggered");
-        } else {
-            loopHTTPRequestCounter = 0;
-        }
-        lastHTTPRequestTime = now;
-
-        log.debug("Sending {} request to '{}'...", request.getMethod(), request.getUri().toString());
-        try (final CloseableHttpResponse response = httpClient.execute(request)) {
-            int httpStatus = response.getCode();
-            if ((httpStatus == HttpStatus.SC_MOVED_PERMANENTLY) || (httpStatus == HttpStatus.SC_MOVED_TEMPORARILY)) {
-                Header redirectPath = response.getHeader("location");
-                if (redirectPath == null)
-                    throw new IOException("Received HTTP redirect, but no Location header.");
-                return sendHTTPRequest(httpClient, buildRedirectedRequest(request.getUri(), redirectPath.getValue()));
-            }
-
-            if (httpStatus != HttpStatus.SC_OK) {
-                switch (httpStatus) {
-                    case HttpStatus.SC_REQUEST_TOO_LONG: throw new UserDisplayedError(Messages.getString("atrusterror.http_413"));
-                    default: throw new UserDisplayedError(Messages.formatString("atrusterror.http_generic", httpStatus, Optional.ofNullable(response.getReasonPhrase()).orElse("(null)")));
-                }
-            }
-                        
-            Header refreshHeader = response.getHeader("refresh");
-            if (refreshHeader != null)
-                return sendHTTPRequest(httpClient, buildRefreshHeaderRequest(request.getUri(), refreshHeader.getValue()));
-
-            HttpEntity responseEntity = response.getEntity();
-            if (responseEntity == null)
-                throw new IOException("Did not get a HTTP body (entity == null)");
-            
-            ContentType contentType = ContentType.parse(responseEntity.getContentType());
-            String entityBody = EntityUtils.toString(response.getEntity(),contentType.getCharset());
-            if (entityBody == null)
-                throw new IOException("Did not get a HTTP body (entity content == null)");
-
-            if ("text/html".equals(contentType.getMimeType())) {
-                Document resultDocument = Jsoup.parse(entityBody, request.getUri().toASCIIString());
-                if (resultDocument == null)
-                {
-                    log.error("Failed to parse A-Trust server response as HTML:\n{}", entityBody);
-                    throw new IOException("Failed to parse HTML");
-                }
-
-                Element metaRefresh = resultDocument.selectFirst("meta[http-equiv=\"refresh\"i]");
-                if (metaRefresh != null) {
-                    String refreshContent = metaRefresh.attr("content");
-                    if (!refreshContent.isEmpty())
-                        return sendHTTPRequest(httpClient, buildRefreshHeaderRequest(request.getUri(), refreshContent));
-                }
-                return ATrustParser.Parse(resultDocument);
-            } else {
-                return ATrustParser.Parse(request.getUri(), contentType.getMimeType(), entityBody);
-            }
-        }
-    }
-
-    /**
-     * Builds a HttpRequest for the given base URI and (potentially relative) redirect path
-     */
-    private static @Nonnull ClassicHttpRequest buildRedirectedRequest(URI baseURI, String redirectLocation) {
-        log.debug("following redirect: {}", redirectLocation);
-        return new HttpGet(baseURI.resolve(redirectLocation));
-    }
-
-    /**
-     * Builds a HttpRequest for redirection to a given Refresh header value
-     */
-    private static @Nonnull ClassicHttpRequest buildRefreshHeaderRequest(URI baseURI, String refreshHeader) throws IOException {
-        // refresh value is delay in seconds, semicolon, URL=, url
-        Pattern pattern = Pattern.compile("^\\s*[0-9\\.]+\\s*;\\s*(?:[uU][rR][lL]\s*=\s*)(.+)$");
-        Matcher matcher = pattern.matcher(refreshHeader);
-        if (!matcher.matches())
-            throw new IOException("Got invalid Refresh header with value \"" + refreshHeader + "\".");
-        String redirectURL = matcher.group(1);
-        return buildRedirectedRequest(baseURI, redirectURL);
-    }
-
-    /**
-     * Builds the initial request to A-Trust based on the specified SL request
-     */
-    private static @Nonnull ClassicHttpRequest buildInitialRequest(PdfAs4SLRequest slRequest) {
-        HttpPost post = new HttpPost(Constants.MOBILE_BKU_URL);
-        if (slRequest.signatureData != null) {
-            post.setEntity(MultipartEntityBuilder.create()
-                .addBinaryBody("fileupload", slRequest.signatureData.getByteArray(), ContentType.APPLICATION_PDF, "sign.pdf")
-                .addTextBody("XMLRequest", slRequest.xmlRequest)
-                .build());
-        } else {
-            post.setEntity(UrlEncodedFormEntityBuilder.create()
-                .add("XMLRequest", slRequest.xmlRequest)
-                .build());
-        }
-        return post;
-    }
-
-    private static @Nonnull ClassicHttpRequest buildFormSubmit(@Nonnull ATrustParser.HTMLResult html, @CheckForNull String submitButton) {
-        HttpPost post = new HttpPost(html.formTarget);
-        
-        var builder = MultipartEntityBuilder.create();
-        for (var pair : html.iterateFormOptions())
-            builder.addTextBody(pair.getKey(), pair.getValue());
-
-        if (submitButton != null) {
-            var submitButtonElm = html.htmlDocument.selectFirst(submitButton);
-            if (submitButtonElm != null) {
-                if ("input".equalsIgnoreCase(submitButtonElm.tagName())) {
-                    if ("submit".equalsIgnoreCase(submitButtonElm.attr("type"))) {
-                        String name = submitButtonElm.attr("name");
-                        if (!name.isEmpty())
-                            builder.addTextBody(name, submitButtonElm.attr("value"));
-                    } else {
-                        log.warn("Skipped specified submitButton {}, type is {} (not submit)", submitButton, submitButtonElm.attr("type"));
-                    }
-                } else {
-                    log.warn("Skipped specified submitButton {}, tag name is {} (not input)", submitButton, submitButtonElm.tagName());
-                }
-            } else {
-                log.warn("Skipped specified submitButton {}, element not found", submitButton);
-            }
-        }
-
-        post.setEntity(builder.build());
-        return post;
-    }
-
-    private static class LongPollThread extends Thread implements AutoCloseable {
-        
-        private final CloseableHttpClient httpClient = HttpClients.createDefault();
-        private final HttpGet request;
-        private final Runnable signal;
-        private boolean done = false;
-
-        @Override
-        public void run() {
-            long timeout = System.nanoTime() + (300l * 1000l * 1000l * 1000l); /* a-trust timeout is 5 minutes */
-            log.debug("longPollThread hello");
-            while (!done) {
-                try (final CloseableHttpResponse response = httpClient.execute(request)) {
-                    JSONObject jsonResponse = new JSONObject(EntityUtils.toString(response.getEntity()));
-                    if (jsonResponse.getBoolean("Fin"))
-                        signal.run();
-                    else if (jsonResponse.getBoolean("Wait"))
-                    {
-                        log.debug("longPollThread continue...");
-                        continue;
-                    }
-                    else if (jsonResponse.getBoolean("Error"))
-                        signal.run(); /* will trigger reload and find error; this is the same thing a-trust does */
-                    else {
-                        log.warn("Unknown long poll response:\n{}", jsonResponse.toString(2));
-                        break;
-                    }
-                } catch (NoHttpResponseException e) {
-                    if (timeout <= System.nanoTime())
-                        signal.run(); /* reload to find the timeout error */
-                    continue; /* httpclient timeout */
-                } catch (IOException | ParseException | IllegalStateException e) {
-                    if (done) break;
-                    log.warn("QR code long polling exception", e);
-                    /* sleep so we don't hammer a-trust too hard in case this goes wrong */
-                    try { Thread.sleep(5000); } catch (InterruptedException e2) {}
-                }
-            }
-            log.debug("longPollThread goodbye");
-        }
-
-        public LongPollThread(URI uri, Runnable signal) {
-            this.request = new HttpGet(uri);
-            this.signal = signal;
-        }
-
-        @Override
-        public void close() {
-            done = true;
-            if (this.request != null)
-                this.request.abort();
-
-            if (this.isAlive())
-                try { this.join(1000); } catch (InterruptedException e) {}
-            
-            if (this.httpClient != null)
-                try { this.httpClient.close(); } catch (IOException e) { log.warn("Auto-close of long-poll HTTP client threw exception", e); }
-        }
-        
-    }
-
-    private boolean wantsFido2Default;
-    /**
-     * Main lifting function for MobileBKU UX
-     * @return the next request to make
-     */
-    private @Nonnull ClassicHttpRequest presentResponseToUserAndReturnNextRequest(@Nonnull ATrustParser.HTMLResult html) throws UserCancelledException {
-        if ((html.errorBlock == null) && (html.usernamePasswordBlock == null)) { /* successful username/password auth */
-            if ((this.credentials.username != null) && (this.credentials.password != null))
-                state.rememberCredentialsIfNecessary(this.credentials);
-        }
-
-        if (wantsFido2Default && (html.fido2Link != null)) {
-            wantsFido2Default = false;
-            return new HttpGet(html.fido2Link);
-        }
-
-        if (html.autoSkipBlock != null) {
-            return buildFormSubmit(html, html.autoSkipBlock.submitButton);
-        }
-        if (html.interstitialBlock != null) {
-            this.state.showInformationMessage(html.interstitialBlock.interstitialMessage);
-            return buildFormSubmit(html, html.interstitialBlock.submitButton);
-        }
-        if (html.errorBlock != null) {
-            try {
-                this.credentials.password = null;
-                this.state.clearRememberedPassword();
-
-                if (html.errorBlock.isRecoverable)
-                    this.state.showRecoverableError(html.errorBlock.errorText);
-                else
-                    this.state.showUnrecoverableError(html.errorBlock.errorText);
-                return buildFormSubmit(html, "#Button_Back");
-            } catch (UserCancelledException e) {
-                return buildFormSubmit(html, "#Button_Cancel");
-            }
-        }
-        if (html.usernamePasswordBlock != null) {
-            try {
-                while ((this.credentials.username == null) || (this.credentials.password == null)) {
-                    this.state.getCredentialsFromUserTo(this.credentials, html.usernamePasswordBlock.errorMessage);
-                }
-                html.usernamePasswordBlock.setUsernamePassword(this.credentials.username, this.credentials.password);
-                return buildFormSubmit(html, "#Button_Identification");
-            } catch (UserCancelledException e) {
-                return buildFormSubmit(html, "#Button_Cancel");
-            }
-        }
-        if (html.smsTanBlock != null) {
-            MobileBKUState.SMSTanResult result = this.state.getSMSTanFromUser(
-                html.smsTanBlock.referenceValue, html.signatureDataLink,
-                html.fido2Link != null, html.smsTanBlock.errorMessage);
-            
-            switch (result.type) {
-                case TO_FIDO2: if (html.fido2Link != null) return new HttpGet(html.fido2Link);
-                case SMSTAN: html.smsTanBlock.setTAN(result.smsTan); return buildFormSubmit(html, "#SignButton");
-            }
-            return new HttpGet(html.htmlDocument.baseUri());
-        }
-        if (html.qrCodeBlock != null) {
-            try (LongPollThread longPollThread = new LongPollThread(html.qrCodeBlock.pollingURI, () -> { this.state.signalQRScanned(); })) {
-                this.state.showQRCode(html.qrCodeBlock.referenceValue, html.qrCodeBlock.qrCodeURI, html.signatureDataLink, html.smsTanLink != null, html.fido2Link != null, html.qrCodeBlock.errorMessage);
-                longPollThread.start();
-                var result = this.state.waitForQRCodeResult();
-                switch (result) {
-                    case UPDATE: break;
-                    case TO_FIDO2: if (html.fido2Link != null) return new HttpGet(html.fido2Link); break;
-                    case TO_SMS: if (html.smsTanLink != null) return new HttpGet(html.smsTanLink); break;
-                }
-                return new HttpGet(html.htmlDocument.baseUri());
-            }
-        }
-        if (html.waitingForAppBlock != null) {
-            try (LongPollThread longPollThread = new LongPollThread(html.waitingForAppBlock.pollingURI, () -> { this.state.signalAppOpened(); })) {
-                this.state.showWaitingForAppOpen(html.waitingForAppBlock.referenceValue, html.signatureDataLink, html.smsTanLink != null, html.fido2Link != null);
-                longPollThread.start();
-                var result = this.state.waitForAppOpen();
-                switch (result) {
-                    case UPDATE: break;
-                    case TO_FIDO2: if (html.fido2Link != null) return new HttpGet(html.fido2Link); break;
-                    case TO_SMS: if (html.smsTanLink != null) return new HttpGet(html.smsTanLink); break;
-                }
-                return new HttpGet(html.htmlDocument.baseUri());
-            }
-        }
-        if (html.waitingForBiometryBlock != null) {
-            try (LongPollThread longPollThread = new LongPollThread(html.waitingForBiometryBlock.pollingURI, () -> { this.state.signalAppBiometryDone(); })) {
-                this.state.showWaitingForAppBiometry(html.waitingForBiometryBlock.referenceValue, html.signatureDataLink, html.smsTanLink != null, html.fido2Link != null);
-                longPollThread.start();
-                var result = this.state.waitForAppBiometry();
-                switch (result) {
-                    case UPDATE: break;
-                    case TO_FIDO2: if (html.fido2Link != null) return new HttpGet(html.fido2Link); break;
-                    case TO_SMS: if (html.smsTanLink != null) return new HttpGet(html.smsTanLink); break;
-                }
-                return new HttpGet(html.htmlDocument.baseUri());
-            }
-        }
-        if (html.fido2Block != null) {
-            
-            var fido2Result = this.state.promptUserForFIDO2Auth(html.fido2Block.fidoOptions, html.signatureDataLink, html.smsTanLink != null);
-
-            switch (fido2Result.type) {
-                case TO_SMS: return new HttpGet(html.smsTanLink);
-                case CREDENTIAL: break;
-            }
-
-            var fido2Assertion = ISNOTNULL(fido2Result.credential);
-
-            Base64.Encoder base64 = Base64.getEncoder();
-            
-            JSONObject aTrustAssertion = new JSONObject();
-            aTrustAssertion.put("id", fido2Assertion.id);
-            aTrustAssertion.put("rawId", base64.encodeToString(fido2Assertion.rawId));
-            aTrustAssertion.put("type", fido2Assertion.type);
-            aTrustAssertion.put("extensions", new JSONObject()); // TODO fix extensions in library
-
-            JSONObject aTrustAssertionResponse = new JSONObject();
-            aTrustAssertion.put("response", aTrustAssertionResponse);
-            aTrustAssertionResponse.put("authenticatorData", base64.encodeToString(fido2Assertion.response.authenticatorData));
-            aTrustAssertionResponse.put("clientDataJson", base64.encodeToString(fido2Assertion.response.clientDataJSON));
-            aTrustAssertionResponse.put("signature", base64.encodeToString(fido2Assertion.response.signature));
-            if (fido2Assertion.response.userHandle != null)
-                aTrustAssertionResponse.put("userHandle", base64.encodeToString(fido2Assertion.response.userHandle));
-            else
-                aTrustAssertionResponse.put("userHandle", JSONObject.NULL);
-            
-            html.fido2Block.setFIDOResult(aTrustAssertion.toString());
-            return buildFormSubmit(html, "#FidoContinue");
-        }
-        throw new IllegalStateException("No top-level block is set? Something has gone terribly wrong.");
-    }
-
-    private static class UrlEncodedFormEntityBuilder {
-        private UrlEncodedFormEntityBuilder() {}
-        private List<NameValuePair> values = new ArrayList<>();
-        public static @Nonnull UrlEncodedFormEntityBuilder create() { return new UrlEncodedFormEntityBuilder(); }
-        public @Nonnull UrlEncodedFormEntityBuilder add(String key, String value) { values.add(new BasicNameValuePair(key, value)); return this; }
-        public @Nonnull UrlEncodedFormEntity build() { return new UrlEncodedFormEntity(values, Charset.forName("utf-8")); }
-    }
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/ATrustParser.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/ATrustParser.java
deleted file mode 100644
index 89f53629..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/ATrustParser.java
+++ /dev/null
@@ -1,379 +0,0 @@
-package at.asit.pdfover.gui.bku.mobile;
-
-import java.lang.reflect.InvocationTargetException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-import org.jsoup.Jsoup;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static at.asit.pdfover.commons.Constants.ISNOTNULL;
-
-public class ATrustParser {
-    private static final Logger log = LoggerFactory.getLogger(ATrustParser.class);
-
-    private static class ComponentParseFailed extends Exception {}
-
-    private static class TopLevelFormBlock {
-        protected final @Nonnull org.jsoup.nodes.Document htmlDocument;
-        protected final @Nonnull Map<String, String> formOptions;
-        protected TopLevelFormBlock(@Nonnull org.jsoup.nodes.Document d, @Nonnull Map<String,String> fO) { this.htmlDocument = d; this.formOptions = fO; }
-
-        protected void abortIfElementMissing(@Nonnull String selector) throws ComponentParseFailed {
-            if (this.htmlDocument.selectFirst(selector) != null) return;
-            log.debug("Tested for element {} -- not found.", selector);
-            throw new ComponentParseFailed();
-        }
-        protected @Nonnull org.jsoup.nodes.Element getElementEnsureNotNull(@Nonnull String selector) throws ComponentParseFailed {
-            var elm = this.htmlDocument.selectFirst(selector);
-            if (elm == null) { log.warn("Expected element not found in response: {}", selector); throw new ComponentParseFailed(); }
-            return elm;
-        }
-        protected @Nonnull String getAttributeEnsureNotNull(@Nonnull String selector, @Nonnull String attribute) throws ComponentParseFailed {
-            var elm = getElementEnsureNotNull(selector);
-            if (!elm.hasAttr(attribute)) { log.warn("Element {} is missing expected attribute '{}'.", selector, attribute); throw new ComponentParseFailed(); }
-            return ISNOTNULL(elm.attr(attribute));
-        }
-        protected @Nonnull URI getURIAttributeEnsureNotNull(@Nonnull String selector, @Nonnull String attribute) throws ComponentParseFailed {
-            String value = getAttributeEnsureNotNull(selector, attribute);
-            try {
-                return new URI(value);
-            } catch (URISyntaxException e) {
-                if (attribute.startsWith("abs:"))
-                    attribute = ISNOTNULL(attribute.substring(4));
-                log.warn("Element {} attribute {} is '{}', could not be parsed as URI", selector, attribute, getAttributeEnsureNotNull(selector, attribute));
-                throw new ComponentParseFailed();
-            }
-        }
-        protected @Nonnull URI getLongPollURI() throws ComponentParseFailed {
-            var pollingScriptElm = getElementEnsureNotNull("#jsLongPoll script");
-            String pollingScript = pollingScriptElm.data();
-            int startIdx = pollingScript.indexOf("qrpoll(\"");
-            if (startIdx < 0) { log.warn("Failed to find 'qrpoll(\"' in jsLongPoll script:\n{}", pollingScript); throw new ComponentParseFailed(); }
-            startIdx += 8;
-
-            int endIdx = pollingScript.indexOf("\");", startIdx);
-            if (endIdx < 0) { log.warn("Failed to find qrpoll terminator '\");' in jsLongPoll script:\n{}", pollingScript); throw new ComponentParseFailed(); }
-
-            String pollingUriString = pollingScript.substring(startIdx, endIdx);
-            try {
-                return ISNOTNULL(new URI(pollingScriptElm.baseUri()).resolve(pollingUriString));
-            } catch (URISyntaxException e) {
-                log.warn("Long-poll URI '{}' could not be parsed", pollingUriString);
-                throw new ComponentParseFailed();
-            }
-        }
-    }
-
-    public static class AutoSkipBlock extends TopLevelFormBlock {
-        public final @Nonnull String submitButton;
-
-        private AutoSkipBlock(@Nonnull org.jsoup.nodes.Document htmlDocument, @Nonnull Map<String, String> formOptions) throws ComponentParseFailed {
-            super(htmlDocument, formOptions);
-            if (htmlDocument.baseUri().contains("/tanAppInfo.aspx")) {
-                this.submitButton = "#NextBtn";
-            } else { throw new ComponentParseFailed(); }
-        }
-    }
-
-    public static class InterstitialBlock extends TopLevelFormBlock {
-        public final @Nonnull String submitButton;
-        public final @Nonnull String interstitialMessage;
-
-        private InterstitialBlock(@Nonnull org.jsoup.nodes.Document htmlDocument, @Nonnull Map<String, String> formOptions) throws ComponentParseFailed {
-            super(htmlDocument, formOptions);
-            if (htmlDocument.baseUri().contains("/ExpiresInfo.aspx")) {
-                this.interstitialMessage = ISNOTNULL(getElementEnsureNotNull("#Label2").ownText());
-                this.submitButton = "#Button_Next";
-            } else { throw new ComponentParseFailed(); }
-        }
-    }
-
-    public static class ErrorBlock extends TopLevelFormBlock {
-        public final boolean isRecoverable;
-        public final @Nonnull String errorText;
-
-        private ErrorBlock(@Nonnull org.jsoup.nodes.Document htmlDocument, @Nonnull Map<String, String> formOptions) throws ComponentParseFailed {
-            super(htmlDocument, formOptions);
-
-            try {
-                String documentPath = new URI(htmlDocument.baseUri()).getPath();
-                String aspxFile = documentPath.substring(documentPath.lastIndexOf('/'));
-
-                // gods this is such a hack, why can't they have a proper error element or something
-                if (!(aspxFile.startsWith("/error") && aspxFile.endsWith(".aspx")))
-                    throw new ComponentParseFailed();
-            } catch (URISyntaxException ex) {
-                log.warn("Failed to parse document base URI as URI? ({})", htmlDocument.baseUri());
-                throw new ComponentParseFailed();
-            }
-
-            this.isRecoverable = (htmlDocument.selectFirst("#Button_Back") != null);
-
-            StringBuilder errorText = new StringBuilder(getElementEnsureNotNull("#Label1").ownText().trim());
-            var detailLabel = this.htmlDocument.selectFirst("#LabelDetail");
-            if (detailLabel != null)
-                errorText.append("\n").append(detailLabel.ownText().trim());
-            this.errorText = ISNOTNULL(errorText.toString());
-        }
-    }
-
-    public static class UsernamePasswordBlock extends TopLevelFormBlock {
-        private final @Nonnull String usernameKey;
-        private final @Nonnull String passwordKey;
-        public final @CheckForNull String errorMessage;
-
-        public void setUsernamePassword(String username, String password) {
-            formOptions.put(usernameKey, username); formOptions.put(passwordKey, password);
-        }
-
-        private UsernamePasswordBlock(@Nonnull org.jsoup.nodes.Document htmlDocument, @Nonnull Map<String, String> formOptions) throws ComponentParseFailed {
-            super(htmlDocument, formOptions);
-            abortIfElementMissing("#handynummer");
-            this.usernameKey = getAttributeEnsureNotNull("#handynummer", "name");
-            this.passwordKey = getAttributeEnsureNotNull("#signaturpasswort", "name");
-            this.errorMessage = null;
-        }
-    }
-
-    public static class SMSTanBlock extends TopLevelFormBlock {
-        private final @Nonnull String tanKey;
-        public final @Nonnull String referenceValue;
-        public final @CheckForNull String errorMessage;
-
-        public void setTAN(String tan) {
-            formOptions.put(tanKey, tan);
-        }
-
-        private SMSTanBlock(@Nonnull org.jsoup.nodes.Document htmlDocument, @Nonnull Map<String, String> formOptions) throws ComponentParseFailed {
-            super(htmlDocument, formOptions);
-            abortIfElementMissing("#input_tan");
-            this.tanKey = getAttributeEnsureNotNull("#input_tan", "name");
-            this.referenceValue = ISNOTNULL(getElementEnsureNotNull("#vergleichswert").ownText());
-            this.errorMessage = null;
-        }
-    }
-
-    public static class QRCodeBlock extends TopLevelFormBlock {
-        public final @Nonnull String referenceValue;
-        public final @Nonnull URI qrCodeURI;
-        public final @Nonnull URI pollingURI;
-        public final @Nullable String errorMessage;
-
-        private QRCodeBlock(@Nonnull org.jsoup.nodes.Document htmlDocument, @Nonnull Map<String, String> formOptions) throws ComponentParseFailed {
-            super(htmlDocument, formOptions);
-            abortIfElementMissing("#qrimage");
-            
-            this.referenceValue = ISNOTNULL(getElementEnsureNotNull("#vergleichswert").ownText());
-            this.qrCodeURI = getURIAttributeEnsureNotNull("#qrimage", "abs:src");
-            this.pollingURI = getLongPollURI();
-
-            this.errorMessage = null;
-        }
-    }
-
-    public static class WaitingForAppBlock extends TopLevelFormBlock {
-        public final @Nonnull String referenceValue;
-        public final @Nonnull URI pollingURI;
-
-        private WaitingForAppBlock(@Nonnull org.jsoup.nodes.Document htmlDocument, @Nonnull Map<String, String> formOptions) throws ComponentParseFailed {
-            super(htmlDocument, formOptions);
-            abortIfElementMissing("#smartphoneAnimation");
-
-            this.referenceValue = ISNOTNULL(getElementEnsureNotNull("#vergleichswert").ownText());
-            this.pollingURI = getLongPollURI();            
-        }
-    }
-
-    public static class WaitingForBiometryBlock extends TopLevelFormBlock {
-        public final @Nonnull String referenceValue;
-        public final @Nonnull URI pollingURI;
-
-        private WaitingForBiometryBlock(@Nonnull org.jsoup.nodes.Document htmlDocument, @Nonnull Map<String, String> formOptions) throws ComponentParseFailed {
-            super(htmlDocument, formOptions);
-            abortIfElementMissing("#biometricimage");
-
-            this.referenceValue = ISNOTNULL(getElementEnsureNotNull("#vergleichswert").ownText());
-            this.pollingURI = getLongPollURI();
-        }
-    }
-
-    public static class Fido2Block extends TopLevelFormBlock {
-        public final @Nonnull String fidoOptions;
-        private final @Nonnull String credentialResultKey;
-
-        public void setFIDOResult(String result) { formOptions.put(credentialResultKey, result); }
-
-        private Fido2Block(@Nonnull org.jsoup.nodes.Document htmlDocument, @Nonnull Map<String, String> formOptions) throws ComponentParseFailed {
-            super(htmlDocument, formOptions);
-            abortIfElementMissing("#fidoBlock");
-            this.fidoOptions = getAttributeEnsureNotNull("#credentialOptions", "value");
-            this.credentialResultKey = getAttributeEnsureNotNull("#credentialResult", "name");
-        }
-    }
-
-    public static class HTMLResult {
-        public final @Nonnull org.jsoup.nodes.Document htmlDocument;
-        public final @Nonnull URI formTarget;
-        public final @Nonnull Map<String, String> formOptions = new HashMap<>();
-
-        public @Nonnull Iterable<Map.Entry<String, String>> iterateFormOptions() { return ISNOTNULL(formOptions.entrySet()); }
-
-        /* optional links (any number may or may not be null) */
-        public final @CheckForNull URI signatureDataLink;
-        public final @CheckForNull URI smsTanLink;
-        public final @CheckForNull URI fido2Link;
-
-        /* top-level blocks (exactly one is not null) */
-        public final @CheckForNull AutoSkipBlock autoSkipBlock;
-        public final @CheckForNull InterstitialBlock interstitialBlock;
-        public final @CheckForNull ErrorBlock errorBlock;
-        public final @CheckForNull UsernamePasswordBlock usernamePasswordBlock;
-        public final @CheckForNull SMSTanBlock smsTanBlock;
-        public final @CheckForNull QRCodeBlock qrCodeBlock;
-        public final @CheckForNull WaitingForAppBlock waitingForAppBlock;
-        public final @CheckForNull WaitingForBiometryBlock waitingForBiometryBlock;
-        public final @CheckForNull Fido2Block fido2Block;
-
-        private void validate() {
-            Set<String> populated = new HashSet<>();
-
-            if (autoSkipBlock != null) populated.add("autoSkipBlock");
-            if (interstitialBlock != null) populated.add("interstitialBlock");
-            if (errorBlock != null) populated.add("errorBlock");
-            if (usernamePasswordBlock != null) populated.add("usernamePasswordBlock");
-            if (smsTanBlock != null) populated.add("smsTanBlock");
-            if (qrCodeBlock != null) populated.add("qrCodeBlock");
-            if (waitingForAppBlock != null) populated.add("waitingForAppBlock");
-            if (waitingForBiometryBlock != null) populated.add("waitingForBiometryBlock");
-            if (fido2Block != null) populated.add("fido2Block");
-
-            switch (populated.size()) {
-                case 0: log.error("Did not find any top-level blocks.\n{}", this.htmlDocument.toString()); break;
-                case 1: /* passed */ return;
-                default: log.error("Found too many top-level blocks: {}\n", String.join(", ", populated), this.htmlDocument.toString()); break;
-            }
-            throw new IllegalArgumentException("Unknown A-Trust page reached?");
-        }
-
-        private @Nullable URI getHrefIfExists(String selector) {
-            var elm = htmlDocument.selectFirst(selector);
-            if (elm == null) return null;
-
-            String url = elm.absUrl("href");
-            try {
-                return new URI(url);
-            } catch (Exception e) {
-                log.warn("Invalid {} href attribute: {} ({})", selector, elm.attr("href"), url);
-                return null;
-            }
-        }
-
-        /**
-         * tries to parse T using its constructor; if ComponentParseFailed is thrown, swallows it
-         */
-        private <T extends TopLevelFormBlock> @Nullable T TryParseMainBlock(Class<T> clazz) {
-            try {
-                return clazz.getDeclaredConstructor(org.jsoup.nodes.Document.class, Map.class).newInstance(this.htmlDocument, this.formOptions);
-            } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | IllegalArgumentException | SecurityException e) {
-                log.error("Internal parser error; check your method signatures?", e);
-                return null;
-            } catch (InvocationTargetException wrappedE) {
-                Throwable e = wrappedE.getCause();
-                if (!(e instanceof ComponentParseFailed)) {
-                    if (e instanceof RuntimeException)
-                        throw (RuntimeException)e;
-                    log.warn("Unexpected parser failure.", e);
-                }
-                return null;
-            }
-        }
-
-        private HTMLResult(@Nonnull org.jsoup.nodes.Document htmlDocument) {
-            log.trace("Now parsing:\n{}", htmlDocument.toString());
-            this.htmlDocument = htmlDocument;
-
-            var forms = htmlDocument.getElementsByTag("form");
-            if (forms.size() != 1) {
-                log.error("Found {} forms in A-Trust response document, expected 1. Document:\n{}", forms.size(), htmlDocument.toString());
-                throw new IllegalArgumentException("Failed to parse A-Trust response page");
-            }
-
-            var mainForm = ISNOTNULL(forms.first()); /* size check above */
-            String formAction = mainForm.absUrl("action");
-            try {
-                this.formTarget = new URI(formAction);
-            } catch (URISyntaxException e) {
-                log.error("Invalid form target in page: {} ({})", mainForm.attr("action"), formAction, e);
-                throw new IllegalArgumentException("Failed to parse A-Trust response page");
-            }
-
-            for (var input : mainForm.select("input")) {
-                String name = input.attr("name");
-
-                if (name.isEmpty())
-                    continue;
-
-                /* submit inputs omitted here, they only get sent if they are "clicked", cf. MobileBKUConnector::buildFormSubmit */
-                if ("submit".equalsIgnoreCase(input.attr("type")))
-                    continue;
-                    
-                this.formOptions.put(name, input.attr("value"));
-            }
-
-            this.signatureDataLink = getHrefIfExists("#LinkList a[href*=\"ShowSigobj.aspx\"]"); /* grr, they didn't give it an ID */
-            this.smsTanLink = getHrefIfExists("#SmsButton");
-            this.fido2Link = getHrefIfExists("#FidoButton"); // TODO hide the button if unsupported?
-
-            this.autoSkipBlock = TryParseMainBlock(AutoSkipBlock.class);
-            this.interstitialBlock = TryParseMainBlock(InterstitialBlock.class);
-            this.errorBlock = TryParseMainBlock(ErrorBlock.class);
-            this.usernamePasswordBlock = TryParseMainBlock(UsernamePasswordBlock.class);
-            this.smsTanBlock = TryParseMainBlock(SMSTanBlock.class);
-            this.qrCodeBlock = TryParseMainBlock(QRCodeBlock.class);
-            this.waitingForAppBlock = TryParseMainBlock(WaitingForAppBlock.class);
-            this.waitingForBiometryBlock = TryParseMainBlock(WaitingForBiometryBlock.class);
-            this.fido2Block = TryParseMainBlock(Fido2Block.class);
-            
-            validate();
-        }
-    }
-
-    public static class Result {
-        public final @CheckForNull String slResponse;
-        public final @CheckForNull HTMLResult html;
-
-        private Result(@Nonnull String slResponse) { this.slResponse = slResponse; this.html = null; }
-        private Result(@Nonnull org.jsoup.nodes.Document htmlDocument) { this.slResponse = null; this.html = new HTMLResult(htmlDocument); }
-    }
-
-    public static @Nonnull Result Parse(@Nonnull org.jsoup.nodes.Document htmlDocument) { return new Result(htmlDocument); }
-
-    public static @Nonnull Result Parse(URI baseURI, String contentType, @Nonnull String content) {
-        if (contentType.equals("text/html"))
-        {
-            var document = Jsoup.parse(content, baseURI.toASCIIString());
-            if (document == null)
-            {
-                log.error("Failed to parse HTML (document == null):\n{}", content);
-                throw new IllegalArgumentException("A-Trust parsing failed");
-            }
-            return Parse(document);
-        }
-
-        if (contentType.endsWith("/xml"))
-            return new Result(content);
-        
-        log.error("Unknown content-type \"{}\" from URI {}", contentType, baseURI.toString());
-        throw new IllegalArgumentException("Unknown A-Trust page reached?");
-    }
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/MobileBKUValidator.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/MobileBKUValidator.java
deleted file mode 100644
index 89dbdf4f..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/MobileBKUValidator.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.bku.mobile;
-
-// Imports
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import at.asit.pdfover.gui.exceptions.InvalidPasswordException;
-import at.asit.pdfover.gui.exceptions.PasswordTooLongException;
-import at.asit.pdfover.gui.exceptions.PasswordTooShortException;
-
-/**
- *
- */
-public class MobileBKUValidator {
-
-	/**
-	 * Regular expression for mobile phone numbers: this allows the entry of
-	 * mobile numbers in the following formats:
-	 *
-	 * +(countryCode)99999999999 00(countryCode)99999999999 099999999999
-	 * 1030199999999999 (A-Trust Test bku)
-	 */
-	private static final String NUMBER_REGEX = "^((\\+[\\d]{2})|(00[\\d]{2})|(0)|(10301))([1-9][\\d]+)$";
-
-	/**
-	 * Validates the Mobile phone number
-	 *
-	 * @param number
-	 * @return the normalized Phone number
-	 */
-	public static String normalizeMobileNumber(String number) {
-		// Verify number and normalize
-
-		number = number.trim();
-		
-		String numberWithoutWhitespace = number.replaceAll("\\s","");
-		// Compile and use regular expression
-		Pattern pattern = Pattern.compile(NUMBER_REGEX);
-		Matcher matcher = pattern.matcher(numberWithoutWhitespace);
-
-		if (!matcher.find())
-			return number; /* might be an idA username, return unchanged */
-
-		if (matcher.groupCount() != 6) {
-			return number;
-		}
-
-		String countryCode = matcher.group(1);
-
-		String normalNumber = matcher.group(6);
-
-		if (countryCode.equals("10301")) {
-			// A-Trust Testnumber! Don't change
-			return numberWithoutWhitespace;
-		}
-
-		countryCode = countryCode.replace("00", "+");
-
-		if (countryCode.equals("0")) {
-			countryCode = "+43";
-		}
-
-		return countryCode + normalNumber;
-	}
-
-	/**
-	 * Validate given Password for Mobile BKU
-	 *
-	 * @param password
-	 * @throws InvalidPasswordException
-	 */
-	public static void validatePassword(String password)
-			throws InvalidPasswordException {
-		if (password.length() < 5)
-			throw new PasswordTooShortException();
-		if (password.length() > 200)
-			throw new PasswordTooLongException();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/Argument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/Argument.java
deleted file mode 100644
index 16a47a42..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/Argument.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.Status;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-
-/**
- * CLI Argument base class
- *
- * Implementing arguments have to be registered in PrepareConfigurationState
- */
-public abstract class Argument {
-
-	private String helpTextKey = null;
-
-	private String[] commandOptions = null;
-
-	private StateMachine stateMachine;
-
-	/**
-	 * @param commandOptions
-	 * @param helpTextKey
-	 */
-	protected Argument(String[] commandOptions, String helpTextKey) {
-		this.helpTextKey = helpTextKey;
-		this.commandOptions = commandOptions;
-	}
-
-	/**
-	 * Set the state machine
-	 * Used for configuration overlay manipulator and status
-	 * @param stateMachine the state machine
-	 */
-	protected void setStateMachine(StateMachine stateMachine) {
-		this.stateMachine = stateMachine;
-	}
-
-	protected ConfigurationManager getConfiguration() {
-		return this.stateMachine.configProvider;
-	}
-
-	/**
-	 * Get the status
-	 * @return the status
-	 */
-	protected Status getStatus() {
-		return this.stateMachine.status;
-	}
-
-	/**
-	 * Set help text key
-	 * @param key
-	 */
-	protected void setHelpTextKey(String key) {
-		this.helpTextKey = key;
-	}
-
-	/**
-	 * Gets help text
-	 * @return help text
-	 */
-	public String getHelpText() {
-		return Messages.getString(this.helpTextKey);
-	}
-
-	/**
-	 * Set the command option in format: -...
-	 *
-	 * Examples: -h
-	 *
-	 * @param value
-	 */
-	protected void setCommandOptions(String[] value) {
-		this.commandOptions = value;
-	}
-
-	/**
-	 * Get the command option
-	 *
-	 * Examples: -h
-	 * @return the command option
-	 */
-	public String[] getCommandOptions() {
-		return this.commandOptions;
-	}
-
-	/**
-	 * Invokes the argument to set stuff within the stateMachine
-	 *
-	 * It should return the offset within the args array where the last used argument of this Argument was used.
-	 *
-	 * Example:
-	 * args[] = { "-h", "-b", "LOCAL" }
-	 *
-	 * Help Argument call:
-	 *     offset = 0
-	 *     returns 0
-	 *
-	 * BKU Argument call:
-	 *     offset = 1
-	 *     returns 2
-	 *
-	 * @param args
-	 * @param argOffset
-	 * @param handler
-	 * @return returns the argumentOffset ending the section of this Argument
-	 * @throws InitializationException
-	 */
-	public abstract int handleArgument(String[] args, int argOffset, ArgumentHandler handler) throws InitializationException;
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ArgumentHandler.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ArgumentHandler.java
deleted file mode 100644
index 108ccb47..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ArgumentHandler.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.gui.workflow.StateMachine;
-
-/**
- * Handler to process CLI Arguments
- */
-public class ArgumentHandler {
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(ArgumentHandler.class);
-
-	private Map<String, Argument> cliArguments = new LinkedHashMap<String, Argument>();
-
-	private StateMachine stateMachine = null;
-
-	private boolean requiredExit = false;
-
-	/**
-	 * Constructor
-	 *
-	 * @param stateMachine
-	 */
-	public ArgumentHandler(StateMachine stateMachine) {
-		this.stateMachine = stateMachine;
-	}
-
-	/**
-	 * Gets available Arguments
-	 *
-	 * @return the list of available arguments
-	 */
-	public Set<Argument> getArguments() {
-		return new LinkedHashSet<Argument>(this.cliArguments.values());
-	}
-
-	/**
-	 * Adds a CLIArgument to the handler
-	 *
-	 * @param cliArgument the CLIArgument subclass to add
-	 */
-	public void addCLIArgument(Class<? extends Argument> cliArgument) {
-
-		Argument arg;
-		try {
-			arg = cliArgument.getDeclaredConstructor().newInstance();
-
-			arg.setStateMachine(this.stateMachine);
-
-			String[] commandOptions = arg.getCommandOptions();
-
-			if (commandOptions == null) {
-				return;
-			}
-
-			for (int i = 0; i < commandOptions.length; i++) {
-				this.cliArguments.put(commandOptions[i], arg);
-			}
-		} catch (Exception e) {
-			log.error("Error instantiating CLI argument" , e);
-		}
-	}
-
-	/**
-	 * Handle CLI Arguments
-	 *
-	 * @param args
-	 * @throws InitializationException
-	 */
-	public void handleArguments(String[] args) throws InitializationException {
-
-		for (int i = 0; i < args.length; i++) {
-			if (this.cliArguments.containsKey(args[i])) {
-				i = this.cliArguments.get(args[i]).handleArgument(args, i, this);
-			} else {
-				// Assume we got the document we want to sign
-				if (this.cliArguments.containsKey("-i")) {
-					i = this.cliArguments.get("-i").handleArgument(args, i-1, this);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Set by a cli argument if it wants the program to exit
-	 *
-	 * @param requireExit
-	 */
-	public void setRequireExit(boolean requireExit) {
-		this.requiredExit = requireExit;
-	}
-
-	/**
-	 * Checks if one argument required the program to exit immediately
-	 *
-	 * @return true or false
-	 */
-	public boolean doesRequireExit() {
-		return this.requiredExit;
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/AutomaticPositioningArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/AutomaticPositioningArgument.java
deleted file mode 100644
index 23d00c06..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/AutomaticPositioningArgument.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-
-/**
- * CLI Argument to set the BKU to use
- */
-public class AutomaticPositioningArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public AutomaticPositioningArgument() {
-		super(new String[] { "-a" }, "argument.help.autopos");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang
-	 * .String[], int, at.asit.pdfover.gui.workflow.StateMachine,
-	 * at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		getConfiguration().setAutoPositionSignatureOverlay();
-		return argOffset;
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/BKUArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/BKUArgument.java
deleted file mode 100644
index e69383f7..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/BKUArgument.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.BKUs;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to set the BKU to use
- */
-public class BKUArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public BKUArgument() {
-		super(
-				new String[] { "-b" }, "argument.help.bku");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang
-	 * .String[], int, at.asit.pdfover.gui.workflow.StateMachine,
-	 * at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				BKUs argumentValue = BKUs.valueOf(args[argOffset + 1]);
-
-				getConfiguration().setDefaultBKUOverlay(argumentValue);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			throw new InitializationException(
-					Messages.getString("argument.invalid.bku") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.bku") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ConfigFileArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ConfigFileArgument.java
deleted file mode 100644
index 725a28f9..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ConfigFileArgument.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to set the configuration file
- */
-public class ConfigFileArgument extends Argument {
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(ConfigFileArgument.class);
-
-	/**
-	 * Constructor
-	 */
-	public ConfigFileArgument() {
-		super(new String[] {"-c"}, "argument.help.config");
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String configFile = args[argOffset + 1];
-
-				getConfiguration().setConfigurationFileName(configFile);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Configuration File Argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.config") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.config") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/EmblemArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/EmblemArgument.java
deleted file mode 100644
index fe88d37e..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/EmblemArgument.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import java.io.File;
-import java.io.FileNotFoundException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to set the emblem file to use for signature
- */
-public class EmblemArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public EmblemArgument() {
-		super(new String[] {"-e"}, "argument.help.emblem");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(EmblemArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String emblem = args[argOffset + 1];
-
-				File emblemFile = new File(emblem);
-
-				if(!emblemFile.exists()) {
-					throw new FileNotFoundException(emblem);
-				}
-
-				getConfiguration().setDefaultEmblemOverlay(emblem);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Emblem argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.emblem") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.emblem") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/HelpArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/HelpArgument.java
deleted file mode 100644
index 0bcdaba6..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/HelpArgument.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Shell;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to show the useage message
- */
-public class HelpArgument extends Argument {
-
-	/**
-	 * Constructor
-	 */
-	public HelpArgument() {
-		super(new String[] {"-h", "-?", "--help" },
-				"argument.help.help");
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		Set<Argument> arguments = handler.getArguments();
-
-		Iterator<Argument> argumentIterator = arguments.iterator();
-
-		StringBuilder message = new StringBuilder(Messages.getString("argument.info.help"));
-		message.append("\n");
-
-		while(argumentIterator.hasNext()) {
-			Argument argument = argumentIterator.next();
-
-			for (int i = 0; i < argument.getCommandOptions().length; i++) {
-				message.append(argument.getCommandOptions()[i]);
-
-				if(i < argument.getCommandOptions().length -1) {
-					message.append(", ");
-				}
-			}
-
-			message.append(":\n");
-			boolean first = true;
-			for (String line : argument.getHelpText().split("\\.\\s+")) {
-				message.append("  ");
-				if (first) first = false; else message.append("  ");
-				message.append(line);
-				message.append("\n");
-			}
-		}
-
-		String msg = message.toString();
-		System.out.println(msg);
-		
-		Display display = Display.getCurrent();
-		if (display != null) {
-			MessageBox box = new MessageBox(new Shell(display), SWT.ICON_INFORMATION | SWT.OK);
-			box.setText(Constants.APP_NAME_VERSION);
-			box.setMessage(msg);
-			box.open();
-		}
-
-		handler.setRequireExit(true);
-
-		return argOffset;
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InputDocumentArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InputDocumentArgument.java
deleted file mode 100644
index b636b825..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InputDocumentArgument.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import java.io.File;
-import java.io.FileNotFoundException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to set the input document to sign
- */
-public class InputDocumentArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public InputDocumentArgument() {
-		super(new String[] {"-i"}, "argument.help.input");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(InputDocumentArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfovewr.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String signatureDocument = args[argOffset + 1];
-
-				File signatureDocumentFile = new File(signatureDocument);
-
-				if(!signatureDocumentFile.exists()) {
-					throw new FileNotFoundException(signatureDocument);
-				}
-
-				getStatus().document = signatureDocumentFile;
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Document to sign argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.input") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.input") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InvisibleProfile.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InvisibleProfile.java
deleted file mode 100644
index f3e7c1e2..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InvisibleProfile.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.signer.pdfas.PdfAs4SignatureParameter;
-
-/**
- * CLI Argument to set the visibility of signature
- */
-public class InvisibleProfile extends Argument {
-	/**
-	 * Constructor
-	 */
-	public InvisibleProfile() {
-		super(new String[] {"-v"}, "argument.help.vis");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(InvisibleProfile.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfovewr.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			log.info("Set Profile Invisible");
-
-			if (args.length > argOffset + 1) {
-				// TODO: this is a colossal monumental terrible hack
-				PdfAs4SignatureParameter.PROFILE_VISIBILITY=false;
-				log.debug("We are setting the profile visibility to false");
-				return argOffset + 1;
-			}
-
-		} catch (Exception ex) {
-			log.error("Signature Profile Visibilty Error", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.vis") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.vis") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreAliasArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreAliasArgument.java
deleted file mode 100644
index 1ef7531e..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreAliasArgument.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to provide the keystore alias
- */
-public class KeystoreAliasArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public KeystoreAliasArgument() {
-		super(new String[] {"-ksalias"}, "argument.help.keystorealias");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(KeystoreAliasArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String ksAlias = args[argOffset + 1];
-
-				getConfiguration().setKeyStoreAliasOverlay(ksAlias);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Keystore alias argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.keystorealias") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.keystorealias") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreFileArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreFileArgument.java
deleted file mode 100644
index adc40dae..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreFileArgument.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import java.io.File;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.gui.exceptions.KeystoreDoesntExistException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to provide the keystore file
- */
-public class KeystoreFileArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public KeystoreFileArgument() {
-		super(new String[] {"-ks"}, "argument.help.keystorefile");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(KeystoreFileArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String ksFile = args[argOffset + 1];
-
-				File ks = new File(ksFile);
-				if(!ks.exists() || !ks.isFile())
-					throw new KeystoreDoesntExistException(ks, 0);
-
-				getConfiguration().setKeyStoreFileOverlay(ksFile);
-				getConfiguration().setKeyStoreEnabledOverlay(true);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Keystore file argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.keystorefile") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.keystorefile") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreKeyPassArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreKeyPassArgument.java
deleted file mode 100644
index f41bbeaa..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreKeyPassArgument.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to provide the keystore key password
- */
-public class KeystoreKeyPassArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public KeystoreKeyPassArgument() {
-		super(new String[] {"-kskeypass"}, "argument.help.keystorekeypass");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(KeystoreKeyPassArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String ksKeyPass = args[argOffset + 1];
-
-				getConfiguration().setKeyStoreKeyPassOverlay(ksKeyPass);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Keystore key password argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.keystorekeypass") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.keystorekeypass") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreStorePassArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreStorePassArgument.java
deleted file mode 100644
index 3c759743..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreStorePassArgument.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to provide the keystore password
- */
-public class KeystoreStorePassArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public KeystoreStorePassArgument() {
-		super(new String[] {"-kspass"}, "argument.help.keystorestorepass");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(KeystoreStorePassArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String ksStorePass = args[argOffset + 1];
-
-				getConfiguration().setKeyStoreStorePassOverlay(ksStorePass);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Keystore password argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.keystorestorepass") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.keystorestorepass") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreTypeArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreTypeArgument.java
deleted file mode 100644
index fa29ba5d..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/KeystoreTypeArgument.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to provide the keystore type
- */
-public class KeystoreTypeArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public KeystoreTypeArgument() {
-		super(new String[] {"-kstype"}, "argument.help.keystoretype");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(KeystoreTypeArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String ksType = args[argOffset + 1];
-
-				getConfiguration().setKeyStoreTypeOverlay(ksType);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Keystore type argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.keystoretype") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.keystoretype") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/OutputFolderArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/OutputFolderArgument.java
deleted file mode 100644
index 047bf79c..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/OutputFolderArgument.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to show the usage message
- */
-public class OutputFolderArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public OutputFolderArgument() {
-		super(new String[] {"-o"}, "argument.help.output");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(OutputFolderArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-				String outputFolder = args[argOffset + 1];
-
-//				File outputFolderDir = new File(outputFolder);
-//				if(!outputFolderDir.exists()) {
-//					throw new FileNotFoundException(outputFolder);
-//				}
-//				if(!outputFolderDir.isDirectory()) {
-//					throw new IOException(outputFolderDir + Messages.getString("argument.error.output"));
-//				}
-
-				getConfiguration().setDefaultOutputFolderOverlay(outputFolder);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Output folder argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.output") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.output") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/PasswordArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/PasswordArgument.java
deleted file mode 100644
index cbfb1925..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/PasswordArgument.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.bku.mobile.MobileBKUValidator;
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to provide Mobile BKU password
- */
-public class PasswordArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public PasswordArgument() {
-		super(new String[] {"-p"}, "argument.help.password");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(PasswordArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String password = args[argOffset + 1];
-
-				MobileBKUValidator.validatePassword(password);
-
-				getConfiguration().setDefaultMobilePasswordOverlay(password);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Mobile BKU password argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.password") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.password") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/PhoneNumberArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/PhoneNumberArgument.java
deleted file mode 100644
index cc43d7e3..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/PhoneNumberArgument.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.bku.mobile.MobileBKUValidator;
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to provide Mobile BKU phone number to use
- */
-public class PhoneNumberArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public PhoneNumberArgument() {
-		super(new String[] {"-n" }, "argument.help.number");
-	}
-
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(PhoneNumberArgument.class);
-
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-
-		try {
-			if (args.length > argOffset + 1) {
-
-				String number = args[argOffset + 1];
-
-				number = MobileBKUValidator.normalizeMobileNumber(number);
-
-				getConfiguration().setDefaultMobileNumberOverlay(number);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Phone Number Argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.number") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.number") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyHostArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyHostArgument.java
deleted file mode 100644
index a77872e5..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyHostArgument.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to provide the proxy host
- */
-public class ProxyHostArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public ProxyHostArgument() {
-		super(new String[] {"-proxy"}, "argument.help.proxyhost");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(ProxyHostArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String proxyHost = args[argOffset + 1];
-
-				getConfiguration().setProxyHostOverlay(proxyHost);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Proxy host argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.proxyhost") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.proxyhost") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyPassArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyPassArgument.java
deleted file mode 100644
index f9c4e533..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyPassArgument.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to provide the proxy password
- */
-public class ProxyPassArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public ProxyPassArgument() {
-		super(new String[] {"-proxypass"}, "argument.help.proxypass");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(ProxyPassArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String proxyPass = args[argOffset + 1];
-
-				getConfiguration().setProxyPassOverlay(proxyPass);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Proxy password argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.proxypass") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.proxypass") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyPortArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyPortArgument.java
deleted file mode 100644
index ff9e84df..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyPortArgument.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.gui.exceptions.InvalidPortException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to provide the proxy port
- */
-public class ProxyPortArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public ProxyPortArgument() {
-		super(new String[] {"-proxyport"}, "argument.help.proxyport");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(ProxyPortArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String proxyPortString = args[argOffset + 1];
-
-				int port = Integer.parseInt(proxyPortString);
-
-				if(port <= 0 || port > 0xFFFF) {
-					throw new InvalidPortException(port);
-				}
-
-				getConfiguration().setProxyPortOverlay(port);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Proxy port argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.proxyport") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.proxyport") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyUserArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyUserArgument.java
deleted file mode 100644
index 82944f9b..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/ProxyUserArgument.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-// Imports
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * CLI Argument to provide the proxy username
- */
-public class ProxyUserArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public ProxyUserArgument() {
-		super(new String[] {"-proxyuser"}, "argument.help.proxyuser");
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(ProxyUserArgument.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang.String[], int, at.asit.pdfover.gui.workflow.StateMachine, at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		try {
-			if (args.length > argOffset + 1) {
-
-				String proxyUser = args[argOffset + 1];
-
-				getConfiguration().setProxyUserOverlay(proxyUser);
-
-				return argOffset + 1;
-			}
-		} catch (Exception ex) {
-			log.error("Proxy username argument invalid!", ex);
-			throw new InitializationException(
-					Messages.getString("argument.invalid.proxyuser") + this.getHelpText(), ex);
-		}
-
-		throw new InitializationException(
-				Messages.getString("argument.invalid.proxyuser") + this.getHelpText(), null);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/SkipFinishArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/SkipFinishArgument.java
deleted file mode 100644
index 0c4247fd..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/SkipFinishArgument.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.cliarguments;
-
-import at.asit.pdfover.gui.exceptions.InitializationException;
-
-/**
- * CLI Argument to set the BKU to use
- */
-public class SkipFinishArgument extends Argument {
-	/**
-	 * Constructor
-	 */
-	public SkipFinishArgument() {
-		super(new String[] { "-s" }, "argument.help.skipfinish");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.cliarguments.CLIArgument#handleArgument(java.lang
-	 * .String[], int, at.asit.pdfover.gui.workflow.StateMachine,
-	 * at.asit.pdfover.gui.cliarguments.ArgumentHandler)
-	 */
-	@Override
-	public int handleArgument(String[] args, int argOffset,
-			ArgumentHandler handler)
-			throws InitializationException {
-		getConfiguration().setSkipFinishOverlay(true);
-		return argOffset;
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/BKUSelectionComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/BKUSelectionComposite.java
deleted file mode 100644
index 9c73c2e5..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/BKUSelectionComposite.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites;
-
-// Imports
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.BKUs;
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.controls.ClickableCanvas;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.states.State;
-
-/**
- * Composite for BKU selection
- */
-public class BKUSelectionComposite extends StateComposite {
-
-	static final Logger log = LoggerFactory.getLogger(BKUSelectionComposite.class);
-
-	private BKUs selected = BKUs.NONE;
-
-	private ClickableCanvas cc_mobile;
-	private ClickableCanvas cc_karte;
-	private Button btnMobile;
-	private Button btnCard;
-	private Button btnKS = null;
-
-	public BKUs getSelected() { return this.selected; }
-
-	public void setSelected(final BKUs selected) {
-		this.selected = selected;
-		this.state.updateStateMachine();
-	}
-
-	public void setLocalBKUEnabled(boolean state) {
-		this.btnCard.setEnabled(state);
-		this.cc_karte.setEnabled(false);
-	}
-
-	/**
-	 * Sets whether keystore option is enabled
-	 * @param enabled
-	 */
-	public void setKeystoreEnabled(boolean enabled) {
-		if (enabled) {
-			this.btnKS = new Button(this, SWT.NONE);
-			SWTUtils.anchor(this.btnKS).top(this.btnCard, 10).left(this.btnMobile, 0, SWT.LEFT).right(this.btnCard, 0, SWT.RIGHT);
-			SWTUtils.addSelectionListener(btnKS, () -> { setSelected(BKUs.KS); });
-
-			reloadResources();
-		} else if (this.btnKS != null) {
-			this.btnKS.dispose();
-			this.btnKS = null;
-		}
-	}
-
-	/**
-	 * Create the composite.
-	 * @param parent
-	 * @param style
-	 * @param state
-	 */
-	public BKUSelectionComposite(Composite parent, int style, State state) {
-		super(parent, style, state);
-
-		this.setLayout(new FormLayout());
-
-		this.cc_mobile = new ClickableCanvas(this, SWT.NATIVE | SWT.RESIZE);
-		SWTUtils.anchor(cc_mobile).right(50, -5).top(40, -20);
-		Image mobile = new Image(getDisplay(), new ImageData(this.getClass().getResourceAsStream(Constants.RES_IMG_MOBILE)));
-		cc_mobile.setImage(mobile);
-		SWTUtils.setFontHeight(cc_mobile, Constants.TEXT_SIZE_BUTTON);
-		SWTUtils.addMouseDownListener(cc_mobile, () -> { setSelected(BKUs.MOBILE); });
-
-		this.cc_karte = new ClickableCanvas(this, SWT.NATIVE | SWT.RESIZE);
-		SWTUtils.anchor(cc_karte).left(50, 5).top(40, -20);
-		Image karte = new Image(getDisplay(), this.getClass().getResourceAsStream(Constants.RES_IMG_CARD));
-		cc_karte.setImage(karte);
-		SWTUtils.setFontHeight(cc_karte, Constants.TEXT_SIZE_BUTTON);
-		SWTUtils.addMouseDownListener(cc_karte, () -> { setSelected(BKUs.LOCAL); });
-
-
-		this.btnMobile = new Button(this, SWT.NONE);
-		SWTUtils.anchor(btnMobile).top(cc_mobile, 10).right(50,-5);
-		int mobilesize = cc_mobile.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-		int btnmsize = this.btnMobile.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-		SWTUtils.reanchor(btnMobile).width(Math.max(btnmsize, mobilesize));
-		SWTUtils.addSelectionListener(btnMobile, () -> { setSelected(BKUs.MOBILE); });
-
-		this.btnCard = new Button(this, SWT.NONE);
-		SWTUtils.anchor(btnCard).top(cc_karte, 10).left(50,5);
-		int cardsize = cc_karte.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-		int btncsize = this.btnCard.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-		SWTUtils.reanchor(btnCard).width(Math.max(btncsize, cardsize));
-		SWTUtils.addSelectionListener(btnCard, () -> { setSelected(BKUs.LOCAL); });
-
-		reloadResources();
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(btnMobile, "bku_selection.mobile");
-		SWTUtils.setLocalizedText(btnCard, "bku_selection.card");
-		if (this.btnKS != null)
-			SWTUtils.setLocalizedText(btnKS, "bku_selection.ks");
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java
deleted file mode 100644
index aa757305..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.custom.StackLayout;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.composites.configuration.AboutComposite;
-import at.asit.pdfover.gui.composites.configuration.AdvancedConfigurationComposite;
-import at.asit.pdfover.gui.composites.configuration.ConfigurationCompositeBase;
-import at.asit.pdfover.gui.composites.configuration.Fido2ConfigurationComposite;
-import at.asit.pdfover.gui.composites.configuration.KeystoreConfigurationComposite;
-import at.asit.pdfover.gui.composites.configuration.SimpleConfigurationComposite;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.gui.exceptions.ResumableException;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.gui.workflow.config.ConfigurationDataInMemory;
-import at.asit.pdfover.gui.workflow.states.State;
-
-/**
- * Composite for hosting configuration composites
- */
-public class ConfigurationComposite extends StateComposite {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(ConfigurationComposite.class);
-
-	/**
-	 * configuration provider
-	 */
-	ConfigurationManager configProvider = null;
-
-	/**
-	 * simple configuration composite
-	 */
-	ConfigurationCompositeBase simpleConfigComposite;
-
-	/**
-	 * advanced configuration composite
-	 */
-	ConfigurationCompositeBase advancedConfigComposite;
-
-	/**
-	 * advanced configuration composite
-	 */
-	ConfigurationCompositeBase keystoreConfigComposite = null;
-
-	ConfigurationCompositeBase fido2ConfigComposite;
-
-	/**
-	 * about page composite
-	 */
-	ConfigurationCompositeBase aboutConfigComposite;
-
-	private final Iterable<ConfigurationCompositeBase> _compositeIterable = new Iterable<>() {
-		@Override
-		public Iterator<ConfigurationCompositeBase> iterator() {
-			return new Iterator<>() {
-				int i = 0;
-				@Override
-				public boolean hasNext() {
-					return i < 5;
-				}
-
-				@Override
-				public ConfigurationCompositeBase next() {
-					if ((i == 2) && (keystoreConfigComposite == null)) ++i;
-					switch (++i) {
-						case 1: return simpleConfigComposite;
-						case 2: return advancedConfigComposite;
-						case 3: return keystoreConfigComposite;
-						case 4: return fido2ConfigComposite;
-						case 5: return aboutConfigComposite;
-					}
-					throw new NoSuchElementException();
-				}
-			};
-		}
-	};
-	private Iterable<ConfigurationCompositeBase> composites() { return _compositeIterable; }
-
-	/**
-	 * The TabFolder
-	 */
-	TabFolder tabFolder;
-
-	/**
-	 * configuration container Keeps state for current configuration changes
-	 */
-	ConfigurationDataInMemory configurationContainer = new ConfigurationDataInMemory();
-
-	/**
-	 * The stack layout
-	 */
-	StackLayout compositeStack = new StackLayout();
-
-	/**
-	 * SWT style
-	 */
-	int style;
-
-	/**
-	 * base configuration container
-	 */
-	Composite containerComposite;
-
-	/**
-	 * checks whether the user is done
-	 */
-	boolean userDone = false;
-
-	private TabItem simpleTabItem;
-
-	private TabItem advancedTabItem;
-
-	private TabItem keystoreTabItem;
-
-	private TabItem fido2TabItem;
-
-	private TabItem aboutTabItem;
-
-	private Button btnSpeichern;
-
-	private Button btnAbbrechen;
-
-	/**
-	 * Create the composite.
-	 *
-	 * @param parent
-	 * @param style
-	 * @param state
-	 */
-	public ConfigurationComposite(Composite parent, int style, State state) {
-		super(parent, SWT.FILL | style, state);
-		this.style = SWT.FILL | style;
-
-		this.setLayout(new FormLayout());
-
-		this.containerComposite = new Composite(this, SWT.FILL | SWT.RESIZE);
-
-		this.tabFolder = new TabFolder(this.containerComposite, SWT.NONE);
-		SWTUtils.anchor(tabFolder).bottom(100, -5).right(100, -5).top(0, 5).left(0, 5);
-		SWTUtils.setFontHeight(tabFolder, Constants.TEXT_SIZE_NORMAL);
-
-		this.simpleTabItem = new TabItem(this.tabFolder, SWT.NONE);
-		ScrolledComposite simpleCompositeScr = new ScrolledComposite(this.tabFolder, (SWT.H_SCROLL | SWT.V_SCROLL));
-		this.simpleTabItem.setControl(simpleCompositeScr);
-		this.simpleConfigComposite = new SimpleConfigurationComposite(simpleCompositeScr, SWT.NONE, state, configurationContainer);
-		simpleCompositeScr.setContent(simpleConfigComposite);
-		simpleCompositeScr.setExpandHorizontal(true);
-		simpleCompositeScr.setExpandVertical(true);
-		simpleCompositeScr.setMinSize(simpleConfigComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-		this.advancedTabItem = new TabItem(this.tabFolder, SWT.NONE);
-		ScrolledComposite advancedCompositeScr = new ScrolledComposite(this.tabFolder, (SWT.H_SCROLL | SWT.V_SCROLL));
-		this.advancedTabItem.setControl(advancedCompositeScr);
-		this.advancedConfigComposite = new AdvancedConfigurationComposite(advancedCompositeScr, SWT.NONE, state, configurationContainer, this);
-		advancedCompositeScr.setContent(advancedConfigComposite);
-		advancedCompositeScr.setExpandHorizontal(true);
-		advancedCompositeScr.setExpandVertical(true);
-		advancedCompositeScr.setMinSize(advancedConfigComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-		this.fido2TabItem = new TabItem(this.tabFolder, SWT.NONE);
-		ScrolledComposite fido2CompositeScr = new ScrolledComposite(this.tabFolder, (SWT.H_SCROLL | SWT.V_SCROLL));
-		this.fido2TabItem.setControl(fido2CompositeScr);
-		this.fido2ConfigComposite = new Fido2ConfigurationComposite(fido2CompositeScr, SWT.NONE, state, configurationContainer);
-		fido2CompositeScr.setContent(fido2ConfigComposite);
-		fido2CompositeScr.setExpandHorizontal(true);
-		fido2CompositeScr.setExpandVertical(true);
-		fido2CompositeScr.addListener(SWT.Resize, (e) -> {
-			int widthHint = fido2CompositeScr.getClientArea().width - 50; /* offset for scroll bar */
-			fido2CompositeScr.setMinSize(null);
-			fido2CompositeScr.setMinSize(fido2CompositeScr.computeSize(widthHint, SWT.DEFAULT));
-		});
-
-		this.aboutTabItem = new TabItem(this.tabFolder, SWT.NONE);
-		ScrolledComposite aboutCompositeScr = new ScrolledComposite(this.tabFolder, (SWT.H_SCROLL | SWT.V_SCROLL));
-		this.aboutTabItem.setControl(aboutCompositeScr);
-		this.aboutConfigComposite = new AboutComposite(aboutCompositeScr, SWT.NONE, state, configurationContainer);
-		aboutCompositeScr.setContent(aboutConfigComposite);
-		aboutCompositeScr.setExpandHorizontal(true);
-		aboutCompositeScr.setExpandVertical(true);
-		aboutCompositeScr.addListener(SWT.Resize, (event) -> {
-			int widthHint = aboutCompositeScr.getClientArea().width - 50; /* offset for scroll bar */
-			aboutCompositeScr.setMinSize(null);
-			aboutCompositeScr.setMinSize(aboutCompositeScr.computeSize(widthHint, SWT.DEFAULT));
-		});
-
-		this.tabFolder.setSelection(this.simpleTabItem);
-
-		this.btnSpeichern = new Button(this, SWT.NONE);
-		SWTUtils.anchor(btnSpeichern).right(100, -5).bottom(100);
-		SWTUtils.setFontHeight(btnSpeichern, Constants.TEXT_SIZE_BUTTON);
-		this.btnSpeichern.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				getShell().setText(Constants.APP_NAME);
-				if (ConfigurationComposite.this.storeConfiguration()) {
-					ConfigurationComposite.this.userDone = true;
-					ConfigurationComposite.this.state.updateStateMachine();
-				}
-			}
-		});
-
-		this.btnAbbrechen = new Button(this, SWT.NONE);
-		SWTUtils.anchor(btnAbbrechen).right(btnSpeichern, -10).bottom(btnSpeichern, 0, SWT.BOTTOM);
-		SWTUtils.setFontHeight(btnAbbrechen, Constants.TEXT_SIZE_BUTTON);
-		this.btnAbbrechen.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				getShell().setText(Constants.APP_NAME);
-				ConfigurationComposite.this.userDone = true;
-				ConfigurationComposite.this.state.updateStateMachine();
-			}
-		});
-
-		SWTUtils.anchor(containerComposite).top(0, 5).bottom(btnSpeichern, -10).left(0, 5).right(100, -5);
-		this.containerComposite.setLayout(this.compositeStack);
-		this.compositeStack.topControl = this.tabFolder;
-
-		getShell().setText(Constants.APP_NAME_VERSION + " [" + System.getProperty("java.vendor") + " Java " + System.getProperty("java.version") + "]");
-
-		reloadResources();
-		this.doLayout();
-	}
-
-	private boolean keystoreInitialized = false;
-
-	/**
-	 * Set whether keystore tab is enabled
-	 * @param enabled whether keystore tab is enabled
-	 */
-	public void keystoreEnabled(boolean enabled) {
-		if (enabled && this.keystoreConfigComposite == null) {
-			this.keystoreTabItem = new TabItem(this.tabFolder, SWT.NONE, 2);
-			SWTUtils.setLocalizedText(keystoreTabItem, "config.Keystore");
-
-			ScrolledComposite keystoreCompositeScr = new ScrolledComposite(
-					this.tabFolder, SWT.H_SCROLL | SWT.V_SCROLL);
-			this.keystoreTabItem.setControl(keystoreCompositeScr);
-			this.keystoreConfigComposite = new KeystoreConfigurationComposite(
-					keystoreCompositeScr, SWT.NONE, this.state,
-					this.configurationContainer);
-			keystoreCompositeScr.setContent(this.keystoreConfigComposite);
-			keystoreCompositeScr.setExpandHorizontal(true);
-			keystoreCompositeScr.setExpandVertical(true);
-			keystoreCompositeScr.setMinSize(this.keystoreConfigComposite
-					.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-			if (!this.keystoreInitialized) {
-				this.keystoreConfigComposite.initConfiguration(this.configProvider);
-				this.keystoreInitialized = true;
-			}
-			this.keystoreConfigComposite.loadConfiguration();
-
-			reloadResources();
-		} else if (!enabled && this.keystoreConfigComposite != null){
-			this.keystoreTabItem.dispose();
-			this.keystoreConfigComposite = null;
-		}
-	}
-
-	/**
-	 * Sets the configuration provider
-	 *
-	 * @param provider
-	 */
-	public void setConfigProvider(ConfigurationManager provider) {
-		if (provider.crashOnConfig) /* for testing initialization error handlers */
-			throw new RuntimeException("A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.\n(CRASH=config is set.)");
-
-		this.configProvider = provider;
-		if (this.configProvider != null) {
-			for (ConfigurationCompositeBase c : composites())
-				c.initConfiguration(this.configProvider);
-
-			for (ConfigurationCompositeBase c : composites())
-				c.loadConfiguration();
-		}
-	}
-
-	boolean storeConfiguration() {
-		try {
-			for (ConfigurationCompositeBase c : composites()) {
-				int resumeIndex = 0;
-				while (true) {
-					try {
-						c.validateSettings(resumeIndex);
-						break;
-					} catch (ResumableException e) {
-						log.info("Settings validation failed!", e);
-						ErrorDialog dialog = new ErrorDialog(getShell(),
-							e.getMessage(), BUTTONS.ABORT_RETRY_IGNORE);
-						int rc = dialog.open();
-
-						if (rc == SWT.ABORT)
-							return false;
-						if (rc == SWT.IGNORE)
-							resumeIndex = e.getResumeIndex();
-					}
-				}
-			}
-		} catch (Exception e) {
-			log.error("Settings validation failed!", e);
-			String message = e.getMessage();
-			if (message == null)
-				message = Messages.getString("error.Unexpected");
-			ErrorDialog dialog = new ErrorDialog(getShell(), message,
-					BUTTONS.OK);
-			dialog.open();
-			return false;
-		}
-
-		// Write current Configuration
-		for (ConfigurationCompositeBase c : composites())
-			c.storeConfiguration(this.configProvider);
-
-		while (true) {
-			// Save current config to file
-			try {
-				this.configProvider.saveToDisk();
-				return true;
-			} catch (IOException e) {
-				log.error("Failed to save configuration to file!", e);
-				ErrorDialog dialog = new ErrorDialog(getShell(),
-						Messages.getString("error.FailedToSaveSettings"), BUTTONS.RETRY_CANCEL);
-				int rc = dialog.open();
-				if (rc == SWT.CANCEL)
-					return false;
-			}
-		}
-	}
-
-	/**
-	 * Checks if the user has finished working with the configuration composite
-	 *
-	 * @return if the user is done
-	 */
-	public boolean isUserDone() {
-		return this.userDone;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.composites.StateComposite#doLayout()
-	 */
-	@Override
-	public void onDisplay() {
-		Control ctrl = this.compositeStack.topControl;
-		this.containerComposite.layout(true, true);
-		getShell().layout(true, true);
-		// Note: SWT only layouts children! No grandchildren!
-		if (ctrl instanceof StateComposite) {
-			((StateComposite) ctrl).doLayout();
-		}
-		setFocus();
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(simpleTabItem, "config.Simple");
-		SWTUtils.setLocalizedText(advancedTabItem, "config.Advanced");
-		SWTUtils.setLocalizedText(fido2TabItem, "config.FIDO2");
-		SWTUtils.setLocalizedText(aboutTabItem, "config.About", Constants.APP_NAME);
-		if (this.keystoreConfigComposite != null)
-			SWTUtils.setLocalizedText(keystoreTabItem, "config.Keystore");
-
-		SWTUtils.setLocalizedText(btnSpeichern, "common.Save");
-		SWTUtils.setLocalizedText(btnAbbrechen, "common.Cancel");
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/DataSourceSelectComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/DataSourceSelectComposite.java
deleted file mode 100644
index 852afecc..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/DataSourceSelectComposite.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites;
-
-// Imports
-import java.io.File;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DropTarget;
-import org.eclipse.swt.dnd.DropTargetAdapter;
-import org.eclipse.swt.dnd.DropTargetEvent;
-import org.eclipse.swt.dnd.FileTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Label;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.states.State;
-
-/**
- * Composite for input document selection
- */
-public class DataSourceSelectComposite extends StateComposite {
-
-	/**
-	 * Open the input document selection dialog
-	 */
-	public void openFileDialog() {
-		FileDialog dialog = new FileDialog(
-				DataSourceSelectComposite.this.getShell(), SWT.OPEN);
-		dialog.setFilterExtensions(new String[] { "*.pdf", "*" });
-		dialog.setFilterNames(new String[] {
-				Messages.getString("common.PDFExtension_Description"),
-				Messages.getString("common.AllExtension_Description") });
-		String fileName = dialog.open();
-		File file = null;
-		if (fileName != null) {
-			file = new File(fileName);
-			if (file.exists()) {
-				DataSourceSelectComposite.this.setSelected(file);
-			}
-		}
-	}
-
-	/**
-	 * Selection adapter for file browsing
-	 */
-	private final class FileBrowseDialogListener extends SelectionAdapter {
-		/**
-		 * Empty constructor
-		 */
-		public FileBrowseDialogListener() {
-		}
-
-		@Override
-		public void widgetSelected(SelectionEvent e) {
-			openFileDialog();
-		}
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(DataSourceSelectComposite.class);
-
-	/**
-	 * Set this value through the setter method!!
-	 */
-	private File selected = null;
-
-	/**
-	 * Sets the selected file and calls update to the workflow
-	 *
-	 * @param selected
-	 */
-	protected void setSelected(File selected) {
-		this.selected = selected;
-		this.state.updateStateMachine();
-	}
-
-	/**
-	 * Gets the selected file
-	 *
-	 * @return the selected file
-	 */
-	public File getSelected() {
-		return this.selected;
-	}
-
-	void MarkDragEnter() {
-		this.backgroundColor = this.activeBackground;
-		this.borderColor = this.activeBorder;
-		this.redrawDrop();
-	}
-
-	void MarkDragLeave() {
-		this.backgroundColor = this.inactiveBackground;
-		this.borderColor = this.inactiveBorder;
-		this.redrawDrop();
-	}
-
-	void redrawDrop() {
-		this.lbl_drag.setBackground(this.backgroundColor);
-		this.lbl_drag2.setBackground(this.backgroundColor);
-		this.btn_open.setBackground(this.backgroundColor);
-		this.drop_area.redraw();
-		this.drop_area.layout(true, true);
-	}
-
-	Color activeBackground;
-	Color inactiveBackground;
-	Color inactiveBorder;
-	Color activeBorder;
-	Color borderColor;
-	Color backgroundColor;
-
-	/**
-	 * Create the composite.
-	 *
-	 * @param parent
-	 * @param style
-	 * @param state
-	 */
-	public DataSourceSelectComposite(Composite parent, int style, State state) {
-		super(parent, style, state);
-
-		this.activeBackground = Constants.MAINBAR_ACTIVE_BACK_LIGHT;
-		this.inactiveBackground = this.getBackground();//Constants.MAINBAR_INACTIVE_BACK;
-		this.inactiveBorder = Constants.MAINBAR_ACTIVE_BACK_LIGHT;
-		this.activeBorder = Constants.MAINBAR_ACTIVE_BACK_DARK;
-		this.backgroundColor = this.inactiveBackground;
-		this.borderColor = Constants.DROP_BORDER_COLOR;
-
-		this.setLayout(new FormLayout());
-
-		// Color back = new Color(Display.getCurrent(), 77, 190, 250);
-
-		this.drop_area = new Composite(this, SWT.RESIZE);
-		SWTUtils.anchor(drop_area).left(0, 30).right(100, -30).top(0, 30).bottom(100, -30);
-		this.drop_area.setLayout(new FormLayout());
-
-		this.drop_area.addPaintListener(new PaintListener() {
-
-			@Override
-			public void paintControl(PaintEvent e) {
-				Rectangle clientArea = DataSourceSelectComposite.this
-						.drop_area.getClientArea();
-
-				//e.gc.setForeground(new Color(getDisplay(),0x6B, 0xA5, 0xD9));
-				e.gc.setForeground(DataSourceSelectComposite.this.borderColor);
-				e.gc.setLineWidth(3);
-				e.gc.setLineStyle(SWT.LINE_DASH);
-				e.gc.setBackground(DataSourceSelectComposite.this.backgroundColor);
-				e.gc.fillRoundRectangle(clientArea.x,
-						clientArea.y, clientArea.width - 2, clientArea.height - 2,
-						10, 10);
-				e.gc.drawRoundRectangle(clientArea.x,
-						clientArea.y, clientArea.width - 2, clientArea.height - 2,
-						10, 10);
-			}
-		});
-
-		DropTarget dnd_target = new DropTarget(this.drop_area, DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK);
-		final FileTransfer fileTransfer = FileTransfer.getInstance();
-		Transfer[] types = new Transfer[] { fileTransfer };
-		dnd_target.setTransfer(types);
-
-		dnd_target.addDropListener(new DropTargetAdapter() {
-			@Override
-			public void drop(DropTargetEvent event) {
-				if (fileTransfer.isSupportedType(event.currentDataType)) {
-					if (event.data == null) {
-						log.error("Dropped file name was null");
-						return;
-					}
-					String[] files = (String[]) event.data;
-					if (files.length > 0) {
-						// Only taking first file ...
-						File file = new File(files[0]);
-						if (!file.exists()) {
-							log.error(Messages.formatString("error.FileNotExist", files[0]));
-							return;
-						}
-						DataSourceSelectComposite.this.setSelected(file);
-					}
-				}
-			}
-
-			@Override
-			public void dragOperationChanged(DropTargetEvent event) {
-				event.detail = DND.DROP_COPY;
-			}
-
-			@Override
-			public void dragEnter(DropTargetEvent event) {
-				// only accept transferable files
-				for (int i = 0; i < event.dataTypes.length; i++) {
-					if (fileTransfer.isSupportedType(event.dataTypes[i])) {
-						event.currentDataType = event.dataTypes[i];
-						event.detail = DND.DROP_COPY;
-						MarkDragEnter();
-						return;
-					}
-				}
-				event.detail = DND.DROP_NONE;
-			}
-
-			/* (non-Javadoc)
-			 * @see org.eclipse.swt.dnd.DropTargetAdapter#dragLeave(org.eclipse.swt.dnd.DropTargetEvent)
-			 */
-			@Override
-			public void dragLeave(DropTargetEvent event) {
-				MarkDragLeave();
-				super.dragLeave(event);
-			}
-		});
-
-		this.lbl_drag = new Label(this.drop_area, SWT.NONE | SWT.RESIZE );
-		this.lbl_drag2 = new Label(this.drop_area, SWT.NONE | SWT.RESIZE );
-		SWTUtils.anchor(lbl_drag).left(0, 10).right(100, -10).bottom(lbl_drag2, -10);
-		SWTUtils.anchor(lbl_drag2).left(0, 10).right(100, -10).top(50, -10);
-		SWTUtils.setFontHeight(lbl_drag, Constants.TEXT_SIZE_BIG);
-		SWTUtils.setFontHeight(lbl_drag2, Constants.TEXT_SIZE_NORMAL);
-		this.lbl_drag.setAlignment(SWT.CENTER);
-		this.lbl_drag2.setAlignment(SWT.CENTER);
-
-		this.btn_open = new Button(this.drop_area, SWT.NATIVE | SWT.RESIZE);
-		SWTUtils.anchor(btn_open).left(lbl_drag2, 0, SWT.CENTER).top(lbl_drag2, 10);
-		SWTUtils.setFontHeight(btn_open, Constants.TEXT_SIZE_BUTTON);
-
-		reloadResources();
-
-		this.btn_open.addSelectionListener(new FileBrowseDialogListener());
-		this.drop_area.pack();
-		this.redrawDrop();
-	}
-
-	Composite drop_area;
-
-	private Label lbl_drag2;
-
-	private Label lbl_drag;
-
-	private Button btn_open;
-
-	@Override
-	public void onDisplay() {
-		this.drop_area.layout(true, true);
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(lbl_drag, "dataSourceSelection.DropLabel");
-		SWTUtils.setLocalizedText(lbl_drag2, "dataSourceSelection.DropLabel2");
-		SWTUtils.setLocalizedText(btn_open, "dataSourceSelection.browse");
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java
deleted file mode 100644
index 96dc3982..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites;
-
-// Imports
-import java.awt.Desktop;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import org.apache.commons.io.FilenameUtils;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.program.Program;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.controls.Dialog;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.Dialog.ICON;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.states.State;
-import at.asit.pdfover.signer.DocumentSource;
-
-/**
- * GUI component for Output State
- */
-public class OutputComposite extends StateComposite {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(OutputComposite.class);
-
-	private Link lnk_saved_file;
-
-	private Button btn_save;
-
-	private Label lbl_success_message;
-
-	private DocumentSource signedDocument;
-
-	private File inputFile;
-
-	String outputDir = null;
-
-	String tempDirectory = null;
-
-	File outputFile = null;
-
-	private boolean saveFailed = false;
-
-	private String postFix = null;
-
-	/**
-	 * Create the composite.
-	 *
-	 * @param parent
-	 *            The parent composite
-	 * @param style
-	 *            The swt style
-	 * @param state
-	 *            The owning state
-	 */
-	public OutputComposite(Composite parent, int style, State state) {
-		super(parent, style, state);
-
-		this.setLayout(new FormLayout());
-
-		this.lbl_success_message = new Label(this, SWT.NATIVE | SWT.RESIZE);
-		FormData fd_lbl_success_message = new FormData();
-		fd_lbl_success_message.top = new FormAttachment(40, 0);
-		fd_lbl_success_message.left = new FormAttachment(0);
-		fd_lbl_success_message.right = new FormAttachment(100);
-		this.lbl_success_message.setLayoutData(fd_lbl_success_message);
-		this.lbl_success_message.setAlignment(SWT.CENTER);
-
-		FontData[] fD1 = this.lbl_success_message.getFont().getFontData();
-		fD1[0].setHeight(Constants.TEXT_SIZE_BIG);
-		this.lbl_success_message.setFont(new Font(Display.getCurrent(), fD1[0]));
-
-		this.lnk_saved_file = new Link(this, SWT.NATIVE | SWT.RESIZE);
-		FormData fd_lnk_saved_file = new FormData();
-		fd_lnk_saved_file.top = new FormAttachment(this.lbl_success_message, 10);
-		fd_lnk_saved_file.left = new FormAttachment(this.lbl_success_message, 0,
-				SWT.CENTER);
-		// fd_lnk_saved_file.right = new FormAttachment(100);
-		this.lnk_saved_file.setLayoutData(fd_lnk_saved_file);
-
-		this.lnk_saved_file.addSelectionListener(new OpenSelectionListener());
-
-		FontData[] fD2 = this.lnk_saved_file.getFont().getFontData();
-		fD2[0].setHeight(Constants.TEXT_SIZE_NORMAL);
-		this.lnk_saved_file.setFont(new Font(Display.getCurrent(), fD2[0]));
-
-		this.btn_save = new Button(this, SWT.NATIVE | SWT.RESIZE);
-
-		FontData[] fD_btn_save = this.btn_save.getFont().getFontData();
-		fD_btn_save[0].setHeight(Constants.TEXT_SIZE_BUTTON);
-		this.btn_save.setFont(new Font(Display.getCurrent(), fD_btn_save[0]));
-
-		FormData fd_btn_save = new FormData();
-		fd_btn_save.top = new FormAttachment(this.lnk_saved_file, 10);
-		fd_btn_save.left = new FormAttachment(this.lnk_saved_file, 0,
-				SWT.CENTER);
-		this.btn_save.setLayoutData(fd_btn_save);
-
-		this.btn_save.addSelectionListener(new SaveSelectionListener());
-		enableSaveButton(false);
-
-		reloadResources();
-	}
-
-	/**
-	 * @param outputDir
-	 *            the outputDir to set
-	 */
-	public void setOutputDir(String outputDir) {
-		this.outputDir = outputDir;
-	}
-
-	/**
-	 * @return the outputDir
-	 */
-	public String getOutputDir() {
-		return this.outputDir;
-	}
-
-	/**
-	 * Sets the input file
-	 *
-	 * @param inputFile
-	 *            the input file
-	 */
-	public void setInputFile(File inputFile) {
-		this.inputFile = inputFile;
-	}
-
-	/**
-	 * Gets the input file
-	 *
-	 * @return the input file
-	 */
-	public File getInputFile() {
-		return this.inputFile;
-	}
-
-	/**
-	 * @param tempDirectory
-	 */
-	public void setTempDir(String tempDirectory) {
-		this.tempDirectory = tempDirectory;
-	}
-
-	/**
-	 * Gets the signed document
-	 *
-	 * @return the signed document
-	 */
-	public DocumentSource getSignedDocument() {
-		return this.signedDocument;
-	}
-
-	/**
-	 * Sets the signed document
-	 *
-	 * @param signedDocument
-	 *            the signed document
-	 */
-	public void setSignedDocument(final DocumentSource signedDocument) {
-		this.signedDocument = signedDocument;
-	}
-
-	/**
-	 * Return whether the last save was successful
-	 * @return whether the last save was successful
-	 */
-	public boolean getSaveSuccessful() {
-		return !this.saveFailed;
-	}
-
-	private void enableSaveButton(boolean doEnable)
-	{
-		this.btn_save.setEnabled(doEnable);
-		this.btn_save.setVisible(doEnable);
-	}
-
-	public void setSaveFilePostFix(String postFix){
-		this.postFix = postFix;
-	}
-
-	public String getSaveFilePostFix(){
-		if (this.postFix == null){
-			this.postFix = Constants.DEFAULT_POSTFIX;
-		}
-		return this.postFix;
-	}
-
-	/**
-	 * Saves the signed document.
-	 *
-	 * If user has a default output directory set, try to save there.
-	 * If not (or if directory unavailable), ask user for location.
-	 */
-	public void saveDocument() {
-		File inputFolder = getInputFile().getAbsoluteFile().getParentFile();
-		String fileName = getInputFile().getName();
-		String proposedName = getSignedFileName(fileName);
-		String outputFileName;
-
-		String outputFolder = getOutputDir();
-		if (!this.saveFailed && outputFolder != null && !outputFolder.trim().isEmpty()) {
-			// Output folder configured, try to save there
-
-			File f = new File(outputFolder);
-			if (f.isDirectory()) {
-				if (!outputFolder.endsWith(File.separator)) {
-					outputFolder += File.separator;
-				}
-				outputFileName = outputFolder + proposedName;
-			} else {
-				outputFileName = outputFolder;
-			}
-		} else {
-			// Ask user where to save
-
-			FileDialog save = new FileDialog(this.getShell(),
-					SWT.SAVE | SWT.NATIVE);
-			save.setFilterExtensions(new String[] { "*.pdf", "*" });
-			save.setFilterNames(new String[] {
-					Messages.getString("common.PDFExtension_Description"),
-					Messages.getString("common.AllExtension_Description")});
-			save.setFilterPath(inputFolder.getAbsolutePath());
-			save.setFileName(proposedName);
-
-			outputFileName = save.open();
-			inputFolder = null;
-		}
-		log.debug("Trying to save to '" + outputFileName + "'");
-
-		this.outputFile = saveResultAsFile(inputFolder, outputFileName);
-		this.saveFailed = (this.outputFile == null);
-
-		// If saving failed, enable save button
-		enableSaveButton(this.saveFailed);
-		reloadResources();
-		layout(true);
-	}
-
-	/**
-	 * Save the signed document under the given filename
-	 * @param inputFolder the Folder the original document is located at
-	 * @param target the filename to save the document as
-	 *
-	 * @return saved File (or null if unsuccessful)
-	 * @throws FileNotFoundException
-	 * @throws IOException
-	 */
-	private File saveResultAsFile(File inputFolder, String target) {
-		if (target == null)
-			return null;
-
-		File targetFile = new File(target);
-		if (!targetFile.isAbsolute())
-			targetFile = new File(inputFolder, target);
-
-		if (targetFile.exists()) {
-			Dialog dialog = new Dialog(getShell(), Messages.getString("common.warning"),
-					Messages.formatString("output.file_ask_overwrite", targetFile.getName()),
-					BUTTONS.OK_CANCEL, ICON.QUESTION);
-			if (dialog.open() == SWT.CANCEL)
-			{
-				return null;
-			}
-		}
-
-		DocumentSource source = this.getSignedDocument();
-		boolean retry;
-
-		do {
-			retry = false;
-			try {
-				FileOutputStream outstream = new FileOutputStream(targetFile);
-				outstream.write(source.getByteArray(), 0,
-						source.getByteArray().length);
-				outstream.close();
-			} catch (FileNotFoundException e) {
-				log.warn("Failed to open output file", e);
-				ErrorDialog dialog = new ErrorDialog(getShell(),
-						Messages.formatString("output.save_failed",
-								targetFile.getName(), e.getLocalizedMessage()),
-						BUTTONS.RETRY_CANCEL);
-				if (dialog.open() == SWT.CANCEL)
-					return null;
-				retry = true;
-			} catch (IOException e) {
-				log.error("I/O Error", e);
-				ErrorDialog dialog = new ErrorDialog(getShell(),
-						Messages.formatString("output.save_failed",
-								targetFile.getName(), e.getLocalizedMessage()),
-						BUTTONS.RETRY_CANCEL);
-				if (dialog.open() == SWT.CANCEL)
-					return null;
-				retry = true;
-			}
-		} while (retry);
-
-		if (!targetFile.exists())
-		{
-			log.error("Tried to save file " + targetFile.getName() +
-					", but it doesn't exist");
-			return null;
-		}
-		return targetFile;
-	}
-
-	/**
-	 * Get the proposed filename of a signed document for a given input filename
-	 * @param name input filename
-	 * @return proposed output filename
-	 */
-	private String getSignedFileName(String name) {
-		name = FilenameUtils.getName(name);
-		String extension = FilenameUtils.getExtension(name);
-		name = FilenameUtils.removeExtension(name);
-		return name + getSaveFilePostFix() + FilenameUtils.EXTENSION_SEPARATOR  + extension;
-	}
-
-	/**
-	 * SelectionListener for save button
-	 */
-	private final class SaveSelectionListener extends SelectionAdapter {
-		/**
-		 * Empty constructor
-		 */
-		public SaveSelectionListener() {
-		}
-
-		@Override
-		public void widgetSelected(SelectionEvent e) {
-			try {
-				OutputComposite.this.saveDocument();
-			} catch (Exception ex) {
-				log.error("SaveSelectionListener: ", ex);
-			}
-		}
-	}
-
-	/**
-	 * Selection Listener for open button
-	 */
-	private final class OpenSelectionListener extends SelectionAdapter {
-		/**
-		 * Empty constructor
-		 */
-		public OpenSelectionListener() {
-		}
-
-		@Override
-		public void widgetSelected(SelectionEvent e) {
-			try {
-				if (OutputComposite.this.outputFile == null)
-					return;
-
-				if (!OutputComposite.this.outputFile.exists())
-					return;
-
-				// Normalize filename
-				File f = new File(FilenameUtils.normalize(
-						OutputComposite.this.outputFile.getAbsolutePath()));
-				log.debug("Trying to open " + f.toString());
-				// work around for the case of Linux and Java version 8
-				if (isSpecialCase()) {
-					reReloadResources(f.toString());
-					return;
-				}
-				else if (Desktop.isDesktopSupported()) {
-					Desktop.getDesktop().open(f);
-				} else {
-					log.info("AWT Desktop is not supported on this platform");
-					Program.launch(f.getAbsolutePath());
-				}
-			} catch (IOException ex) {
-				log.error("OpenSelectionListener: ", ex);
-				ErrorDialog error = new ErrorDialog(getShell(),
-						Messages.formatString("error.FailedToOpenDocument",
-								ex.getLocalizedMessage()), BUTTONS.RETRY_CANCEL);
-				if (error.open() == SWT.RETRY)
-					widgetSelected(e);
-			}
-		}
-	}
-
-	/**
-	 * @return true when linux and java version <= 8
-	 *
-	 */
-	public boolean isSpecialCase() {
-
-		boolean isSCase = false;
-		try {
-			String os = System.getProperty("os.name").toLowerCase();
-			if (os.contains("linux")) {
-				String version = System.getProperty("java.version");
-				if (version.contains(".")) {
-					String[] parts = version.split("\\.");
-					isSCase = Integer.valueOf(parts[0]) <= 8 ? true : false;
-				} else {
-					isSCase = Integer.valueOf(version) <= 8 ? true : false;
-				}
-			}
-		} catch (Exception e) {
-			log.debug("Error: " + e.getMessage());
-			isSCase = false;
-		}
-		return isSCase;
-	}
-
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(lbl_success_message, "output.success_message");
-		if (this.outputFile == null) {
-			SWTUtils.setLocalizedText(lnk_saved_file, "output.link_save_message");
-		} else {
-			SWTUtils.setLocalizedText(lnk_saved_file, "output.link_open_message");
-		}
-		SWTUtils.setLocalizedText(btn_save, "common.Save");
-	}
-
-	/**
-	 * @param str
-	 */
-	public void reReloadResources(String str) {
-		SWTUtils.setLocalizedText(lbl_success_message, "output.success_message");
-		if (this.outputFile == null) {
-			SWTUtils.setLocalizedText(lnk_saved_file, "output.link_save_message");
-		} else {
-			String str2 = "File location: " + str;
-			this.lbl_success_message.setText(str2);
-			this.lnk_saved_file.setText("");
-		}
-		SWTUtils.setLocalizedText(btn_save, "common.Save");
-	}
-
-
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java
deleted file mode 100644
index b4d06546..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites;
-
-// Imports
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.EventQueue;
-import java.awt.Frame;
-import java.awt.Image;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseWheelEvent;
-import java.awt.event.MouseWheelListener;
-import java.awt.geom.Point2D;
-
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.awt.SWT_AWT;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.ScrollBar;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.states.State;
-import at.asit.pdfover.signer.SignaturePosition;
-
-/**
- * Composite which allows to position the signature on a preview of the document
- */
-public class PositioningComposite extends StateComposite {
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(PositioningComposite.class);
-
-	SignaturePanel viewer = null;
-	Frame frame = null;
-	Composite mainArea = null;
-	Composite bottomBar = null;
-	Button btnNewPage = null;
-	Label lblPage = null;
-	ScrollBar scrollbar = null;
-
-	private SignaturePosition position = null;
-	int currentPage = 0;
-	int numPages = 0;
-
-	/**
-	 * Create the composite.
-	 *
-	 * @param parent
-	 * @param style
-	 * @param state
-	 */
-	public PositioningComposite(Composite parent, int style, State state) {
-		super(parent, style, state);
-		this.setLayout(new FormLayout());
-
-		this.bottomBar = new Composite(this, SWT.NONE);
-		SWTUtils.anchor(bottomBar).left(0).right(100).bottom(100);
-		this.bottomBar.setLayout(new FormLayout());
-
-		this.btnSign = new Button(this.bottomBar, SWT.PUSH);
-		SWTUtils.anchor(btnSign).right(100).top(0);
-		this.getShell().setDefaultButton(this.btnSign);
-
-		this.btnNewPage = new Button(this.bottomBar, SWT.TOGGLE);
-		SWTUtils.anchor(btnNewPage).right(btnSign).top(0);
-
-		this.lblPage = new Label(this.bottomBar, SWT.CENTER);
-		SWTUtils.anchor(lblPage).left(0).right(btnNewPage, 5).bottom(100);
-
-		this.mainArea = new Composite(this, SWT.EMBEDDED | SWT.V_SCROLL);
-		SWTUtils.anchor(mainArea).left(0).right(100).top(0).bottom(bottomBar, -5);
-		this.scrollbar = this.mainArea.getVerticalBar();
-
-		this.frame = SWT_AWT.new_Frame(this.mainArea);
-		this.frame.addKeyListener(this.keyListener);
-		this.frame.addMouseWheelListener(this.mouseListener);
-
-		this.viewer = new SignaturePanel();
-		this.viewer.setSignaturePlaceholderBorderColor(new Color(
-				Constants.MAINBAR_ACTIVE_BACK_DARK.getRed(),
-				Constants.MAINBAR_ACTIVE_BACK_DARK.getGreen(),
-				Constants.MAINBAR_ACTIVE_BACK_DARK.getBlue()));
-		this.frame.add(this.viewer, BorderLayout.CENTER);
-
-		SWTUtils.addSelectionListener(btnNewPage, () -> {
-			if (this.currentPage > this.numPages)
-				showPage(this.numPages);
-			else
-				showPage(this.numPages + 1);
-			requestFocus();
-		});
-
-		SWTUtils.addSelectionListener(btnSign, this::setFinalPosition);
-
-		SWTUtils.addSelectionListener(scrollbar, () -> { this.showPage(this.scrollbar.getSelection()); });
-
-		reloadResources();
-		requestFocus();
-	}
-
-	@Override public void onDisplay() { if (this.viewer.getSigPagePos() == null) this.btnSign.setEnabled(false); }
-
-	/**
-	 * Set the PDF Document to display
-	 *
-	 * @param document
-	 *            document to display
-	 */
-	public void displayDocument(final PDDocument document) {
-		EventQueue.invokeLater(() -> {
-			this.viewer.setDocument(document);
-			getDisplay().asyncExec(() -> this.btnSign.setEnabled(true));
-		});
-
-		if (document != null)
-		{
-			this.numPages = document.getNumberOfPages();
-			this.scrollbar.setValues(1, 1, this.numPages + 1, 1, 1, 1);
-			showPage(this.numPages);
-		}
-	}
-
-	@Override
-	public void dispose() {
-		this.viewer.setDocument(null);
-		super.dispose();
-	}
-
-	/**
-	 * Request focus (to enable keyboard input)
-	 */
-	public void requestFocus() {
-		getDisplay().asyncExec(() -> {
-			if (!this.isDisposed() && !this.mainArea.isDisposed()) {
-				this.mainArea.setFocus();
-				EventQueue.invokeLater(() -> {
-					if (!this.isDisposed()) {
-						if (!this.frame.hasFocus()) {
-							this.frame.requestFocus();
-						}
-					}
-				});
-			}
-		});
-	}
-
-	/**
-	 * Set the signature placeholder image Must be called _after_
-	 * displayDocument
-	 *
-	 * @param placeholder
-	 *            signature placeholder
-	 * @param width
-	 *            width of the placeholder in page space
-	 * @param height
-	 *            height of the placeholder in page space
-	 */
-	public void setPlaceholder(final Image placeholder) {
-		EventQueue.invokeLater(() -> {
-			if (this.viewer == null)
-				return;
-			this.viewer.setSignaturePlaceholder(placeholder);
-		});
-	}
-
-	KeyListener keyListener = new KeyAdapter() {
-		@Override
-		public void keyPressed(KeyEvent e) {
-			int newPage = PositioningComposite.this.currentPage;
-			int sigXOffset = 0;
-			int sigYOffset = 0;
-
-			switch (e.getKeyCode()) {
-			case KeyEvent.VK_PAGE_DOWN:
-				if (PositioningComposite.this.currentPage < PositioningComposite.this.numPages)
-					++newPage;
-				break;
-
-			case KeyEvent.VK_PAGE_UP:
-				if (PositioningComposite.this.currentPage > 1)
-					--newPage;
-				break;
-
-			case KeyEvent.VK_END:
-				newPage = PositioningComposite.this.numPages;
-				break;
-
-			case KeyEvent.VK_HOME:
-				newPage = 1;
-				break;
-
-			case KeyEvent.VK_ENTER:
-				setFinalPosition();
-				break;
-
-			case KeyEvent.VK_LEFT:
-			case KeyEvent.VK_KP_LEFT:
-				sigXOffset -= Constants.SIGNATURE_KEYBOARD_POSITIONING_OFFSET;
-				break;
-
-			case KeyEvent.VK_RIGHT:
-			case KeyEvent.VK_KP_RIGHT:
-				sigXOffset += Constants.SIGNATURE_KEYBOARD_POSITIONING_OFFSET;
-				break;
-
-			case KeyEvent.VK_UP:
-			case KeyEvent.VK_KP_UP:
-				sigYOffset += Constants.SIGNATURE_KEYBOARD_POSITIONING_OFFSET;
-				break;
-
-			case KeyEvent.VK_DOWN:
-			case KeyEvent.VK_KP_DOWN:
-				sigYOffset -= Constants.SIGNATURE_KEYBOARD_POSITIONING_OFFSET;
-				break;
-			}
-
-			if (newPage != PositioningComposite.this.currentPage)
-				showPage(newPage);
-
-			if (sigXOffset != 0 || sigYOffset != 0)
-				translateSignaturePosition(sigXOffset, sigYOffset);
-		}
-	};
-
-	MouseWheelListener mouseListener = new MouseWheelListener() {
-		private long lastEventTime = 0;
-
-		@Override
-		public void mouseWheelMoved(MouseWheelEvent e) {
-			e.consume();
-			// Workaround for Linux: Events fire twice
-			if (e.getWhen() == this.lastEventTime)
-				return;
-			this.lastEventTime = e.getWhen();
-
-			int change = e.isShiftDown() ? 5 : 1;
-			int newPage = PositioningComposite.this.currentPage;
-
-			if (e.getWheelRotation() < 0) {
-				newPage = Math.max(1, newPage - change);
-			} else if (e.getWheelRotation() > 0) {
-				newPage = Math.min(newPage + change, PositioningComposite.this.numPages);
-			}
-
-			if (newPage != PositioningComposite.this.currentPage)
-				showPage(newPage);
-		}
-	};
-
-	private Button btnSign;
-
-	void showPage(final int page) {
-		final int previousPage = this.currentPage;
-		this.currentPage = page;
-		getDisplay().asyncExec(() -> {
-			int currentPage = this.currentPage;
-			int numPages = this.numPages;
-			if ((previousPage > numPages) && (currentPage <= numPages)) {
-				// Was on new page
-				SWTUtils.setLocalizedText(btnNewPage, "positioning.newPage");
-				this.btnNewPage.setSelection(false);
-				this.bottomBar.layout();
-				this.scrollbar.setMaximum(numPages + 1);
-			} else if ((previousPage <= numPages) && (currentPage > numPages)) {
-				// Go to new page
-				SWTUtils.setLocalizedText(btnNewPage, "positioning.removeNewPage");
-				this.btnNewPage.setSelection(true);
-				this.bottomBar.layout();
-				this.scrollbar.setMaximum(numPages + 2);
-			}
-			this.scrollbar.setSelection(currentPage);
-			SWTUtils.setLocalizedText(lblPage, "positioning.page", currentPage, numPages);
-		});
-		EventQueue.invokeLater(() -> {
-			PositioningComposite.this.viewer.showPage(page);
-		});
-	}
-
-	/**
-	 * Translate the signature placeholder position
-	 *
-	 * @param sigXOffset
-	 *            signature placeholder horizontal position offset
-	 * @param sigYOffset
-	 *            signature placeholder vertical position offset (negative is down)
-	 */
-	public void translateSignaturePosition(final int sigXOffset, final int sigYOffset) {
-		EventQueue.invokeLater(() -> {
-			this.viewer.translateSignaturePagePosition(sigXOffset, sigYOffset);
-		});
-	}
-
-	/**
-	 * Set the signature position and continue to the next state
-	 *
-	 * @param position
-	 *            the signature position
-	 */
-	void setFinalPosition() {
-		if (this.currentPage == 0) {
-			this.position = new SignaturePosition();
-		} else {
-			Point2D pos = this.viewer.getSigPagePos();
-			if (pos == null) return;
-
-			this.position = new SignaturePosition(
-					pos.getX(),
-					pos.getY(),
-					this.currentPage);
-		}
-		PositioningComposite.this.state.updateStateMachine();
-	}
-
-	/**
-	 * Set the signature position
-	 *
-	 * @param x
-	 *            the horizontal signature position
-	 * @param y
-	 *            the vertical signature position
-	 * @param page
-	 *            the page the signature is on
-	 */
-	public void setPosition(double x, double y, int page) {
-		showPage(page);
-		if (this.viewer != null)
-			this.viewer.setSignaturePosition(x, y);
-	}
-
-	/**
-	 * Get the signature position
-	 *
-	 * @return the signature position
-	 */
-	public SignaturePosition getPosition() {
-		return this.position;
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(btnNewPage, (this.currentPage <= this.numPages) ? "positioning.newPage" : "positioning.removeNewPage");
-		SWTUtils.setLocalizedText(btnSign, "positioning.sign");
-		SWTUtils.setLocalizedText(lblPage, "positioning.page", this.currentPage, this.numPages);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java
deleted file mode 100644
index df880459..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites;
-
-// Imports
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Image;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-
-import javax.annotation.CheckForNull;
-import javax.swing.JPanel;
-
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.common.PDRectangle;
-import org.apache.pdfbox.rendering.PDFRenderer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- *
- */
-public class SignaturePanel extends JPanel {
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(SignaturePanel.class);
-
-	/** Default serial version ID */
-	private static final long serialVersionUID = 1L;
-
-	/** The PDF file being displayed */
-	private PDDocument pdf = null;
-	private PDFRenderer renderer = null;
-
-	/** The image of the rendered PDF page being displayed */
-	Image currentImage = null;
-
-	/** The current scale for rendering pdf to image */
-	private float pageToImageScale;
-	/** The current scale for rendering image to screen */
-	private double imageToScreenScale;
-	/* scaling */
-	private enum U {
-		/* (0,0) is bottom-left of page */
-		PAGE_ABS,
-		/* (0,0) is top-left of page */
-		PAGE_REL,
-		/* pixels, (0,0) is top-left of image */
-		IMAGE,
-		/* pixels, (0,0) is top-left of image */
-		SCREEN_REL,
-		/* pixels, (0,0) is top-left of canvas */
-		SCREEN_ABS };
-	private enum Dim { X, Y };
-	private double scale(double v, U from, U to, Dim d)
-	{
-		if (from == to) return v;
-
-		if (from == U.PAGE_ABS) {
-			return scale((d == Dim.X) ? v : (this.pageHeight - v), U.PAGE_REL, to, d);
-		} else if (from == U.PAGE_REL) {
-			if (to == U.PAGE_ABS)
-				return ((d == Dim.X) ? v : (this.pageHeight - v));
-			else
-				return scale(v * this.pageToImageScale, U.IMAGE, to, d);
-		} else if (from == U.IMAGE) {
-			if ((to == U.PAGE_ABS) || (to == U.PAGE_REL))
-				return scale(v / this.pageToImageScale, U.PAGE_REL, to, d);
-			else
-				return scale(v * this.imageToScreenScale, U.SCREEN_REL, to, d);
-		} else if (from == U.SCREEN_REL) {
-			if (to == U.SCREEN_ABS)
-				return (v + ((d == Dim.X) ? this.offX : this.offY));
-			else
-				return scale(v / this.imageToScreenScale, U.IMAGE, to, d);
-		} else if (from == U.SCREEN_ABS) {
-			return scale(v - ((d == Dim.X) ? this.offX : this.offY), U.SCREEN_REL, to, d);
-		} else throw new RuntimeException("unreachable");
-	}
-
-	private float pageWidth = 0;
-	private float pageHeight = 0;
-	/** The horizontal offset of the image from the left edge of the panel */
-	private int offX = 0;
-	/** The vertical offset of the image from the top of the panel */
-	private int offY = 0;
-	/** The position of the top-left corner of the signature, in absolute page space */
-	private Point2D sigPagePos = null;
-	public @CheckForNull Point2D getSigPagePos() { return this.sigPagePos; }
-	/** The signature placeholder image */
-	private Image sigPlaceholder = null;
-	/** Width of the signature placeholder in page space */
-	private int sigPageWidth = 0;
-	/** Height of the signature placeholder in page space */
-	private int sigPageHeight = 0;
-	/** Color of the signature placeholder border */
-	private Color sigPlaceholderBorderColor = Color.BLUE;
-	/** Current page */
-	private int currentPageNo = 0;
-	/** Number of pages in the document */
-	private int numPages = 0;
-	/** Cursor types */
-	private static enum Cursors {DEFAULT, HAND, MOVE};
-	/** Default arrow cursor */
-	private final Cursor defaultCursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
-	/** Hand cursor */
-	private final Cursor handCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
-	/** Move cursor */
-	private final Cursor moveCursor = Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR);
-	/** Current cursor */
-	private Cursors currentCursor = Cursors.DEFAULT;
-
-	/**
-	 * Create a new PagePanel.
-	 */
-	public SignaturePanel() {
-		super(new BorderLayout());
-		setDocument(null);
-		setFocusable(true);
-		addMouseListener(this.mouseListener);
-		addMouseMotionListener(this.mouseListener);
-	}
-
-	/**
-	 * Set a new document to be displayed
-	 * @param pdf the PDFFile to be displayed
-	 */
-	public void setDocument(PDDocument pdf) {
-		this.pdf = pdf;
-		this.sigPagePos = null;
-		if (pdf != null)
-		{
-			this.renderer = new PDFRenderer(pdf);
-			this.numPages = pdf.getNumberOfPages();
-			this.currentPageNo = -1;
-			showPage(this.numPages);
-		}
-		else
-		{
-			this.renderer = null;
-			this.currentPageNo = 0;
-			this.numPages = 0;
-			renderPageToImage();
-			repaint();
-		}
-	}
-
-	/**
-	 * Set the signature placeholder image
-	 * @param placeholder signature placeholder
-	 * @param width width of the placeholder in page space
-	 * @param height height of the placeholder in page space
-	 */
-	public void setSignaturePlaceholder(Image placeholder) {
-		this.sigPlaceholder = placeholder;
-		// TODO figure out why this is divided by 4 (factor ported from old code)
-		this.sigPageWidth = placeholder.getWidth(null) / 4;
-		this.sigPageHeight = placeholder.getHeight(null) / 4;
-		renderPageToImage();
-		if (this.sigPagePos != null)
-			setSignaturePosition(this.sigPagePos.getX(), this.sigPagePos.getY());
-		repaint();
-	}
-
-	/**
-	 * Set the color of the signature placeholder border
-	 * @param color new signature placeholder border color
-	 */
-	public void setSignaturePlaceholderBorderColor(Color color) {
-		this.sigPlaceholderBorderColor = color;
-	}
-
-	/**
-	 * Change the currently displayed page
-	 * @param page the number of the page to display
-	 */
-	public void showPage(int page) {
-		if (this.currentPageNo == page) return;
-		this.currentPageNo = page;
-		renderPageToImage();
-		repaint();
-	}
-
-	/**
-	 * Add and display a new page at the end of the document
-	 *
-	 * This page has the same dimensions as the old last page
-	 */
-	public void addNewLastPage() {
-		showPage(this.numPages + 1);
-	}
-
-	/**
-	 * Set the signature placeholder position
-	 * @param x the horizontal signature position
-	 * @param y the vertical signature position
-	 */
-	public void setSignaturePosition(double x, double y)
-	{
-		this.sigPagePos = new Point2D.Double(
-			clamp(x, 0, this.pageWidth - this.sigPageWidth),
-			clamp(y, this.sigPageHeight, this.pageHeight)
-		);
-		repaint();
-	}
-
-	public void translateSignaturePagePosition(float dX, float dY) {
-		setSignaturePosition(this.sigPagePos.getX() + dX, this.sigPagePos.getY() + dY);
-	}
-
-	/**
-	 * Stop the generation of any previous page, and draw the new one.
-	 *
-	 * @param page the PDFPage to draw.
-	 */
-	private synchronized void renderPageToImage() {
-		if (this.pdf == null)
-		{
-			this.currentImage = null;
-			return;
-		}
-
-		boolean newPage = false;
-		PDPage currentPage;
-		// set up the new page
-		if (this.currentPageNo > this.numPages)
-		{
-			// New last page - use old last page as template
-			currentPage = this.pdf.getPage(this.numPages-1);
-			newPage = true;
-		}
-		else
-			currentPage = this.pdf.getPage(this.currentPageNo-1);
-
-
-		if (currentPage == null) {
-			// no page
-			this.currentImage = null;
-			return;
-		}
-		
-		boolean isRotated = ((currentPage.getRotation()%180) == 90);
-		PDRectangle actualPageSize = currentPage.getBBox();
-		this.pageWidth = isRotated ? actualPageSize.getHeight() : actualPageSize.getWidth();
-		this.pageHeight = isRotated ? actualPageSize.getWidth() : actualPageSize.getHeight();
-		this.pageToImageScale = getToolkit().getScreenSize().height / this.pageHeight;
-
-		// get the new image
-		if (newPage)
-		{
-			int renderHeight = (int)(0.5 + this.scale(this.pageHeight, U.PAGE_REL, U.IMAGE, Dim.X));
-			int renderWidth = (int)(0.5 + this.scale(this.pageWidth, U.PAGE_REL, U.IMAGE, Dim.Y));
-			this.currentImage = new BufferedImage(renderWidth, renderHeight, BufferedImage.TYPE_INT_RGB);
-			Graphics g = this.currentImage.getGraphics();
-			g.setColor(Color.WHITE);
-			g.fillRect(0, 0, renderWidth, renderHeight);
-		}
-		else
-		{
-			int whichPage = Math.min(this.currentPageNo, this.numPages);
-
-			try {
-				this.currentImage = renderer.renderImage(whichPage-1, this.pageToImageScale);
-			} catch (IOException e) {
-				log.error(String.format("Failed to render image for page %d of %d", whichPage, this.numPages), e);
-				this.currentImage = null;
-			}
-		}
-
-		if (this.sigPagePos == null)
-		{
-			setSignaturePosition(
-				this.pageWidth * .5,
-				this.pageHeight * .75
-			);
-		}
-	}
-
-	/**
-	 * Draw the image.
-	 */
-	@Override
-	public void paint(Graphics g) {
-		Dimension renderPanelSize = getSize();
-		g.setColor(getBackground());
-		g.fillRect(0, 0, getWidth(), getHeight());
-		if (this.currentImage == null) {
-			g.setColor(Color.black);
-			g.drawString(Messages.getString("common.working"), getWidth() / 2 - 30, getHeight() / 2);
-		} else {
-			this.imageToScreenScale = Math.min(
-				renderPanelSize.getWidth() / this.currentImage.getWidth(null),
-				renderPanelSize.getHeight() / this.currentImage.getHeight(null));
-			// draw the image
-			int actualRenderWidth = (int)(this.currentImage.getWidth(null) * this.imageToScreenScale);
-			int actualRenderHeight = (int)(this.currentImage.getHeight(null) * this.imageToScreenScale);
-
-			// draw it centered within the panel
-			this.offX = (renderPanelSize.width - actualRenderWidth) / 2;
-			this.offY = (renderPanelSize.height - actualRenderHeight) / 2;
-
-			// draw document
-			g.drawImage(this.currentImage, this.offX, this.offY, actualRenderWidth, actualRenderHeight, null);
-			
-
-			// draw signature
-			int sigX = (int) this.scale(this.sigPagePos.getX(), U.PAGE_ABS, U.SCREEN_ABS, Dim.X);
-			int sigY = (int) this.scale(this.sigPagePos.getY(), U.PAGE_ABS, U.SCREEN_ABS, Dim.Y);
-			if (this.sigPlaceholder == null) {
-				g.setColor(Color.red);
-				g.drawRect(sigX, sigY, 100, 40);
-			}
-			else {
-				int sigScreenWidth = (int)this.scale(this.sigPageWidth, U.PAGE_REL, U.SCREEN_REL, Dim.X);
-				int sigScreenHeight = (int)this.scale(this.sigPageHeight, U.PAGE_REL, U.SCREEN_REL, Dim.Y);
-				g.drawImage(this.sigPlaceholder, sigX, sigY, sigScreenWidth, sigScreenHeight, null);
-				g.setColor(this.sigPlaceholderBorderColor);
-				g.drawRect(sigX, sigY, sigScreenWidth-1, sigScreenHeight-1);
-			}
-		}
-	}
-
-	/**
-	 * Handles notification of the fact that some part of the image changed.
-	 * Repaints that portion.
-	 *
-	 * @return true if more updates are desired.
-	 */
-	@Override
-	public boolean imageUpdate(Image img, int infoflags, int x, int y,
-			int width, int height) {
-		if ((infoflags & (SOMEBITS | ALLBITS)) != 0) {
-			repaint(x + this.offX, y + this.offY, width, height);
-		}
-		return ((infoflags & (ALLBITS | ERROR | ABORT)) == 0);
-	}
-
-	private MouseAdapter mouseListener = new MouseAdapter() {
-
-		private boolean doDrag = false;
-		private int dragXOffset = 0;
-		private int dragYOffset = 0;
-
-		private void updateSigPosDrag(MouseEvent evt) {
-			SignaturePanel.this.setSignaturePosition(
-				SignaturePanel.this.scale(evt.getX() - this.dragXOffset, U.SCREEN_ABS, U.PAGE_ABS, Dim.X),
-				SignaturePanel.this.scale(evt.getY() - this.dragYOffset, U.SCREEN_ABS, U.PAGE_ABS, Dim.Y)
-			);
-		}
-
-		/** Handles a mouseMoved event */
-		@Override
-		public void mouseMoved(MouseEvent evt) {
-			try {
-				boolean onSig = isOnSignature(evt);
-				setCursor(onSig ? Cursors.HAND : Cursors.DEFAULT);
-			} catch (NullPointerException e) {
-				// do nothing
-			}
-		}
-
-		/** Handles a mousePressed event */
-		@Override
-		public void mousePressed(MouseEvent evt) {
-			if (evt.getButton() == MouseEvent.BUTTON1)
-			{
-				this.doDrag = true;
-				if (isOnSignature(evt)) {
-					/* offsets (in screen units) from top-left corner of signature to cursor on drag start */
-					this.dragXOffset = (int)(evt.getX() - SignaturePanel.this.scale(SignaturePanel.this.sigPagePos.getX(), U.PAGE_ABS, U.SCREEN_ABS, Dim.X));
-					this.dragYOffset = (int)(evt.getY() - SignaturePanel.this.scale(SignaturePanel.this.sigPagePos.getY(), U.PAGE_ABS, U.SCREEN_ABS, Dim.Y));
-				} else {
-					this.dragXOffset = 0;
-					this.dragYOffset = 0;
-				}
-				updateSigPosDrag(evt);
-				setCursor(Cursors.MOVE);
-			}
-		}
-
-		/** Handles a mouseReleased event */
-		@Override
-		public void mouseReleased(MouseEvent evt) {
-			this.doDrag = false;
-			boolean onSig = isOnSignature(evt);
-			setCursor(onSig ? Cursors.HAND : Cursors.DEFAULT);
-		}
-
-		/**
-		 * Handles a mouseDragged event.
-		 */
-		@Override
-		public void mouseDragged(MouseEvent evt) {
-			if (this.doDrag)
-				updateSigPosDrag(evt);
-		}
-	};
-
-	/**
-	 * Sets the mouse cursor
-	 * @param cursor cursor to set
-	 */
-	void setCursor(Cursors cursor)
-	{
-		if (this.currentCursor == cursor)
-			return;
-		this.currentCursor = cursor;
-		Cursor cur = null;
-		switch (cursor) {
-			case DEFAULT:
-				cur = this.defaultCursor;
-				break;
-			case HAND:
-				cur = this.handCursor;
-				break;
-			case MOVE:
-				cur = this.moveCursor;
-				break;
-		}
-		this.getParent().setCursor(cur);
-	}
-
-	/**
-	 * Check whether given point is on signature placeholder
-	 * @param x x coordinate (screen)
-	 * @param y y coordinate (screen)
-	 * @return true if given point is on signature placeholder
-	 */
-	private boolean isOnSignature(MouseEvent evt)
-	{
-		if (this.sigPagePos == null)
-			return false;
-
-		Rectangle2D sig = new Rectangle2D.Double(
-			this.scale(this.sigPagePos.getX(), U.PAGE_ABS, U.SCREEN_ABS, Dim.X),
-			this.scale(this.sigPagePos.getY(), U.PAGE_ABS, U.SCREEN_ABS, Dim.Y),
-			this.scale(this.sigPageWidth, U.PAGE_REL, U.SCREEN_REL, Dim.X),
-			this.scale(this.sigPageHeight, U.PAGE_REL, U.SCREEN_REL, Dim.Y)
-		);
-		return sig.contains(evt.getX(), evt.getY());
-	}
-
-	/**
-	 * Clamp x to be within [min-max]
-	 * @param x int to clamp
-	 * @param min minimum value
-	 * @param max maximum value
-	 * @return clamped x
-	 */
-	private static double clamp(double x, double min, double max)
-	{
-		if (x < min)
-			x = min;
-		else if (x > max)
-			x = max;
-		return x;
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/StateComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/StateComposite.java
deleted file mode 100644
index 085f7b71..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/StateComposite.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites;
-
-// Imports
-import org.eclipse.swt.widgets.Composite;
-
-import at.asit.pdfover.gui.workflow.states.State;
-
-/**
- *	Composite interface for workflow state gui implementations
- */
-public abstract class StateComposite extends Composite {
-
-    /**
-	 * Current State
-	 */
-	protected State state;
-
-	/**
-	 * The base class for state composites
-	 *
-	 * @param parent The parent Composite
-	 * @param style The Composite style
-	 * @param state The current State
-	 */
-	public StateComposite(Composite parent, int style, State state) {
-		super(parent, style);
-		this.state = state;
-	}
-
-	public final void doLayout() { this.layout(true,true); this.onDisplay(); }
-
-	/**
-	 * Reloads the localizeable resources
-	 */
-	public abstract void reloadResources();
-
-	/**
-	 * Called when the control is .display()ed
-	 */
-	public void onDisplay() {}
-
-	// allow subclassing of SWT components
-	@Override protected final void checkSubclass() {}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/WaitingComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/WaitingComposite.java
deleted file mode 100644
index dc18155a..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/WaitingComposite.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites;
-
-// Imports
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.ProgressBar;
-
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.states.State;
-
-/**
- *
- */
-public class WaitingComposite extends StateComposite {
-	private Label lbl_description;
-
-	/**
-	 * Create the composite.
-	 * @param parent
-	 * @param style
-	 * @param state
-	 */
-	public WaitingComposite(Composite parent, int style, State state) {
-		super(parent, style, state);
-		setLayout(new FormLayout());
-
-		this.lbl_description = new Label(this, SWT.NATIVE);
-		FormData fd_lbl_description = new FormData();
-		fd_lbl_description.bottom = new FormAttachment(50, -10);
-		fd_lbl_description.left = new FormAttachment(0, +10);
-		fd_lbl_description.right = new FormAttachment(100, -10);
-		this.lbl_description.setLayoutData(fd_lbl_description);
-		this.lbl_description.setAlignment(SWT.CENTER);
-		SWTUtils.setLocalizedText(lbl_description, "waiting.message");
-
-		ProgressBar progressBar = new ProgressBar(this, SWT.HORIZONTAL | SWT.INDETERMINATE);
-		FormData fd_progressBar = new FormData();
-		fd_progressBar.top = new FormAttachment(50, +10);
-		fd_progressBar.bottom = new FormAttachment(50, +40);
-		fd_progressBar.left = new FormAttachment(50, -100);
-		fd_progressBar.right = new FormAttachment(50, +100);
-		progressBar.setLayoutData(fd_progressBar);
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(lbl_description, "waiting.message");
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AboutComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AboutComposite.java
deleted file mode 100644
index 14f7a015..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AboutComposite.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package at.asit.pdfover.gui.composites.configuration;
-
-import java.awt.Desktop;
-import java.io.File;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.program.Program;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.utils.UpdateCheckManager;
-import at.asit.pdfover.gui.workflow.config.ConfigurationDataInMemory;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.gui.workflow.states.State;
-
-public class AboutComposite extends ConfigurationCompositeBase {
-	static final Logger log = LoggerFactory.getLogger(AboutComposite.class);
-	private Link lnkAbout;
-	private Link lnkDataProtection;
-	private Label lblDataProtection;
-	private Link lnkUpdateCheckStatus;
-	private Button btnUpdateCheck;
-	private Button btnOpenLogDirectory;
-	private UpdateCheckManager.Status latestUpdateStatus;
-	/**
- * @param parent
- * @param style
-	 */
-	public AboutComposite(Composite parent, int style, State state, ConfigurationDataInMemory container) {
-		super(parent, style, state, container);
-
-		setLayout(new FormLayout());
-
-		this.lnkAbout = new Link(this, SWT.WRAP);
-		SWTUtils.anchor(lnkAbout).top(0,5).right(100,-5).left(0,5);
-		SWTUtils.setFontHeight(lnkAbout, Constants.TEXT_SIZE_NORMAL);
-		SWTUtils.addSelectionListener(lnkAbout, (e) -> { SWTUtils.openURL(Messages.getString("config.LicenseURL")); });
-
-		this.lblDataProtection = new Label(this, SWT.WRAP);
-		SWTUtils.anchor(lblDataProtection).top(lnkAbout, 15).left(0,5).right(100,-5);
-		SWTUtils.setFontHeight(lblDataProtection, Constants.TEXT_SIZE_BIG);
-		SWTUtils.setFontStyle(lblDataProtection, SWT.BOLD);
-
-		this.lnkDataProtection = new Link(this, SWT.WRAP);
-		SWTUtils.anchor(lnkDataProtection).top(lblDataProtection,10).left(0,5).right(100,-5);
-		SWTUtils.setFontHeight(lnkDataProtection, Constants.TEXT_SIZE_NORMAL);
-		SWTUtils.addSelectionListener(lnkDataProtection, (e) -> { SWTUtils.openURL(Messages.getString("config.DataProtectionURL")); });
-
-		this.lnkUpdateCheckStatus = new Link(this, SWT.NONE);
-		SWTUtils.anchor(lnkUpdateCheckStatus).bottom(100, -5).left(0,5);
-		SWTUtils.setFontHeight(lnkUpdateCheckStatus, Constants.TEXT_SIZE_BUTTON);
-		UpdateCheckManager.registerStatusCallback((s) -> { if (isDisposed()) return; latestUpdateStatus = s; getDisplay().asyncExec(() -> { RefreshUpdateStatusText(); }); });
-		SWTUtils.addSelectionListener(lnkUpdateCheckStatus, (e) -> {
-			if (latestUpdateStatus == UpdateCheckManager.Status.OUTDATED)
-				Program.launch(Constants.UPDATE_URL);
-			else
-				UpdateCheckManager.checkNow(getShell());
-		});
-
-		this.btnUpdateCheck = new Button(this, SWT.CHECK);
-		SWTUtils.anchor(btnUpdateCheck).bottom(lnkUpdateCheckStatus,-5).left(0,5);
-		SWTUtils.setFontHeight(btnUpdateCheck, Constants.TEXT_SIZE_BUTTON);
-		SWTUtils.addSelectionListener(btnUpdateCheck, (e) -> {
-			boolean enabled = btnUpdateCheck.getSelection();
-			this.configurationContainer.updateCheck = enabled;
-			if (enabled)
-				UpdateCheckManager.checkNow(getShell());
-		});
-
-		this.btnOpenLogDirectory = new Button(this, SWT.NONE);
-		SWTUtils.anchor(btnOpenLogDirectory).bottom(100, -5).right(100, -5);
-		SWTUtils.setFontHeight(btnOpenLogDirectory, Constants.TEXT_SIZE_BUTTON);
-
-		SWTUtils.reanchor(lnkDataProtection).bottom(btnUpdateCheck,-5);
-
-		SWTUtils.addSelectionListener(btnOpenLogDirectory, (e) -> {
-			try {
-				if (Desktop.isDesktopSupported())
-					Desktop.getDesktop().open(new File(Constants.CONFIG_DIRECTORY + File.separator + "logs"));
-			} catch (Exception ex) {
-				log.warn("Failed to open log directory: ", ex);
-			}
-		});
-
-		// Load localized strings
-		reloadResources();
-	}
-
-	private void RefreshUpdateStatusText() {
-		SWTUtils.setLocalizedText(lnkUpdateCheckStatus, "config.UpdateStatus." + latestUpdateStatus.name());
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(lnkAbout, "config.AboutText");
-		SWTUtils.setLocalizedText(lblDataProtection, "config.DataProtection");
-		SWTUtils.setLocalizedText(lnkDataProtection, "config.DataProtectionStatement");
-		SWTUtils.setLocalizedText(btnUpdateCheck, "advanced_config.UpdateCheck");
-		SWTUtils.setLocalizedToolTipText(btnUpdateCheck, "advanced_config.UpdateCheck_ToolTip");
-		SWTUtils.setLocalizedText(btnOpenLogDirectory, "config.ShowLogDirectory");
-		RefreshUpdateStatusText();
-	}
-
-	@Override
-	public void initConfiguration(ConfigurationManager provider) {
-		this.configurationContainer.updateCheck = provider.getUpdateCheck();
-	}
-
-	@Override
-	public void loadConfiguration() {
-		btnUpdateCheck.setSelection(this.configurationContainer.updateCheck);
-	}
-
-	@Override
-	public void storeConfiguration(ConfigurationManager store) {
-		store.setUpdateCheckPersistent(this.configurationContainer.updateCheck);
-	}
-
-	@Override
-	public void validateSettings(int resumeFrom) throws Exception {}
-}
\ No newline at end of file
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AdvancedConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AdvancedConfigurationComposite.java
deleted file mode 100644
index df1a809b..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/AdvancedConfigurationComposite.java
+++ /dev/null
@@ -1,709 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites.configuration;
-
-// Imports
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-import java.util.stream.Collectors;
-
-import javax.annotation.Nonnull;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.BKUs;
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.commons.Profile;
-import at.asit.pdfover.gui.composites.ConfigurationComposite;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.gui.controls.ErrorMarker;
-import at.asit.pdfover.gui.exceptions.InvalidPortException;
-import at.asit.pdfover.gui.exceptions.OutputfolderDoesntExistException;
-import at.asit.pdfover.gui.exceptions.OutputfolderNotADirectoryException;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.gui.workflow.config.ConfigurationDataInMemory;
-import at.asit.pdfover.gui.workflow.states.State;
-
-/**
- * Composite for advanced configuration
- *
- * Contains the simple configuration composite
- */
-public class AdvancedConfigurationComposite extends ConfigurationCompositeBase {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(AdvancedConfigurationComposite.class);
-
-	private ConfigurationComposite configurationComposite;
-
-	private Group grpSignatur;
-	private Group grpPlaceholder;
-	Button btnAutomatischePositionierung;
-	Button btnPdfACompat;
-	Button btnPlatzhalterVerwenden;
-	Button btnSignatureFieldsUsage;
-	Button btnEnablePlaceholderUsage;
-
-	private Group grpBkuAuswahl;
-	Combo cmbBKUAuswahl;
-	List<String> bkuStrings;
-	Button btnKeystoreEnabled;
-
-	private final Group grpSpeicherort;
-	private final Label lblDefaultOutputFolder;
-	Text txtOutputFolder;
-	private final Button btnBrowse;
-	private final Label lblSaveFilePostFix;
-	private final Text txtSaveFilePostFix;
-
-	private final Group grpLocaleAuswahl;
-	Combo cmbLocaleAuswahl;
-
-	private Group grpProxy;
-	private Label lblProxyHost;
-	private Text txtProxyHost;
-	private ErrorMarker proxyHostErrorMarker;
-	private Label lblProxyPort;
-	private Text txtProxyPort;
-	private ErrorMarker txtProxyPortErrorMarker;
-	FormData fd_txtProxyPort;
-	FormData fd_txtProxyPortErrorMarker;
-
-	/**
-	 * @param parent
-	 * @param style
-	 * @param state
-	 * @param container
-	 * @param config
-	 */
-	public AdvancedConfigurationComposite(Composite parent, int style, State state, ConfigurationDataInMemory container,
-			ConfigurationComposite config) {
-		super(parent, style, state, container);
-		this.configurationComposite = config;
-		setLayout(new FormLayout());
-
-		FormLayout STANDARD_LAYOUT = new FormLayout();
-		STANDARD_LAYOUT.marginHeight = 10;
-		STANDARD_LAYOUT.marginWidth = 5;
-
-		this.grpLocaleAuswahl = new Group(this, SWT.NONE);
-		this.grpLocaleAuswahl.setLayout(STANDARD_LAYOUT);
-		SWTUtils.anchor(grpLocaleAuswahl).top(0, 5).left(0,5).right(100,-5);
-		SWTUtils.setFontHeight(grpLocaleAuswahl, Constants.TEXT_SIZE_NORMAL);
-
-		this.grpSignatur = new Group(this, SWT.NONE);
-		this.grpSignatur.setLayout(STANDARD_LAYOUT);
-		SWTUtils.anchor(grpSignatur).top(grpLocaleAuswahl,5).right(100,-5).left(0,5);
-		SWTUtils.setFontHeight(grpSignatur, Constants.TEXT_SIZE_NORMAL);
-
-		this.grpPlaceholder = new Group(this, SWT.NONE);
-		this.grpPlaceholder.setLayout(STANDARD_LAYOUT);
-		SWTUtils.anchor(grpPlaceholder).top(grpSignatur, 5).left(0,5).right(100,-5);
-		SWTUtils.setFontHeight(grpPlaceholder, Constants.TEXT_SIZE_NORMAL);
-
-		this.grpBkuAuswahl = new Group(this, SWT.NONE);
-		this.grpBkuAuswahl.setLayout(STANDARD_LAYOUT);
-		SWTUtils.anchor(grpBkuAuswahl).top(grpPlaceholder, 5).left(0,5).right(100,-5);
-		SWTUtils.setFontHeight(grpBkuAuswahl, Constants.TEXT_SIZE_NORMAL);
-
-		this.grpSpeicherort = new Group(this, SWT.NONE);
-		grpSpeicherort.setLayout(new GridLayout(3, false));
-		SWTUtils.anchor(grpSpeicherort).left(0,5).top(grpBkuAuswahl, 5).right(100,-5);
-		SWTUtils.setFontHeight(grpSpeicherort, Constants.TEXT_SIZE_NORMAL);
-
-		this.grpProxy = new Group(this, SWT.NONE);
-		SWTUtils.anchor(grpProxy).right(100,-5).top(grpSpeicherort, 5).left(0,5);
-		this.grpProxy.setLayout(new GridLayout(2, false));
-		SWTUtils.setFontHeight(grpProxy, Constants.TEXT_SIZE_NORMAL);
-
-		this.btnAutomatischePositionierung = new Button(this.grpSignatur, SWT.CHECK);
-		SWTUtils.anchor(btnAutomatischePositionierung).right(100,-5).top(0).left(0,5);
-		SWTUtils.setFontHeight(btnAutomatischePositionierung, Constants.TEXT_SIZE_BUTTON);
-		SWTUtils.addSelectionListener(btnAutomatischePositionierung, e -> { performPositionSelection(btnAutomatischePositionierung.getSelection()); });
-
-		this.btnPdfACompat = new Button(this.grpSignatur, SWT.CHECK);
-		SWTUtils.anchor(btnPdfACompat).right(100,-5).top(btnAutomatischePositionierung, 5).left(0,5);
-		SWTUtils.setFontHeight(btnPdfACompat, Constants.TEXT_SIZE_BUTTON);
-		SWTUtils.addSelectionListener(btnPdfACompat, e -> { performPdfACompatSelection(btnPdfACompat.getSelection()); });
-
-		this.btnEnablePlaceholderUsage = new Button(this.grpPlaceholder, SWT.CHECK);
-		SWTUtils.anchor(btnEnablePlaceholderUsage).top(0,5).left(0,5).right(100,-5);
-		SWTUtils.setFontHeight(btnEnablePlaceholderUsage, Constants.TEXT_SIZE_BUTTON);
-		SWTUtils.addSelectionListener(btnEnablePlaceholderUsage, e -> { performEnableUsePlaceholder(btnEnablePlaceholderUsage.getSelection()); });
-
-		this.btnPlatzhalterVerwenden = new Button(this.grpPlaceholder, SWT.RADIO);
-		SWTUtils.anchor(btnPlatzhalterVerwenden).right(100,-5).top(btnEnablePlaceholderUsage,5).left(0,5);
-		SWTUtils.setFontHeight(btnPlatzhalterVerwenden, Constants.TEXT_SIZE_BUTTON);
-		SWTUtils.addSelectionListener(btnPlatzhalterVerwenden, e -> { performUseMarkerSelection(btnPlatzhalterVerwenden.getSelection()); });
-
-		this.btnSignatureFieldsUsage = new Button(this.grpPlaceholder, SWT.RADIO);
-		SWTUtils.anchor(btnSignatureFieldsUsage).right(100,-5).top(btnPlatzhalterVerwenden, 5).left(0,5);
-		SWTUtils.setFontHeight(btnSignatureFieldsUsage, Constants.TEXT_SIZE_BUTTON);
-		SWTUtils.addSelectionListener(btnSignatureFieldsUsage, e -> { performUseSignatureFieldsSelection(btnSignatureFieldsUsage.getSelection()); });
-
-		this.cmbBKUAuswahl = new Combo(this.grpBkuAuswahl, SWT.READ_ONLY);
-		SWTUtils.anchor(cmbBKUAuswahl).right(100,-5).top(0).left(0,5);
-		SWTUtils.setFontHeight(cmbBKUAuswahl, Constants.TEXT_SIZE_NORMAL);
-		SWTUtils.scrollPassthrough(cmbBKUAuswahl);
-
-		this.bkuStrings = Arrays.stream(BKUs.values()).map(s -> Messages.getString("BKU."+s)).collect(Collectors.toList());
-		this.cmbBKUAuswahl.setItems(bkuStrings.toArray(new String[0]));
-		SWTUtils.addSelectionListener(cmbBKUAuswahl, e -> {
-			int selectionIndex = getBKUElementIndex(configurationContainer.defaultBKU);
-			if (cmbBKUAuswahl.getSelectionIndex() != selectionIndex) {
-				selectionIndex = cmbBKUAuswahl.getSelectionIndex();
-				performBKUSelectionChanged(cmbBKUAuswahl.getItem(selectionIndex));
-			}
-		});
-
-		this.btnKeystoreEnabled = new Button(this.grpBkuAuswahl, SWT.CHECK);
-		SWTUtils.anchor(btnKeystoreEnabled).right(100,-5).top(cmbBKUAuswahl,5).left(0,5);
-		SWTUtils.setFontHeight(btnKeystoreEnabled, Constants.TEXT_SIZE_BUTTON);
-		SWTUtils.addSelectionListener(btnKeystoreEnabled, e -> { performKeystoreEnabledSelection(btnKeystoreEnabled.getSelection()); });
-
-		this.lblDefaultOutputFolder = new Label(this.grpSpeicherort, SWT.NONE);
-		SWTUtils.setFontHeight(lblDefaultOutputFolder, Constants.TEXT_SIZE_NORMAL);
-
-		this.txtOutputFolder = new Text(this.grpSpeicherort, SWT.BORDER);
-		txtOutputFolder.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		SWTUtils.setFontHeight(txtOutputFolder, Constants.TEXT_SIZE_NORMAL);
-
-		this.txtOutputFolder.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusLost(FocusEvent e) {
-				performOutputFolderChanged(txtOutputFolder.getText());
-			}
-		});
-
-		this.btnBrowse = new Button(this.grpSpeicherort, SWT.NONE);
-		btnBrowse.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
-		SWTUtils.setFontHeight(btnBrowse, Constants.TEXT_SIZE_BUTTON);
-
-		SWTUtils.addSelectionListener(btnBrowse, e -> {
-			DirectoryDialog dlg = new DirectoryDialog(AdvancedConfigurationComposite.this.getShell());
-
-			// Set the initial filter path according
-			// to anything they've selected or typed in
-			dlg.setFilterPath(AdvancedConfigurationComposite.this.txtOutputFolder.getText());
-			
-			// Change the title bar text
-			SWTUtils.setLocalizedText(dlg, "advanced_config.OutputFolder.Dialog_Title");
-
-			// Customizable message displayed in the dialog
-			dlg.setMessage(Messages.getString("advanced_config.OutputFolder.Dialog"));
-
-			// Calling open() will open and run the dialog.
-			// It will return the selected directory, or
-			// null if user cancels
-			String dir = dlg.open();
-			if (dir != null) {
-				// Set the text box to the new selection
-				performOutputFolderChanged(dir);
-			}
-		});
-
-		this.lblSaveFilePostFix = new Label(this.grpSpeicherort, SWT.NONE);
-		SWTUtils.setLocalizedText(lblSaveFilePostFix, "AdvancedConfigurationComposite.lblSaveFilePostFix.text");
-		SWTUtils.setFontHeight(lblSaveFilePostFix, Constants.TEXT_SIZE_NORMAL);
-
-		this.txtSaveFilePostFix = new Text(this.grpSpeicherort, SWT.BORDER);
-		txtSaveFilePostFix.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		SWTUtils.setFontHeight(txtSaveFilePostFix, Constants.TEXT_SIZE_NORMAL);
-
-		this.txtSaveFilePostFix.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusLost(FocusEvent e) {
-				if (txtSaveFilePostFix.getText().trim().isEmpty())
-					txtSaveFilePostFix.setText(Constants.DEFAULT_POSTFIX);
-				performPostFixChanged(Constants.ISNOTNULL(txtSaveFilePostFix.getText()));
-			}
-		});
-
-		this.cmbLocaleAuswahl = new Combo(this.grpLocaleAuswahl, SWT.READ_ONLY);
-		SWTUtils.anchor(cmbLocaleAuswahl).right(100,-5).top(0).left(0,5);
-		SWTUtils.setFontHeight(cmbLocaleAuswahl, Constants.TEXT_SIZE_NORMAL);;
-		this.cmbLocaleAuswahl.setItems(Arrays.stream(Constants.SUPPORTED_LOCALES).map(l -> l.getDisplayLanguage()).toArray(String[]::new));
-		SWTUtils.scrollPassthrough(cmbLocaleAuswahl);
-
-		SWTUtils.addSelectionListener(cmbLocaleAuswahl, e -> {
-			Locale currentLocale = configurationContainer.interfaceLocale;
-			Locale selectedLocale = Constants.SUPPORTED_LOCALES[cmbLocaleAuswahl.getSelectionIndex()];
-			if (!currentLocale.equals(selectedLocale)) {
-				performLocaleSelectionChanged(selectedLocale);
-			}
-		});
-
-		this.lblProxyHost = new Label(this.grpProxy, SWT.NONE);
-		do { /* grid positioning */
-			GridData gd_lblProxyHost = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
-			gd_lblProxyHost.widthHint = 66;
-			this.lblProxyHost.setLayoutData(gd_lblProxyHost);
-			this.lblProxyHost.setBounds(0, 0, 57, 15);
-		} while (false);
-		SWTUtils.setFontHeight(lblProxyHost, Constants.TEXT_SIZE_NORMAL);
-
-		Composite compProxyHostContainer = new Composite(this.grpProxy, SWT.NONE);
-		compProxyHostContainer.setLayout(new FormLayout());
-		compProxyHostContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
-
-		this.txtProxyHost = new Text(compProxyHostContainer, SWT.BORDER);
-		SWTUtils.anchor(txtProxyHost).right(100,-42).top(0).left(0,5);
-		SWTUtils.setFontHeight(txtProxyHost, Constants.TEXT_SIZE_NORMAL);
-
-		this.proxyHostErrorMarker = new ErrorMarker(compProxyHostContainer, SWT.NONE, "");
-		SWTUtils.anchor(proxyHostErrorMarker).left(100,-32).right(100).top(0).bottom(0,32);
-		this.proxyHostErrorMarker.setVisible(false);
-
-		this.txtProxyHost.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusLost(FocusEvent e) {
-				processProxyHostChanged();
-			}
-		});
-
-		this.txtProxyHost.addTraverseListener(e -> {
-			if (e.detail == SWT.TRAVERSE_RETURN) {
-				processProxyHostChanged();
-			}
-		});
-
-		this.lblProxyPort = new Label(this.grpProxy, SWT.NONE);
-		this.lblProxyPort.setBounds(0, 0, 57, 15);
-		SWTUtils.setFontHeight(lblProxyPort, Constants.TEXT_SIZE_NORMAL);
-
-		Composite compProxyPortContainer = new Composite(this.grpProxy, SWT.NONE);
-		compProxyPortContainer.setLayout(new FormLayout());
-		compProxyPortContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
-
-		this.txtProxyPort = new Text(compProxyPortContainer, SWT.BORDER);
-		SWTUtils.anchor(txtProxyPort).top(0,0).left(0,5).right(100,-42);
-		SWTUtils.setFontHeight(txtProxyPort, Constants.TEXT_SIZE_NORMAL);
-
-		this.txtProxyPort.addTraverseListener(e -> {
-			if (e.detail == SWT.TRAVERSE_RETURN) {
-				processProxyPortChanged();
-			}
-		});
-
-		this.txtProxyPortErrorMarker = new ErrorMarker(compProxyPortContainer, SWT.NONE, "");
-		SWTUtils.anchor(txtProxyPortErrorMarker).left(100,-32).right(100).top(0).bottom(0,32);
-		this.txtProxyPortErrorMarker.setVisible(false);
-
-		this.txtProxyPort.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusLost(FocusEvent e) {
-				processProxyPortChanged();
-			}
-		});
-
-		reloadResources();
-	}
-
-	private void performPostFixChanged(@Nonnull String postfix) {
-
-		log.debug("Save file postfix changed to : {}", postfix);
-		this.configurationContainer.saveFilePostFix = postfix;
-		AdvancedConfigurationComposite.this.txtSaveFilePostFix.setText(postfix);
-	}
-
-	void performOutputFolderChanged(String foldername) {
-		log.debug("Selected Output folder: {}", foldername);
-		this.configurationContainer.outputFolder = foldername;
-		AdvancedConfigurationComposite.this.txtOutputFolder.setText(foldername);
-	}
-
-	int getBKUElementIndex(BKUs bku) {
-		String lookup = "BKU." + bku.toString();
-		String bkuName = Messages.getString(lookup);
-
-		int i = this.bkuStrings.indexOf(bkuName);
-		if (i == -1) {
-			log.warn("NO BKU match for {}", bkuName);
-			return 0;
-		}
-		return i;
-	}
-
-	void performBKUSelectionChanged(@Nonnull BKUs selected) {
-		log.debug("Selected BKU: {}", selected);
-		this.configurationContainer.defaultBKU = selected;
-		this.cmbBKUAuswahl.select(this.getBKUElementIndex(selected));
-	}
-
-	void performBKUSelectionChanged(String selected) {
-		try {
-			BKUs bkuvalue = resolveBKU(selected);
-			this.performBKUSelectionChanged(bkuvalue);
-		} catch (Exception ex) {
-			log.error("Failed to parse BKU value: {} {}", selected, ex);
-			ErrorDialog dialog = new ErrorDialog(getShell(), Messages.getString("error.InvalidBKU"), BUTTONS.OK);
-			dialog.open();
-		}
-	}
-
-	@Nonnull BKUs resolveBKU(String localizedBKU) {
-		int blen = BKUs.values().length;
-
-		for (int i = 0; i < blen; i++) {
-			String lookup = "BKU." + BKUs.values()[i].toString();
-			if (Messages.getString(lookup).equals(localizedBKU)) {
-				return Constants.ISNOTNULL(BKUs.values()[i]);
-			}
-		}
-
-		return BKUs.NONE;
-	}
-
-	int getLocaleElementIndex(Locale locale) {
-		for (int i = 0; i < Constants.SUPPORTED_LOCALES.length; i++) {
-			if (Constants.SUPPORTED_LOCALES[i].equals(locale)) {
-				log.debug("Locale: {} IDX: {}", locale, i);
-				return i;
-			}
-		}
-
-		log.warn("NO Locale match for {}", locale);
-		return 0;
-	}
-
-	void performLocaleSelectionChanged(Locale selected) {
-		log.debug("Selected Locale: {}", selected);
-		this.configurationContainer.interfaceLocale = selected;
-		this.cmbLocaleAuswahl.select(this.getLocaleElementIndex(selected));
-	}
-
-	void performPositionSelection(boolean automatic) {
-		log.debug("Selected Position: {}", automatic);
-		this.configurationContainer.autoPositionSignature = automatic;
-		this.btnAutomatischePositionierung.setSelection(automatic);
-	}
-
-	void performUseMarkerSelection(boolean useMarker) {
-		this.configurationContainer.setUseMarker(useMarker);
-		this.btnPlatzhalterVerwenden.setSelection(useMarker);
-	}
-
-	void performUseSignatureFieldsSelection(boolean useFields) {
-		this.configurationContainer.setUseSignatureFields(useFields);
-		this.btnSignatureFieldsUsage.setSelection(useFields);
-	}
-
-	void performEnableUsePlaceholder(boolean enable) {
-		this.btnPlatzhalterVerwenden.setEnabled(enable);
-		this.btnSignatureFieldsUsage.setEnabled(enable);
-		this.configurationContainer.enabledPlaceholderUsage = enable;
-		this.btnEnablePlaceholderUsage.setSelection(enable);
-	}
-
-	void performPdfACompatSelection(boolean compat) {
-		this.configurationContainer.signaturePDFACompat = compat;
-		this.btnPdfACompat.setSelection(compat);
-	}
-
-	void performKeystoreEnabledSelection(boolean enabled) {
-		this.configurationContainer.keystoreEnabled = enabled;
-		this.btnKeystoreEnabled.setSelection(enabled);
-		this.configurationComposite.keystoreEnabled(enabled);
-
-		int ksIndex = getBKUElementIndex(BKUs.KS);
-		String ksText = this.bkuStrings.get(ksIndex);
-		if (enabled) {
-			if (!this.cmbBKUAuswahl.getItem(ksIndex).equals(ksText))
-				this.cmbBKUAuswahl.add(ksText, ksIndex);
-		} else {
-			int i = this.cmbBKUAuswahl.indexOf(ksText);
-			if (i != -1) {
-				if (this.cmbBKUAuswahl.getSelectionIndex() == i)
-					performBKUSelectionChanged(BKUs.NONE);
-				this.cmbBKUAuswahl.remove(i);
-			}
-		}
-	}
-
-	void processProxyHostChanged() {
-		try {
-			this.proxyHostErrorMarker.setVisible(false);
-			plainProxyHostSetter();
-		} catch (Exception ex) {
-			this.proxyHostErrorMarker.setVisible(true);
-			this.proxyHostErrorMarker.setToolTipText(ex.getMessage());
-			log.error("processProxyHost: ", ex);
-		}
-	}
-
-	/**
-	 *
-	 */
-	private void plainProxyHostSetter() {
-		String host = this.txtProxyHost.getText();
-		this.configurationContainer.proxyHost = host;
-	}
-
-	void processProxyPortChanged() {
-		try {
-			this.txtProxyPortErrorMarker.setVisible(false);
-			plainProxyPortSetter();
-		} catch (Exception ex) {
-			this.txtProxyPortErrorMarker.setVisible(true);
-			this.txtProxyPortErrorMarker.setToolTipText(ex.getMessage());
-			log.error("processProxyPort: ", ex);
-		}
-	}
-
-	/**
-	 * @throws InvalidPortException
-	 */
-	private void plainProxyPortSetter() throws InvalidPortException {
-		String portString = this.txtProxyPort.getText();
-		int port = -1;
-		if (portString == null || portString.trim().isEmpty()) {
-			port = -1;
-		} else {
-			try {
-				port = Integer.parseInt(portString);
-			} catch (NumberFormatException e) {
-				throw new InvalidPortException(portString, e);
-			}
-		}
-		this.configurationContainer.setProxyPort(port);
-	}
-
-	@Override
-	public void initConfiguration(ConfigurationManager provider) {
-		this.configurationContainer.autoPositionSignature = provider.getAutoPositionSignaturePersistent();
-		this.configurationContainer.setUseMarker(provider.getUseMarker());
-		this.configurationContainer.setUseSignatureFields(provider.getUseSignatureFields());
-		this.configurationContainer.enabledPlaceholderUsage = provider.getEnablePlaceholderUsage();
-		this.configurationContainer.signaturePDFACompat = provider.getSignaturePdfACompat();
-
-		this.configurationContainer.defaultBKU = provider.getDefaultBKUPersistent();
-		this.configurationContainer.keystoreEnabled = provider.getKeyStoreEnabledPersistent();
-
-		this.configurationContainer.outputFolder = provider.getDefaultOutputFolderPersistent();
-		this.configurationContainer.saveFilePostFix = provider.getSaveFilePostFix();
-
-		this.configurationContainer.interfaceLocale = provider.getInterfaceLocale();
-
-		this.configurationContainer.proxyHost = provider.getProxyHostPersistent();
-		try {
-			this.configurationContainer.setProxyPort(provider.getProxyPortPersistent());
-		} catch (InvalidPortException e) {
-			log.error("Failed to set proxy port!", e);
-		}
-		this.configurationContainer.proxyUser = provider.getProxyUserPersistent();
-		this.configurationContainer.proxyPass = provider.getProxyPassPersistent();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.composites.BaseConfigurationComposite#loadConfiguration()
-	 */
-	@Override
-	public void loadConfiguration() {
-		// load advanced settings
-		performBKUSelectionChanged(this.configurationContainer.defaultBKU);
-		String outputFolder = this.configurationContainer.outputFolder;
-		if (outputFolder != null) {
-			performOutputFolderChanged(outputFolder);
-		}
-		performPostFixChanged(this.configurationContainer.saveFilePostFix);
-		performPositionSelection(this.configurationContainer.autoPositionSignature);
-		performUseMarkerSelection(this.configurationContainer.getUseMarker());
-		performUseSignatureFieldsSelection(this.configurationContainer.getUseSignatureFields());
-		performEnableUsePlaceholder(this.configurationContainer.enabledPlaceholderUsage);
-		performLocaleSelectionChanged(this.configurationContainer.interfaceLocale);
-		performPdfACompatSelection(this.configurationContainer.signaturePDFACompat);
-		performKeystoreEnabledSelection(this.configurationContainer.keystoreEnabled);
-
-		int port = this.configurationContainer.getProxyPort();
-		if (port > 0) {
-			this.txtProxyPort.setText(Integer.toString(port));
-		}
-
-		String host = this.configurationContainer.proxyHost;
-		if (host != null) {
-			this.txtProxyHost.setText(host);
-		}
-
-	}
-
-	@Override
-	public void storeConfiguration(ConfigurationManager store) {
-		store.setAutoPositionSignaturePersistent(this.configurationContainer.autoPositionSignature);
-		store.setUseMarkerPersistent(this.configurationContainer.getUseMarker());
-		store.setUseSignatureFieldsPersistent(this.configurationContainer.getUseSignatureFields());
-		store.setEnablePlaceholderUsagePersistent(this.configurationContainer.enabledPlaceholderUsage);
-		store.setSignaturePdfACompatPersistent(this.configurationContainer.signaturePDFACompat);
-
-		store.setDefaultBKUPersistent(this.configurationContainer.defaultBKU);
-		store.setKeyStoreEnabledPersistent(this.configurationContainer.keystoreEnabled);
-
-		store.setDefaultOutputFolderPersistent(this.configurationContainer.outputFolder);
-		store.setSaveFilePostFixPersistent(this.configurationContainer.saveFilePostFix);
-		store.setInterfaceLocalePersistent(this.configurationContainer.interfaceLocale);
-
-		String hostOld = store.getProxyHostPersistent();
-		String hostNew = this.configurationContainer.proxyHost;
-		if (hostOld != null && !hostOld.isEmpty() && (hostNew == null || hostNew.isEmpty())) {
-			// Proxy has been removed, let's clear the system properties
-			// Otherwise, the proxy settings wouldn't get removed
-			System.clearProperty("http.proxyHost");
-			System.clearProperty("https.proxyHost");
-		}
-		store.setProxyHostPersistent(hostNew);
-
-		int portOld = store.getProxyPortPersistent();
-		int portNew = this.configurationContainer.getProxyPort();
-		if (portOld != -1 && portNew == -1) {
-			// cf. above
-			System.clearProperty("http.proxyPort");
-			System.clearProperty("https.proxyPort");
-		}
-		store.setProxyPortPersistent(portNew);
-
-		String userOld = store.getProxyUserPersistent();
-		String userNew = this.configurationContainer.proxyUser;
-		if (userOld != null && !userOld.isEmpty() && (userNew == null || userNew.isEmpty())) {
-			// cf. above
-			System.clearProperty("http.proxyUser");
-			System.clearProperty("https.proxyUser");
-		}
-		store.setProxyUserPersistent(userNew);
-
-		String passOld = store.getProxyPassPersistent();
-		String passNew = this.configurationContainer.proxyPass;
-		if (passOld != null && passNew == null) {
-			// cf. above
-			System.clearProperty("http.proxyPassword");
-			System.clearProperty("https.proxyPassword");
-		}
-		store.setProxyPassPersistent(passNew);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.composites.BaseConfigurationComposite#validateSettings()
-	 */
-	@Override
-	public void validateSettings(int resumeIndex) throws Exception {
-
-		String foldername = this.configurationContainer.outputFolder;
-
-		switch (resumeIndex) {
-		case 0:
-			if (foldername != null && !foldername.isEmpty()) {
-				File outputFolder = new File(foldername);
-				if (!outputFolder.exists()) {
-					throw new OutputfolderDoesntExistException(outputFolder, 1);
-				}
-				if (!outputFolder.isDirectory()) {
-					throw new OutputfolderNotADirectoryException(outputFolder);
-				}
-			}
-			// Fall through
-		case 1:
-			this.plainProxyHostSetter();
-			// Fall through
-		case 2:
-			this.plainProxyPortSetter();
-			// Fall through
-			// case 3:
-			// this.plainProxyUserSetter();
-			// // Fall through
-			// case 4:
-			// this.plainProxyPassSetter();
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(grpSignatur, "advanced_config.Signature_Title");
-		SWTUtils.setLocalizedText(btnAutomatischePositionierung, "advanced_config.AutoPosition");
-		SWTUtils.setLocalizedToolTipText(btnAutomatischePositionierung, "advanced_config.AutoPosition_ToolTip");
-		SWTUtils.setLocalizedText(grpPlaceholder, "advanced_config.Placeholder_Title");
-		SWTUtils.setLocalizedText(btnPlatzhalterVerwenden, "advanced_config.UseMarker");
-		SWTUtils.setLocalizedToolTipText(btnPlatzhalterVerwenden, "advanced_config.UseMarker_ToolTip");
-		SWTUtils.setLocalizedText(btnSignatureFieldsUsage, "advanced_config.UseSignatureFields");
-		SWTUtils.setLocalizedToolTipText(btnSignatureFieldsUsage, "advanced_config.UseSignatureFields_ToolTip");
-		SWTUtils.setLocalizedText(btnEnablePlaceholderUsage, "advanced_config.Placeholder_Enabled");
-		SWTUtils.setLocalizedText(btnPdfACompat, "advanced_config.PdfACompat");
-		SWTUtils.setLocalizedToolTipText(btnPdfACompat, "advanced_config.PdfACompat_ToolTip");
-
-		SWTUtils.setLocalizedText(grpBkuAuswahl, "advanced_config.BKUSelection_Title");
-		SWTUtils.setLocalizedToolTipText(cmbBKUAuswahl, "advanced_config.BKUSelection_ToolTip");
-		SWTUtils.setLocalizedText(btnKeystoreEnabled, "advanced_config.KeystoreEnabled");
-		SWTUtils.setLocalizedToolTipText(btnKeystoreEnabled, "advanced_config.KeystoreEnabled_ToolTip");
-
-		SWTUtils.setLocalizedText(grpSpeicherort, "advanced_config.OutputFolder_Title");
-		SWTUtils.setLocalizedText(lblDefaultOutputFolder, "advanced_config.OutputFolder");
-		SWTUtils.setLocalizedToolTipText(txtOutputFolder, "advanced_config.OutputFolder_ToolTip");
-		SWTUtils.setLocalizedText(btnBrowse, "common.browse");
-
-		SWTUtils.setLocalizedText(grpLocaleAuswahl, "advanced_config.LocaleSelection_Title");
-		SWTUtils.setLocalizedToolTipText(cmbLocaleAuswahl, "advanced_config.LocaleSelection_ToolTip");
-
-		SWTUtils.setLocalizedText(grpProxy, "advanced_config.Proxy_Title");
-		SWTUtils.setLocalizedText(lblProxyHost, "advanced_config.ProxyHost");
-		SWTUtils.setLocalizedToolTipText(txtProxyHost, "advanced_config.ProxyHost_ToolTip");
-		this.txtProxyHost.setMessage(Messages.getString("advanced_config.ProxyHost_Template"));
-		SWTUtils.setLocalizedText(lblProxyPort, "advanced_config.ProxyPort");
-		SWTUtils.setLocalizedToolTipText(txtProxyPort, "advanced_config.ProxyPort_ToolTip");
-		this.txtProxyPort.setMessage(Messages.getString("advanced_config.ProxyPort_Template"));
-		// StateComposite.setLocalizedText(lblProxyUser, "advanced_config.ProxyUser");
-
-		// this.txtProxyUser.setToolTipText(Messages
-		// .getString("advanced_config.ProxyUser_ToolTip"));
-		// this.txtProxyUser.setMessage(Messages
-		// .getString("advanced_config.ProxyUser_Template"));
-		// StateComposite.setLocalizedText(lblProxyPass, "advanced_config.ProxyPass");
-
-		// this.txtProxyPass.setToolTipText(Messages
-		// .getString("advanced_config.ProxyPass_ToolTip"));
-		// this.txtProxyPass.setMessage(Messages
-		// .getString("advanced_config.ProxyPass_Template"));
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/ConfigurationCompositeBase.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/ConfigurationCompositeBase.java
deleted file mode 100644
index 54207292..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/ConfigurationCompositeBase.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites.configuration;
-
-
-import org.eclipse.swt.widgets.Composite;
-
-import at.asit.pdfover.gui.composites.StateComposite;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.gui.workflow.config.ConfigurationDataInMemory;
-import at.asit.pdfover.gui.workflow.states.State;
-
-/**
- * Base class for configuration composites
- */
-public abstract class ConfigurationCompositeBase extends StateComposite {
-
-	/**
-	 * the configuration container
-	 */
-	protected ConfigurationDataInMemory configurationContainer;
-
-	/**
-	 * @param parent
-	 * @param style
-	 * @param state
-	 * @param configuration
-	 */
-	public ConfigurationCompositeBase(Composite parent, int style, State state, ConfigurationDataInMemory configuration) {
-		super(parent, style, state);
-		this.configurationContainer = configuration;
-	}
-
-	/**
-	 * Initialize ConfigurationContainer from ConfigProviderImpl
-	 * @param provider the ConfigProviderImpl to load config from
-	 */
-	public abstract void initConfiguration(ConfigurationManager provider);
-
-	/**
-	 * Load configuration from ConfigurationContainer
-	 */
-	public abstract void loadConfiguration();
-
-	/**
-	 * Store configuration from ConfigurationContainer to ConfigProvider
-	 * @param store the ConfigProviderImpl to store config to
-	 */
-	public abstract void storeConfiguration(ConfigurationManager store);
-
-	/**
-	 * Called before exit.
-	 * The method validates every setting in the configuration before exit
-	 *
-	 * There might be settings when the user can decide to ignore a validation exception
-	 * (for example the Outputfolder validation)
-	 * In this case, the validator throws a ResumableException, which includes the
-	 * validator index to resume from (should the user choose to ignore the error)
-	 *
-	 * @param resumeFrom Resume from this validator index (initially 0)
-	 * @throws Exception
-	 */
-	public abstract void validateSettings(int resumeFrom) throws Exception;
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/Fido2ConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/Fido2ConfigurationComposite.java
deleted file mode 100644
index 9b2d3ef1..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/Fido2ConfigurationComposite.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package at.asit.pdfover.gui.composites.configuration;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Link;
-
-import com.sun.jna.Platform;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.config.ConfigurationDataInMemory;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.gui.workflow.states.State;
-import at.asit.webauthn.WebAuthN;
-
-public class Fido2ConfigurationComposite extends ConfigurationCompositeBase {
-
-    private Link lnkInfoText;
-    private Link unsupportedText;
-
-    private Group grpFidoSettings;
-    private Button btnFido2ByDefault;
-
-    public Fido2ConfigurationComposite(Composite parent, int style, State state, ConfigurationDataInMemory container) {
-        super(parent, style, state, container);
-        setLayout(new FormLayout());
-
-        this.lnkInfoText = new Link(this, SWT.WRAP);
-        SWTUtils.anchor(lnkInfoText).top(0,5).left(0,5).right(100,-5);
-        SWTUtils.setFontHeight(lnkInfoText, Constants.TEXT_SIZE_NORMAL);
-        SWTUtils.addSelectionListener(lnkInfoText, () -> { SWTUtils.openURL(Messages.getString("config.fido2.InfoURL")); });
-
-        this.unsupportedText = new Link(this, SWT.WRAP);
-        SWTUtils.anchor(unsupportedText).top(lnkInfoText,5).left(0,5).right(100,-5);
-        SWTUtils.setFontHeight(unsupportedText, Constants.TEXT_SIZE_NORMAL);
-        SWTUtils.addSelectionListener(unsupportedText, () -> { SWTUtils.openURL("https://developers.yubico.com/libfido2/#_installation"); });
-
-        FormLayout STANDARD_LAYOUT = new FormLayout();
-		STANDARD_LAYOUT.marginHeight = 10;
-		STANDARD_LAYOUT.marginWidth = 5;
-
-        this.grpFidoSettings = new Group(this, SWT.NONE);
-        this.grpFidoSettings.setLayout(STANDARD_LAYOUT);
-        SWTUtils.anchor(grpFidoSettings).top(lnkInfoText,10).left(0,5).right(100,-5);
-        SWTUtils.setFontHeight(grpFidoSettings, Constants.TEXT_SIZE_NORMAL);
-
-        this.btnFido2ByDefault = new Button(this.grpFidoSettings, SWT.CHECK);
-        SWTUtils.anchor(btnFido2ByDefault).top(0).left(0,5).right(100,-5);
-        SWTUtils.setFontHeight(btnFido2ByDefault, Constants.TEXT_SIZE_BUTTON);
-        SWTUtils.addSelectionListener(btnFido2ByDefault, () -> { this.configurationContainer.fido2ByDefault = btnFido2ByDefault.getSelection(); });
-
-        if (WebAuthN.isAvailable())
-            this.unsupportedText.setVisible(false);
-        else
-            this.grpFidoSettings.setVisible(false);
-
-        reloadResources();
-    }
-
-    @Override
-	public void reloadResources() {
-        SWTUtils.setLocalizedText(lnkInfoText, "config.fido2.AboutFIDO");
-        SWTUtils.setLocalizedText(grpFidoSettings, "config.fido2.Group");
-        SWTUtils.setLocalizedText(btnFido2ByDefault, "config.fido2.ByDefault");
-        
-        if (Platform.isLinux() || Platform.isMac())
-            SWTUtils.setLocalizedText(unsupportedText, "config.fido2.UnsupportedTryLibFido2");
-        else {
-            SWTUtils.setFontStyle(unsupportedText, SWT.BOLD);
-            SWTUtils.setLocalizedText(unsupportedText, "config.fido2.UnsupportedPlatform");
-        }
-    }
-
-    @Override
-	public void initConfiguration(ConfigurationManager provider) {
-        this.configurationContainer.fido2ByDefault = provider.getFido2ByDefault();
-    }
-
-    @Override
-	public void loadConfiguration() {
-        btnFido2ByDefault.setSelection(this.configurationContainer.fido2ByDefault);
-    }
-
-    @Override
-	public void storeConfiguration(ConfigurationManager store) {
-        store.setFido2ByDefaultPersistent(this.configurationContainer.fido2ByDefault);
-    }
-
-    @Override
-	public void validateSettings(int resumeIndex) throws Exception {}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/KeystoreConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/KeystoreConfigurationComposite.java
deleted file mode 100644
index a477422e..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/KeystoreConfigurationComposite.java
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites.configuration;
-
-// Imports
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Vector;
-
-import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.apache.commons.lang3.tuple.Pair;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.gui.controls.PasswordInputDialog;
-import at.asit.pdfover.gui.exceptions.CantLoadKeystoreException;
-import at.asit.pdfover.gui.exceptions.KeystoreAliasDoesntExistException;
-import at.asit.pdfover.gui.exceptions.KeystoreAliasNoKeyException;
-import at.asit.pdfover.gui.exceptions.KeystoreDoesntExistException;
-import at.asit.pdfover.gui.exceptions.KeystoreKeyPasswordException;
-import at.asit.pdfover.gui.keystore.KeystoreUtils;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.gui.workflow.config.ConfigurationDataInMemory.KeyStorePassStorageType;
-import at.asit.pdfover.gui.workflow.config.ConfigurationDataInMemory;
-import at.asit.pdfover.gui.workflow.states.State;
-
-/**
- *
- */
-public class KeystoreConfigurationComposite extends ConfigurationCompositeBase {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(KeystoreConfigurationComposite.class);
-
-	private Group grpKeystore;
-	private Label lblKeystoreFile;
-	Text txtKeystoreFile;
-	private Button btnBrowse;
-	private Label lblKeystoreType;
-	Combo cmbKeystoreType;
-	private Button btnLoad;
-	private Label lblKeystoreAlias;
-	Combo cmbKeystoreAlias;
-	private Label lblKeystorePassStoreType;
-	Combo cmbKeystorePassStoreType;
-	private Label lblKeystoreStorePass;
-	Text txtKeystoreStorePass;
-	private Label lblKeystoreKeyPass;
-	Text txtKeystoreKeyPass;
-
-	private KeyStore ks;
-
-	/**
-	 * @param parent
-	 * @param style
-	 * @param state
-	 * @param container
-	 */
-	public KeystoreConfigurationComposite(
-			org.eclipse.swt.widgets.Composite parent, int style, State state,
-			ConfigurationDataInMemory container) {
-		super(parent, style, state, container);
-		setLayout(new FormLayout());
-
-		this.grpKeystore = new Group(this, SWT.NONE | SWT.RESIZE);
-		FormLayout layout = new FormLayout();
-		layout.marginHeight = 10;
-		layout.marginWidth = 5;
-		this.grpKeystore.setLayout(layout);
-
-		SWTUtils.anchor(grpKeystore).top(0,5).left(0,5).right(100,-5);
-		SWTUtils.setFontHeight(this.grpKeystore, Constants.TEXT_SIZE_NORMAL);
-
-		this.lblKeystoreFile = new Label(this.grpKeystore, SWT.NONE);
-		SWTUtils.anchor(lblKeystoreFile).top(0).left(0,5);
-		FormData fd_lblKeystoreFile = new FormData();
-		fd_lblKeystoreFile.top = new FormAttachment(0);
-		fd_lblKeystoreFile.left = new FormAttachment(0, 5);
-		this.lblKeystoreFile.setLayoutData(fd_lblKeystoreFile);
-		SWTUtils.setFontHeight(lblKeystoreFile, Constants.TEXT_SIZE_NORMAL);
-
-		this.txtKeystoreFile = new Text(grpKeystore, SWT.BORDER);
-		this.btnBrowse = new Button(grpKeystore, SWT.NONE);
-		SWTUtils.setFontHeight(txtKeystoreFile, Constants.TEXT_SIZE_NORMAL);
-		SWTUtils.setFontHeight(btnBrowse, Constants.TEXT_SIZE_BUTTON);
-		SWTUtils.anchor(txtKeystoreFile).top(lblKeystoreFile, 5).left(0,15).right(btnBrowse,-5);
-		SWTUtils.anchor(btnBrowse).top(lblKeystoreFile, 5).right(100,-5);
-
-		this.lblKeystoreType = new Label(grpKeystore, SWT.NONE);
-		SWTUtils.anchor(lblKeystoreType).top(txtKeystoreFile, 5).left(0,5);
-		SWTUtils.setFontHeight(lblKeystoreType, Constants.TEXT_SIZE_NORMAL);
-
-		this.btnLoad = new Button(this.grpKeystore, SWT.NONE);
-		SWTUtils.anchor(btnLoad).top(lblKeystoreType, 5).right(100,-5);
-		SWTUtils.setFontHeight(btnLoad, Constants.TEXT_SIZE_BUTTON);
-
-		this.cmbKeystoreType = new Combo(grpKeystore, SWT.READ_ONLY);
-		SWTUtils.anchor(cmbKeystoreType).top(lblKeystoreType, 5).left(0,15).right(btnLoad, -5);
-		SWTUtils.setFontHeight(cmbKeystoreType, Constants.TEXT_SIZE_NORMAL);
-		SWTUtils.scrollPassthrough(cmbKeystoreType);
-
-		this.lblKeystoreAlias = new Label(grpKeystore, SWT.NONE);
-		SWTUtils.anchor(lblKeystoreAlias).top(cmbKeystoreType, 5).left(0, 5);
-		SWTUtils.setFontHeight(lblKeystoreAlias, Constants.TEXT_SIZE_NORMAL);
-
-		this.cmbKeystoreAlias = new Combo(grpKeystore, SWT.NONE);
-		SWTUtils.anchor(cmbKeystoreAlias).top(lblKeystoreAlias, 5).left(0,15).right(100,-5);
-		SWTUtils.setFontHeight(cmbKeystoreAlias, Constants.TEXT_SIZE_NORMAL);
-		SWTUtils.scrollPassthrough(cmbKeystoreAlias);
-
-		this.lblKeystorePassStoreType = new Label(this.grpKeystore, SWT.NONE);
-		SWTUtils.anchor(lblKeystorePassStoreType).top(cmbKeystoreAlias, 5).left(0,5);
-		SWTUtils.setFontHeight(lblKeystorePassStoreType, Constants.TEXT_SIZE_NORMAL);
-
-		this.cmbKeystorePassStoreType = new Combo(grpKeystore, SWT.READ_ONLY);
-		SWTUtils.anchor(cmbKeystorePassStoreType).top(lblKeystorePassStoreType, 5).left(0,15).right(100,-5);
-		SWTUtils.setFontHeight(cmbKeystorePassStoreType, Constants.TEXT_SIZE_NORMAL);
-		SWTUtils.scrollPassthrough(cmbKeystorePassStoreType);
-
-		this.lblKeystoreStorePass = new Label(grpKeystore, SWT.NONE);
-		SWTUtils.anchor(lblKeystoreStorePass).top(cmbKeystorePassStoreType, 5).left(0,5);
-		SWTUtils.setFontHeight(lblKeystoreStorePass, Constants.TEXT_SIZE_NORMAL);
-
-		this.txtKeystoreStorePass = new Text(grpKeystore, SWT.BORDER | SWT.PASSWORD);
-		SWTUtils.anchor(txtKeystoreStorePass).right(100, -5).top(lblKeystoreStorePass, 5).left(0,15);
-		SWTUtils.setFontHeight(txtKeystoreStorePass, Constants.TEXT_SIZE_NORMAL);
-
-		this.lblKeystoreKeyPass = new Label(grpKeystore, SWT.NONE);
-		SWTUtils.anchor(lblKeystoreKeyPass).top(txtKeystoreStorePass, 5).left(0,5);
-		SWTUtils.setFontHeight(lblKeystoreKeyPass, Constants.TEXT_SIZE_NORMAL);
-
-		this.txtKeystoreKeyPass = new Text(grpKeystore, SWT.BORDER | SWT.PASSWORD);
-		SWTUtils.anchor(txtKeystoreKeyPass).top(lblKeystoreKeyPass, 5).left(0,15).right(100,-5);
-		SWTUtils.setFontHeight(txtKeystoreKeyPass, Constants.TEXT_SIZE_NORMAL);
-
-		this.txtKeystoreFile.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusLost(FocusEvent e) {
-				performKeystoreFileChanged(KeystoreConfigurationComposite.this.txtKeystoreFile.getText());
-			}
-		});
-
-		this.btnBrowse.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				FileDialog dialog = new FileDialog(
-						KeystoreConfigurationComposite.this.getShell(), SWT.OPEN);
-				dialog.setFilterExtensions(new String[] {
-						"*.p12;*.pkcs12;*.pfx;*.ks;*.jks", "*.p12;*.pkcs12;*.pfx;", "*.ks;*.jks*.", "*" });
-				dialog.setFilterNames(new String[] {
-						Messages.getString("common.KeystoreExtension_Description"),
-						Messages.getString("common.PKCS12Extension_Description"),
-						Messages.getString("common.KSExtension_Description"),
-						Messages.getString("common.AllExtension_Description") });
-				String fileName = dialog.open();
-				File file = null;
-				if (fileName != null) {
-					file = new File(fileName);
-					if (file.exists()) {
-						performKeystoreFileChanged(fileName);
-					}
-				}
-			}
-		});
-
-		this.cmbKeystoreType.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				performKeystoreTypeChanged(
-						KeystoreConfigurationComposite.this.keystoreTypes.get(
-								KeystoreConfigurationComposite.this.cmbKeystoreType.getItem(
-										KeystoreConfigurationComposite.this.cmbKeystoreType.getSelectionIndex())));
-			}
-		});
-
-		this.txtKeystoreStorePass.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusLost(FocusEvent e) {
-				performKeystoreStorePassChanged(KeystoreConfigurationComposite.
-						this.txtKeystoreStorePass.getText());
-			}
-			
-		});
-
-		this.btnLoad.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				File f = new File(KeystoreConfigurationComposite.this
-						.configurationContainer.keystoreFile);
-				try {
-					loadKeystore();
-				} catch (KeyStoreException ex) {
-					log.error("Error loading keystore", ex);
-					showErrorDialog(Messages.getString("error.KeyStore"));
-				} catch (FileNotFoundException ex) {
-					log.error("Error loading keystore", ex);
-					showErrorDialog(Messages.formatString(
-							"error.KeyStoreFileNotExist", f.getName()));
-				} catch (NoSuchAlgorithmException ex) {
-					log.error("Error loading keystore", ex);
-					showErrorDialog(Messages.getString("error.KeyStore"));
-				} catch (CertificateException ex) {
-					log.error("Error loading keystore", ex);
-					showErrorDialog(Messages.getString("error.KeyStore"));
-				} catch (IOException ex) {
-					log.error("Error loading keystore", ex);
-					showErrorDialog(Messages.getString("error.KeyStore"));
-				} catch (NullPointerException ex) {
-					log.error("Error loading keystore - NPE?", ex);
-					showErrorDialog(Messages.getString("error.KeyStore"));
-				} catch (UnrecoverableKeyException ex) {
-					log.warn("Error loading keystore, invalid password", ex);
-					showErrorDialog(Messages.getString("error.KeyStoreStorePass"));
-				}
-			}
-		});
-
-		this.cmbKeystoreAlias.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				performKeystoreAliasChanged(
-						KeystoreConfigurationComposite.this.cmbKeystoreAlias.getItem(
-								KeystoreConfigurationComposite.this.cmbKeystoreAlias.getSelectionIndex()));
-			}
-		});
-		this.cmbKeystoreAlias.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusLost(FocusEvent e) {
-				performKeystoreAliasChanged(KeystoreConfigurationComposite.this.cmbKeystoreAlias.getText());
-			}
-		});
-
-		this.cmbKeystorePassStoreType.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				performKeystorePassStorageTypeChanged(
-					keystorePassStorageTypeOptions.get(
-						KeystoreConfigurationComposite.this.cmbKeystorePassStoreType.getSelectionIndex()
-					).getLeft()
-				);
-			}
-		});
-
-		this.txtKeystoreKeyPass.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusLost(FocusEvent e) {
-				performKeystoreKeyPassChanged(KeystoreConfigurationComposite.this.txtKeystoreKeyPass.getText());
-			}
-		});
-
-		// Load localized strings
-		
-		reloadResources();
-	}
-
-	void showErrorDialog(String error) {
-		ErrorDialog e = new ErrorDialog(getShell(), error, BUTTONS.OK);
-		e.open();
-	}
-
-	void loadKeystore() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException {
-		this.cmbKeystoreAlias.remove(0, this.cmbKeystoreAlias.getItemCount()-1);
-
-		ConfigurationDataInMemory config = this.configurationContainer;
-		this.ks = null;
-		String pass = config.keystoreStorePass;
-
-		while (this.ks == null)
-		{
-			if (pass == null)
-			{
-				pass = new PasswordInputDialog(
-						getShell(),
-						Messages.getString("keystore_config.KeystoreStorePass"),
-						Messages.getString("keystore.KeystoreStorePassEntry")).open();
-				if (pass == null)
-					throw new UnrecoverableKeyException("User cancelled password input");
-			}
-
-			try {
-				this.ks = KeystoreUtils.tryLoadKeystore(new File(config.keystoreFile), config.keystoreType, pass);
-			} catch (UnrecoverableKeyException ex) {
-				new ErrorDialog(getShell(), Messages.getString("error.KeyStoreStorePass"), BUTTONS.OK).open();
-				pass = null;
-			}
-		}
-		config.keystoreStorePass = pass;
-
-		Enumeration<String> aliases = this.ks.aliases();
-		while (aliases.hasMoreElements())
-			this.cmbKeystoreAlias.add(aliases.nextElement());
-	}
-
-	/**
-	 * @param fileName
-	 */
-	protected void performKeystoreFileChanged(String fileName) {
-		log.debug("Selected keystore file: " + fileName);
-		this.configurationContainer.keystoreFile = fileName;
-		KeystoreConfigurationComposite.this.txtKeystoreFile.setText(fileName);
-		int i = fileName.lastIndexOf('.');
-		if (i > 0) {
-			String ext = fileName.substring(i+1);
-			if (
-					ext.equalsIgnoreCase("p12") ||
-					ext.equalsIgnoreCase("pkcs12") ||
-					ext.equalsIgnoreCase("pfx"))
-				performKeystoreTypeChanged("PKCS12");
-			else if (
-					ext.equalsIgnoreCase("ks") ||
-					ext.equalsIgnoreCase("jks"))
-				performKeystoreTypeChanged("JCEKS");
-		}
-	}
-
-	/**
-	 * @param type
-	 */
-	protected void performKeystoreTypeChanged(String type) {
-		log.debug("Selected keystore type: " + type);
-		this.configurationContainer.keystoreType = type;
-		for (int i = 0; i < this.cmbKeystoreType.getItemCount(); ++i) {
-			if (this.keystoreTypes.get(this.cmbKeystoreType.getItem(i)).equals(type)) {
-				this.cmbKeystoreType.select(i);
-				break;
-			}
-		}
-	}
-
-	protected void performKeystorePassStorageTypeChanged(KeyStorePassStorageType p) {
-		this.configurationContainer.keystorePassStorageType = p;
-		for (int i=0; i<keystorePassStorageTypeOptions.size(); ++i)
-		{
-			if (keystorePassStorageTypeOptions.get(i).getLeft() == p)
-			{
-				this.cmbKeystorePassStoreType.select(i);
-				break;
-			}
-		}
-		
-		boolean showPasswordFields = (p == KeyStorePassStorageType.DISK);
-		this.lblKeystoreKeyPass.setVisible(showPasswordFields);
-		this.txtKeystoreKeyPass.setVisible(showPasswordFields);
-		this.lblKeystoreStorePass.setVisible(showPasswordFields);
-		this.txtKeystoreStorePass.setVisible(showPasswordFields);
-		if (showPasswordFields)
-		{ /* get rid of potential nulls */
-			performKeystoreKeyPassChanged(this.txtKeystoreKeyPass.getText());
-			performKeystoreStorePassChanged(this.txtKeystoreStorePass.getText());
-		}
-	}
-
-	/**
-	 * @param storepass
-	 */
-	protected void performKeystoreStorePassChanged(String storepass) {
-		log.debug("Changed keystore store password");
-		this.configurationContainer.keystoreStorePass = storepass;
-		if (storepass == null)
-			this.txtKeystoreStorePass.setText("");
-		else
-			this.txtKeystoreStorePass.setText(storepass);
-	}
-
-	/**
-	 * @param alias
-	 */
-	protected void performKeystoreAliasChanged(String alias) {
-		log.debug("Selected keystore alias: " + alias);
-		this.configurationContainer.keystoreAlias = alias;
-		this.cmbKeystoreAlias.setText(alias);
-	}
-
-	/**
-	 * @param keypass
-	 */
-	protected void performKeystoreKeyPassChanged(String keypass) {
-		log.debug("Changed keystore key password");
-		this.configurationContainer.keystoreKeyPass = keypass;
-		if (keypass == null)
-			this.txtKeystoreKeyPass.setText("");
-		else
-			this.txtKeystoreKeyPass.setText(keypass);
-	}
-
-	@Override
-	public void initConfiguration(ConfigurationManager provider) {
-		ConfigurationDataInMemory config = this.configurationContainer;
-		config.keystoreFile = provider.getKeyStoreFilePersistent();
-		config.keystoreType = provider.getKeyStoreTypePersistent();
-		config.keystoreAlias = provider.getKeyStoreAliasPersistent();
-		config.keystorePassStorageType = provider.getKeyStorePassStorageType();
-		if (config.keystorePassStorageType == KeyStorePassStorageType.DISK) {
-			config.keystoreStorePass = provider.getKeyStoreStorePassPersistent();
-			config.keystoreKeyPass = provider.getKeyStoreKeyPassPersistent();
-		} else if (config.keystorePassStorageType == KeyStorePassStorageType.MEMORY) {
-			config.keystoreStorePass = provider.getKeyStoreStorePass();
-			config.keystoreKeyPass = provider.getKeyStoreKeyPass();
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see at.asit.pdfover.gui.composites.BaseConfigurationComposite#loadConfiguration
-	 * ()
-	 */
-	@Override
-	public void loadConfiguration() {
-		// Initialize form fields from configuration Container
-		ConfigurationDataInMemory config = this.configurationContainer;
-		
-		String ks = config.keystoreFile;
-		performKeystoreFileChanged(ks);
-		performKeystoreTypeChanged(config.keystoreType);
-		performKeystorePassStorageTypeChanged(config.keystorePassStorageType);
-		performKeystoreStorePassChanged(config.keystoreStorePass);
-		try {
-			File ksf = new File(ks);
-			if (ksf.exists() && config.keystoreStorePass != null)
-				loadKeystore();
-		} catch (Exception e) {
-			log.info("Failed to load keystore on init", e);
-		}
-		performKeystoreAliasChanged(config.keystoreAlias);
-		performKeystoreKeyPassChanged(config.keystoreKeyPass);
-	}
-
-	@Override
-	public void storeConfiguration(ConfigurationManager store) {
-		ConfigurationDataInMemory config = this.configurationContainer;
-		store.setKeyStoreFilePersistent(config.keystoreFile);
-		store.setKeyStoreTypePersistent(config.keystoreType);
-		store.setKeyStoreAliasPersistent(config.keystoreAlias);
-		store.setKeyStorePassStorageTypePersistent(config.keystorePassStorageType);
-		if (config.keystorePassStorageType == KeyStorePassStorageType.DISK)
-		{
-			store.setKeyStoreStorePassPersistent(config.keystoreStorePass);
-			store.setKeyStoreKeyPassPersistent(config.keystoreKeyPass);
-		}
-		else if (config.keystorePassStorageType == KeyStorePassStorageType.MEMORY)
-		{
-			store.setKeyStoreStorePassOverlay(config.keystoreStorePass);
-			store.setKeyStoreKeyPassOverlay(config.keystoreKeyPass);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.composites.BaseConfigurationComposite#validateSettings
-	 * ()
-	 */
-	@Override
-	public void validateSettings(int resumeFrom) throws Exception {
-		ConfigurationDataInMemory config = this.configurationContainer;
-		switch (resumeFrom) {
-			case 0:
-				String fname = config.keystoreFile;
-				
-				if (fname.isEmpty())
-					break; //no checks required
-					
-				File f = new File(fname);
-				if (!f.exists() || !f.isFile())
-					throw new KeystoreDoesntExistException(f, 4); //skip next checks
-				// Fall through
-			case 1:
-				try {
-					if (config.keystoreStorePass != null) /* don't cause password prompts, just silently accept if there is no saved password */
-						loadKeystore();
-				} catch (Exception e) {
-					throw new CantLoadKeystoreException(e, 4); //skip next checks
-				}
-				// Fall through
-			case 2:
-			{
-				if (this.ks != null)
-				{
-					String alias = config.keystoreAlias;
-					if (!this.ks.containsAlias(alias))
-						throw new KeystoreAliasDoesntExistException(alias, 4); //skip next check
-					if (!this.ks.isKeyEntry(alias))
-						throw new KeystoreAliasNoKeyException(alias, 4); //skip next check
-				}
-			}
-				// Fall through
-			case 3:
-				try {
-					String alias = config.keystoreAlias;
-					String keypass = config.keystoreKeyPass;
-					if ((this.ks != null) && (keypass != null))
-					{ /* if no keypass is specified, this will happen at signature time */
-						this.ks.getKey(alias, keypass.toCharArray());
-					}
-				} catch (Exception e) {
-					throw new KeystoreKeyPasswordException(4);
-				}
-		}
-	}
-
-	
-	Map<String, String> keystoreTypes;
-	private void reloadKeystoreTypeStrings() {
-		this.keystoreTypes = new HashMap<String, String>();
-		this.keystoreTypes.put(Messages.getString("keystore_config.KeystoreType_PKCS12"), "PKCS12");
-		this.keystoreTypes.put(Messages.getString("keystore_config.KeystoreType_JKS"), "JCEKS");
-	}
-
-	Vector<Pair<KeyStorePassStorageType, String>> keystorePassStorageTypeOptions;
-	private void reloadKeystorePassStorageTypeStrings() {
-		keystorePassStorageTypeOptions = new Vector<Pair<KeyStorePassStorageType, String>>();
-		java.util.function.BiConsumer<KeyStorePassStorageType, String> add = (k,v) -> {
-			keystorePassStorageTypeOptions.add(new ImmutablePair<KeyStorePassStorageType,String>(k,Messages.getString(v)));
-		};
-		add.accept(null, "keystore_config.SaveToWhere.None");
-		add.accept(KeyStorePassStorageType.MEMORY, "keystore_config.SaveToWhere.Memory");
-		add.accept(KeyStorePassStorageType.DISK, "keystore_config.SaveToWhere.Disk");
-
-		int n = keystorePassStorageTypeOptions.size();
-		cmbKeystorePassStoreType.setVisibleItemCount(n);
-		cmbKeystorePassStoreType.setItems();
-		for (int i=0; i<n; ++i)
-			cmbKeystorePassStoreType.add(keystorePassStorageTypeOptions.get(i).getRight());
-	}
-	
-	
-	@Override
-	
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(grpKeystore, "keystore_config.Keystore_Title");
-		SWTUtils.setLocalizedText(lblKeystoreFile, "keystore_config.KeystoreFile");
-		SWTUtils.setLocalizedText(btnBrowse, "common.browse");
-		SWTUtils.setLocalizedToolTipText(txtKeystoreFile, "keystore_config.KeystoreFile_ToolTip");
-		SWTUtils.setLocalizedText(lblKeystoreType, "keystore_config.KeystoreType");
-		reloadKeystoreTypeStrings();
-		SWTUtils.setLocalizedText(lblKeystorePassStoreType, "keystore_config.SaveToWhere.Header");
-		reloadKeystorePassStorageTypeStrings();
-		this.cmbKeystoreType.setItems(this.keystoreTypes.keySet().toArray(new String[0]));
-		SWTUtils.setLocalizedText(lblKeystoreStorePass, "keystore_config.KeystoreStorePass");
-		SWTUtils.setLocalizedToolTipText(txtKeystoreStorePass, "keystore_config.KeystoreStorePass_ToolTip");
-		SWTUtils.setLocalizedText(btnLoad, "keystore_config.Load");
-		SWTUtils.setLocalizedToolTipText(btnLoad, "keystore_config.Load_ToolTip");
-		SWTUtils.setLocalizedText(lblKeystoreAlias, "keystore_config.KeystoreAlias");
-		SWTUtils.setLocalizedText(lblKeystoreKeyPass, "keystore_config.KeystoreKeyPass");
-		SWTUtils.setLocalizedToolTipText(txtKeystoreKeyPass, "keystore_config.KeystoreKeyPass_ToolTip");
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/SimpleConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/SimpleConfigurationComposite.java
deleted file mode 100644
index cf24dca3..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/configuration/SimpleConfigurationComposite.java
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites.configuration;
-
-// Imports
-import java.io.File;
-import java.util.Arrays;
-import java.util.Locale;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DropTarget;
-import org.eclipse.swt.dnd.DropTargetAdapter;
-import org.eclipse.swt.dnd.DropTargetEvent;
-import org.eclipse.swt.dnd.FileTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Canvas;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Scale;
-import org.eclipse.swt.widgets.Text;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.commons.Profile;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.gui.controls.ErrorMarker;
-import at.asit.pdfover.gui.exceptions.InvalidEmblemFile;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.config.ConfigurationDataInMemory;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.gui.workflow.states.State;
-import at.asit.pdfover.signer.Emblem;
-import at.asit.pdfover.signer.pdfas.PdfAs4SignatureParameter;
-import at.asit.pdfover.signer.pdfas.PdfAs4SignaturePlaceholder;
-
-/**
- *
- */
-public class SimpleConfigurationComposite extends ConfigurationCompositeBase {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(SimpleConfigurationComposite.class);
-
-	private Group grpHandySignatur;
-	private Label lblMobileNumber;
-	protected Text txtMobileNumber;
-	protected ErrorMarker txtMobileNumberErrorMarker;
-
-	private Group grpPreview;
-	protected Canvas cSigPreview;
-	protected Button btnClearImage;
-	private Button btnBrowseLogo;
-
-	private Group grpSignatureNote;
-	private Label lblSignatureNote;
-	protected Text txtSignatureNote;
-	private Button btnSignatureNoteDefault;
-
-	protected final Group grpSignatureLang;
-	protected final Combo cmbSignatureLang;
-
-	final Group grpLogoOnlyTargetSize;
-	final Label lblLogoOnlyTargetSizeCurrentValue;
-	/** in millimeters */
-	final Scale sclLogoOnlyTargetSize;
-	private void updateLogoOnlyTargetSizeCurrentValueLabel() {
-		lblLogoOnlyTargetSizeCurrentValue.setText(String.format("%4.1fcm", configurationContainer.logoOnlyTargetSize / 10.0));
-	}
-
-	protected String logoFile = null;
-
-	protected final Group grpSignatureProfile;
-	protected final Combo cmbSignatureProfiles;
-
-
-
-
-	/**
-	 * @param parent
-	 * @param style
-	 * @param state
-	 * @param container
-	 */
-	public SimpleConfigurationComposite(
-			org.eclipse.swt.widgets.Composite parent, int style, State state,
-			ConfigurationDataInMemory container) {
-		super(parent, style, state, container);
-		setLayout(new FormLayout());
-
-		this.grpHandySignatur = new Group(this, SWT.NONE | SWT.RESIZE);
-		SWTUtils.anchor(grpHandySignatur).right(100,-5).left(0,5).top(0,5);
-		grpHandySignatur.setLayout(new GridLayout(2, false));
-		SWTUtils.setFontHeight(grpHandySignatur, Constants.TEXT_SIZE_NORMAL);
-
-		this.lblMobileNumber = new Label(grpHandySignatur, SWT.NONE | SWT.RESIZE);
-		this.lblMobileNumber.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-		SWTUtils.setFontHeight(lblMobileNumber, Constants.TEXT_SIZE_NORMAL);
-
-		Composite compMobileNumerContainer = new Composite(this.grpHandySignatur, SWT.NONE);
-		compMobileNumerContainer.setLayout(new FormLayout());
-		compMobileNumerContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
-
-		this.txtMobileNumber = new Text(compMobileNumerContainer, SWT.BORDER | SWT.RESIZE);
-		SWTUtils.anchor(txtMobileNumber).left(0,5).right(100,-42).top(0);
-		SWTUtils.setFontHeight(txtMobileNumber, Constants.TEXT_SIZE_NORMAL);
-
-		this.txtMobileNumberErrorMarker = new ErrorMarker(compMobileNumerContainer, SWT.NONE, "");
-		this.txtMobileNumberErrorMarker.setVisible(false);
-		SWTUtils.anchor(txtMobileNumberErrorMarker).left(100,-32).right(100).top(0).bottom(0,32);
-
-		this.txtMobileNumber.addTraverseListener(e -> {
-			if (e.detail == SWT.TRAVERSE_RETURN) {
-				processNumberChanged();
-			}
-		});
-
-		this.txtMobileNumber.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusLost(FocusEvent e) {
-				processNumberChanged();
-			}
-		});
-
-		this.grpSignatureProfile = new Group(this, SWT.NONE);
-		SWTUtils.anchor(grpSignatureProfile).right(100,-5).left(0,5).top(grpHandySignatur, 5);
-		this.grpSignatureProfile.setLayout(new FormLayout());
-		SWTUtils.setFontHeight(grpSignatureProfile, Constants.TEXT_SIZE_NORMAL);
-
-		this.cmbSignatureProfiles = new Combo(this.grpSignatureProfile, SWT.READ_ONLY);
-		SWTUtils.anchor(cmbSignatureProfiles).left(0,10).right(100,-10).top(0,10).bottom(100,-10);
-		SWTUtils.setFontHeight(cmbSignatureProfiles, Constants.TEXT_SIZE_NORMAL);
-		SWTUtils.scrollPassthrough(cmbSignatureProfiles);
-		this.cmbSignatureProfiles.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				Profile current = SimpleConfigurationComposite.this.configurationContainer.getSignatureProfile();
-				int index = SimpleConfigurationComposite.this.cmbSignatureProfiles.getSelectionIndex();
-				Profile selected = Profile.values()[index];
-				if (!current.equals(selected)) {
-					performProfileSelectionChanged(selected);
-				}
-			}
-		});
-
-		this.grpSignatureLang = new Group(this, SWT.NONE);
-		SWTUtils.anchor(grpSignatureLang).right(100,-5).top(grpSignatureProfile, 5).left(0,5);
-		this.grpSignatureLang.setLayout(new FormLayout());
-		SWTUtils.setFontHeight(grpSignatureLang, Constants.TEXT_SIZE_NORMAL);
-
-		this.cmbSignatureLang = new Combo(this.grpSignatureLang, SWT.READ_ONLY);
-		SWTUtils.anchor(cmbSignatureLang).left(0,10).right(100,-10).top(0,10).bottom(100,-10);
-		SWTUtils.setFontHeight(cmbSignatureLang, Constants.TEXT_SIZE_NORMAL);
-		SWTUtils.scrollPassthrough(cmbSignatureLang);
-		this.cmbSignatureLang.setItems(Arrays.stream(Constants.SUPPORTED_LOCALES).map(l -> l.getDisplayLanguage()).toArray(String[]::new));
-
-		this.cmbSignatureLang.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				Locale currentLocale = SimpleConfigurationComposite.this.configurationContainer.signatureLocale;
-				Locale selectedLocale = Constants.SUPPORTED_LOCALES[SimpleConfigurationComposite.this.cmbSignatureLang.getSelectionIndex()];
-				if (!currentLocale.equals(selectedLocale)) {
-					performSignatureLangSelectionChanged(selectedLocale, currentLocale);
-				}
-			}
-		});
-
-		this.grpSignatureNote = new Group(this, SWT.NONE);
-		SWTUtils.anchor(grpSignatureNote).right(100,-5).top(grpSignatureLang,5).left(0,5);
-		this.grpSignatureNote.setLayout(new GridLayout(2, false));
-		SWTUtils.setFontHeight(grpSignatureNote, Constants.TEXT_SIZE_NORMAL);
-
-		this.lblSignatureNote = new Label(this.grpSignatureNote, SWT.NONE);
-		do { /* grid positioning */
-			GridData gd_lblSignatureNote = new GridData(SWT.LEFT, SWT.CENTER,
-					false, false, 1, 1);
-			gd_lblSignatureNote.widthHint = 66;
-			this.lblSignatureNote.setLayoutData(gd_lblSignatureNote);
-			this.lblSignatureNote.setBounds(0, 0, 57, 15);
-		} while (false);
-		SWTUtils.setFontHeight(lblSignatureNote, Constants.TEXT_SIZE_NORMAL);
-
-		Composite compSignatureNoteContainer = new Composite(this.grpSignatureNote, SWT.NONE);
-		compSignatureNoteContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
-		compSignatureNoteContainer.setLayout(new FormLayout());
-
-		this.txtSignatureNote = new Text(compSignatureNoteContainer, SWT.BORDER);
-		SWTUtils.anchor(txtSignatureNote).top(0,0).left(0,5).right(100,-42);
-		SWTUtils.setFontHeight(txtSignatureNote, Constants.TEXT_SIZE_NORMAL);
-
-		this.txtSignatureNote.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusLost(FocusEvent e) {
-				processSignatureNoteChanged();
-			}
-		});
-
-		this.txtSignatureNote.addTraverseListener(e -> {
-			if (e.detail == SWT.TRAVERSE_RETURN) {
-				processSignatureNoteChanged();
-			}
-		});
-
-		Composite compSignatureNoteButtonContainer = new Composite(this.grpSignatureNote, SWT.NONE);
-		compSignatureNoteButtonContainer.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 2, 1));
-		compSignatureNoteButtonContainer.setLayout(new FormLayout());
-
-		this.btnSignatureNoteDefault = new Button(compSignatureNoteButtonContainer, SWT.NONE);
-		SWTUtils.anchor(btnSignatureNoteDefault).top(0,0).right(100,-42);
-		SWTUtils.setFontHeight(btnSignatureNoteDefault, Constants.TEXT_SIZE_BUTTON);
-		this.btnSignatureNoteDefault.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				SimpleConfigurationComposite.this.txtSignatureNote.setText(getDefaultSignatureBlockNoteTextFor(null, null));
-			}
-		});
-
-		this.grpLogoOnlyTargetSize = new Group(this, SWT.NONE);
-		SWTUtils.anchor(grpLogoOnlyTargetSize).left(0,5).right(100,-5).top(grpSignatureProfile,5);
-		this.grpLogoOnlyTargetSize.setLayout(new FormLayout());
-		SWTUtils.setFontHeight(grpLogoOnlyTargetSize, Constants.TEXT_SIZE_NORMAL);
-
-		Label lblLOTSLeft = new Label(this.grpLogoOnlyTargetSize, SWT.HORIZONTAL);
-		SWTUtils.anchor(lblLOTSLeft).top(0, 5).left(0, 15);
-		lblLOTSLeft.setText("1cm");
-		SWTUtils.setFontHeight(lblLOTSLeft, Constants.TEXT_SIZE_NORMAL);
-
-		Label lblLOTSRight = new Label(this.grpLogoOnlyTargetSize, SWT.HORIZONTAL);
-		SWTUtils.anchor(lblLOTSRight).top(0,5).right(100, -5);
-		lblLOTSRight.setText("20cm");
-		SWTUtils.setFontHeight(lblLOTSRight, Constants.TEXT_SIZE_NORMAL);
-
-		this.sclLogoOnlyTargetSize = new Scale(this.grpLogoOnlyTargetSize, SWT.HORIZONTAL);
-		SWTUtils.anchor(sclLogoOnlyTargetSize).top(0,5).left(lblLOTSLeft,5).right(lblLOTSRight,-5);
-		sclLogoOnlyTargetSize.setMinimum(10);
-		sclLogoOnlyTargetSize.setMaximum(200);
-		sclLogoOnlyTargetSize.setIncrement(1);
-		sclLogoOnlyTargetSize.setPageIncrement(1);
-		SWTUtils.scrollPassthrough(sclLogoOnlyTargetSize);
-		SWTUtils.addSelectionListener(sclLogoOnlyTargetSize, e ->
-		{
-			configurationContainer.logoOnlyTargetSize = sclLogoOnlyTargetSize.getSelection();
-			this.updateLogoOnlyTargetSizeCurrentValueLabel();
-		});
-		sclLogoOnlyTargetSize.addFocusListener(new FocusAdapter() {
-			public void focusLost(FocusEvent e) { signatureBlockPreviewChanged(); };
-		});
-
-		this.lblLogoOnlyTargetSizeCurrentValue = new Label(this.grpLogoOnlyTargetSize, SWT.HORIZONTAL);
-		SWTUtils.anchor(lblLogoOnlyTargetSizeCurrentValue).top(sclLogoOnlyTargetSize, 5).left(0,5).right(100,-5);
-		lblLogoOnlyTargetSizeCurrentValue.setAlignment(SWT.CENTER);
-		SWTUtils.setFontHeight(lblLogoOnlyTargetSizeCurrentValue, Constants.TEXT_SIZE_NORMAL);
-
-		this.grpPreview = new Group(this, SWT.NONE);
-		SWTUtils.anchor(grpPreview).left(0,5).right(100,-5).top(grpSignatureNote, 5).height(250);
-		this.grpPreview.setLayout(new FormLayout());
-		SWTUtils.setFontHeight(grpPreview, Constants.TEXT_SIZE_NORMAL);
-
-		Composite containerComposite = new Composite(this.grpPreview, SWT.NONE);
-		SWTUtils.anchor(containerComposite).left(0).right(100).top(0).bottom(100);
-		containerComposite.setLayout(new FormLayout());
-
-		this.btnBrowseLogo = new Button(containerComposite, SWT.NONE);
-		SWTUtils.anchor(btnBrowseLogo).top(0,5).right(50,-5);
-		SWTUtils.setFontHeight(btnBrowseLogo, Constants.TEXT_SIZE_BUTTON);
-
-		this.btnClearImage = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btnClearImage).top(0,5).left(50, 5);
-		SWTUtils.setFontHeight(btnClearImage, Constants.TEXT_SIZE_BUTTON);
-		this.btnClearImage.setEnabled(false);
-
-		this.cSigPreview = new Canvas(containerComposite, SWT.RESIZE);
-		SWTUtils.anchor(cSigPreview).left(0, 5).right(100,-5).top(btnBrowseLogo,5).bottom(100,-5);
-		SWTUtils.setFontHeight(cSigPreview, Constants.TEXT_SIZE_NORMAL);
-		this.cSigPreview.addPaintListener(e -> SimpleConfigurationComposite.this.paintSignaturePreview(e));
-
-		DropTarget dnd_target = new DropTarget(containerComposite, DND.DROP_DEFAULT | DND.DROP_COPY);
-		final FileTransfer fileTransfer = FileTransfer.getInstance();
-		Transfer[] types = new Transfer[] { fileTransfer };
-		dnd_target.setTransfer(types);
-
-		dnd_target.addDropListener(new DropTargetAdapter() {
-			@Override
-			public void drop(DropTargetEvent event) {
-				if (fileTransfer.isSupportedType(event.currentDataType)) {
-					String[] files = (String[]) event.data;
-					if (files.length > 0) {
-						// Only taking first file ...
-						File file = new File(files[0]);
-						if (!file.exists()) {
-							log.error("File: {} does not exist!", files[0]); ////
-							return;
-						}
-						performProfileSelectionChanged(Profile.BASE_LOGO);
-						processEmblemChanged(file.getAbsolutePath());
-					}
-				}
-			}
-
-			@Override
-			public void dragOperationChanged(DropTargetEvent event) {
-				if (event.detail == DND.DROP_DEFAULT) {
-					if ((event.operations & DND.DROP_COPY) != 0) {
-						event.detail = DND.DROP_COPY;
-					} else {
-						event.detail = DND.DROP_NONE;
-					}
-				}
-			}
-
-			@Override
-			public void dragEnter(DropTargetEvent event) {
-				if (event.detail == DND.DROP_DEFAULT) {
-					if ((event.operations & DND.DROP_COPY) != 0) {
-						event.detail = DND.DROP_COPY;
-					} else {
-						event.detail = DND.DROP_NONE;
-					}
-				}
-				// Only drop one item!
-				if (event.dataTypes.length > 1) {
-					event.detail = DND.DROP_NONE;
-					return;
-				}
-				// will accept text but prefer to have files dropped
-				for (int i = 0; i < event.dataTypes.length; i++) {
-					if (fileTransfer.isSupportedType(event.dataTypes[i])) {
-						event.currentDataType = event.dataTypes[i];
-						// files should only be copied
-						if (event.detail != DND.DROP_COPY) {
-							event.detail = DND.DROP_NONE;
-						}
-						break;
-					}
-				}
-			}
-		});
-
-		this.btnClearImage.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				SimpleConfigurationComposite.this.processEmblemChanged(null);
-			}
-		});
-		this.btnBrowseLogo.addSelectionListener(new ImageFileBrowser());
-
-		this.cSigPreview.addMouseListener(new MouseAdapter() {
-			@Override
-			public void mouseUp(MouseEvent e) {
-				SimpleConfigurationComposite.this.forceFocus();
-			}
-		});
-
-		// Load localized strings
-		reloadResources();
-	}
-
-	private PdfAs4SignatureParameter sigPreviewParam = null;
-	private Image sigPreview = null;
-	void paintSignaturePreview(PaintEvent evt) {
-		if (this.sigPreview == null)
-			return;
-		Rectangle r = this.sigPreview.getBounds();
-		int srcW = r.width;
-		int srcH = r.height;
-		Point p = ((Canvas)evt.widget).getSize();
-		float dstW = p.x;
-		float dstH = p.y;
-
-		float scale = dstW / srcW;
-		if (srcH * scale > dstH)
-			scale = dstH / srcH;
-
-		float w = srcW * scale;
-		float h = srcH * scale;
-
-		int x = (int) ((dstW / 2) - (w / 2));
-		int y = (int) ((dstH / 2) - (h / 2));
-		evt.gc.drawImage(this.sigPreview, 0, 0, srcW, srcH, x, y, (int) w, (int) h);
-	}
-
-	/**
-	 *
-	 */
-	private final class ImageFileBrowser extends SelectionAdapter {
-		/**
-		 *
-		 */
-		public ImageFileBrowser() {
-			// Nothing to do
-		}
-
-		@Override
-		public void widgetSelected(SelectionEvent e) {
-			FileDialog dialog = new FileDialog(
-					SimpleConfigurationComposite.this.getShell(), SWT.OPEN);
-			dialog.setFilterExtensions(new String[] {
-					"*.jpg;*.png;*.gif", "*.jpg", "*.png", "*.gif", "*" });
-			dialog.setFilterNames(new String[] {
-					Messages.getString("common.ImageExtension_Description"),
-					Messages.getString("common.JPGExtension_Description"),
-					Messages.getString("common.PNGExtension_Description"),
-					Messages.getString("common.GIFExtension_Description"),
-					Messages.getString("common.AllExtension_Description") });
-			String fileName = dialog.open();
-			File file = null;
-			if (fileName != null) {
-				file = new File(fileName);
-				if (file.exists()) {
-					processEmblemChanged(fileName);
-				}
-			}
-		}
-	}
-
-	private void setEmblemFileInternal(final String filename, boolean force)
-			throws Exception {
-		if (!force && this.configurationContainer.getEmblemPath() != null) {
-			if (this.configurationContainer.getEmblemPath().equals(filename)) {
-				return; // Ignore ...
-			}
-		}
-
-		this.configurationContainer.setEmblem(filename);
-		this.btnClearImage.setEnabled(filename != null);
-		this.signatureBlockPreviewChanged();
-		this.doLayout();
-	}
-
-	void signatureBlockPreviewChanged() {
-		try {
-			PdfAs4SignatureParameter param = new PdfAs4SignatureParameter();
-			param.signatureProfile = this.configurationContainer.getSignatureProfile();
-			if(this.configurationContainer.signatureNote != null && !this.configurationContainer.signatureNote.isEmpty()) {
-				param.signatureNote = this.configurationContainer.signatureNote;
-			}
-
-			param.signatureLanguage = this.configurationContainer.signatureLocale.getLanguage();
-			param.enablePDFACompat = this.configurationContainer.signaturePDFACompat;
-			param.targetLogoSize = Math.min(120.0, this.configurationContainer.logoOnlyTargetSize); // TODO WORKAROUND FOR #117
-			String image = this.configurationContainer.getEmblemPath();
-			if (image != null && !image.trim().isEmpty()) {
-				param.emblem = new Emblem(image);
-			}
-
-			this.sigPreviewParam = param;
-			PdfAs4SignaturePlaceholder.For(param, (p) -> {
-				if (this.isDisposed())
-					return;
-
-				this.getDisplay().syncExec(() -> {
-					if (this.isDisposed())
-						return;
-					if (this.sigPreviewParam != param)
-						return;
-					if (this.sigPreview != null)
-						this.sigPreview.dispose();
-					if (p.hasImage())
-						this.sigPreview = new Image(this.getDisplay(), p.getSWTImage());
-					this.cSigPreview.redraw();
-				});
-			});
-		} catch (Exception e) {
-			log.error("Failed to load image for display...", e);
-		}
-	}
-
-	void processEmblemChanged(String filename) {
-		try {
-			setEmblemFileInternal(filename, false);
-		} catch (Exception ex) {
-			log.error("processEmblemChanged: ", ex);
-			ErrorDialog dialog = new ErrorDialog(
-					getShell(),
-					Messages.getString("error.FailedToLoadEmblem"), BUTTONS.OK);
-			dialog.open();
-		}
-	}
-
-	void processNumberChanged() {
-		try {
-			this.txtMobileNumberErrorMarker.setVisible(false);
-			plainMobileNumberSetter();
-		} catch (Exception ex) {
-			this.txtMobileNumberErrorMarker.setVisible(true);
-			this.txtMobileNumberErrorMarker.setToolTipText(Messages
-					.getString("error.InvalidPhoneNumber"));
-			log.error("processNumberChanged: ", ex);
-			this.redraw();
-			this.doLayout();
-		}
-	}
-
-	int getLocaleElementIndex(Locale locale) {
-		for (int i = 0; i < Constants.SUPPORTED_LOCALES.length; i++) {
-			if (Constants.SUPPORTED_LOCALES[i].equals(locale)) {
-				log.debug("Locale: {} IDX: {}",locale, i);
-				return i;
-			}
-		}
-
-		log.warn("NO Locale match for {}", locale);
-		return 0;
-	}
-
-	void performSignatureLangSelectionChanged(Locale selected, Locale previous) {
-		log.debug("Selected Sign Locale: {}", selected);
-		this.configurationContainer.signatureLocale = selected;
-		this.cmbSignatureLang.select(this.getLocaleElementIndex(selected));
-
-		if ((previous != null) && (txtSignatureNote.getText().equals(getDefaultSignatureBlockNoteTextFor(null, previous))))
-			txtSignatureNote.setText(getDefaultSignatureBlockNoteTextFor(null, selected));
-		
-		signatureBlockPreviewChanged();
-	}
-
-
-
-    void performProfileSelectionChanged(Profile newProfile) {
-		log.debug("Signature Profile {} was selected", newProfile.name());
-		Profile oldProfile = this.configurationContainer.getSignatureProfile();
-    	this.configurationContainer.setSignatureProfile(newProfile);
-    	this.cmbSignatureProfiles.select(newProfile.ordinal());
-
-		if (txtSignatureNote.getText().equals(getDefaultSignatureBlockNoteTextFor(oldProfile, null)))
-			txtSignatureNote.setText(getDefaultSignatureBlockNoteTextFor(newProfile, null));
-
-		this.grpSignatureLang.setVisible(newProfile.hasText());
-		this.grpSignatureNote.setVisible(newProfile.hasText());
-		this.grpLogoOnlyTargetSize.setVisible(newProfile.equals(Profile.BASE_LOGO));
-
-		SWTUtils.reanchor(grpPreview).top(newProfile.hasText() ? grpSignatureNote : grpLogoOnlyTargetSize, 5);
-		this.grpPreview.setVisible(newProfile.isVisibleSignature());
-		this.grpPreview.requestLayout();
-		signatureBlockPreviewChanged();
-	}
-
-	String getDefaultSignatureBlockNoteTextFor(Profile profile, Locale locale){
-		if (profile == null)
-			profile = configurationContainer.getSignatureProfile();
-		if (locale == null)
-			locale = configurationContainer.signatureLocale;
-		return profile.getDefaultSignatureBlockNote(locale);
-	}
-
-	private void plainMobileNumberSetter() {
-		String number = this.txtMobileNumber.getText();
-		this.configurationContainer.setMobileNumber(number);
-		number = this.configurationContainer.getMobileNumber();
-		if (number == null) {
-			this.txtMobileNumber.setText("");
-			return;
-		}
-		this.txtMobileNumber.setText(number);
-	}
-
-	void processSignatureNoteChanged() {
-		String note = this.txtSignatureNote.getText();
-		this.configurationContainer.signatureNote = note;
-		signatureBlockPreviewChanged();
-	}
-
-	@Override
-	public void initConfiguration(ConfigurationManager provider) {
-		this.configurationContainer.setMobileNumber(provider.getDefaultMobileNumberPersistent());
-
-		try {
-			this.configurationContainer.setEmblem(provider.getDefaultEmblemPersistent());
-		} catch (InvalidEmblemFile e) {
-			log.error("Failed to set emblem!", e);
-		}
-
-		this.configurationContainer.signatureLocale = provider.getSignatureLocale();
-		this.configurationContainer.signatureNote = provider.getSignatureNote();
-		this.configurationContainer.logoOnlyTargetSize = provider.getLogoOnlyTargetSize();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see at.asit.pdfover.gui.composites.BaseConfigurationComposite#loadConfiguration
-	 * ()
-	 */
-	@Override
-	public void loadConfiguration() {
-		// Initialize form fields from configuration Container
-		String number = this.configurationContainer.getMobileNumber();
-		if (number != null) {
-			this.txtMobileNumber.setText(number);
-		}
-
-		String emblemFile = this.configurationContainer.getEmblemPath();
-		if (emblemFile != null && !emblemFile.trim().isEmpty()) {
-			this.logoFile = emblemFile;
-			try {
-				setEmblemFileInternal(emblemFile, true);
-				this.btnClearImage.setSelection(true);
-			} catch (Exception e1) {
-				log.error("Failed to load emblem: ", e1);
-				ErrorDialog dialog = new ErrorDialog(
-						getShell(),
-						Messages.getString("error.FailedToLoadEmblem"), BUTTONS.OK);
-				dialog.open();
-			}
-		}
-
-		String note = this.configurationContainer.signatureNote;
-
-		if (note != null) {
-			this.txtSignatureNote.setText(note);
-		}
-
-		this.sclLogoOnlyTargetSize.setSelection((int)this.configurationContainer.logoOnlyTargetSize);
-		this.updateLogoOnlyTargetSizeCurrentValueLabel();
-
-		this.signatureBlockPreviewChanged();
-
-		this.performSignatureLangSelectionChanged(this.configurationContainer.signatureLocale, null);
-
-		this.performProfileSelectionChanged(this.configurationContainer.getSignatureProfile());
-
-	}
-
-	@Override
-	public void storeConfiguration(ConfigurationManager store) {
-		store.setDefaultMobileNumberPersistent(this.configurationContainer.getMobileNumber());
-		store.setDefaultEmblemPersistent(this.configurationContainer.getEmblemPath());
-		store.setSignatureLocalePersistent(this.configurationContainer.signatureLocale);
-		store.setSignatureNotePersistent(this.configurationContainer.signatureNote);
-		store.setSignatureProfilePersistent(this.configurationContainer.getSignatureProfile());
-		store.setLogoOnlyTargetSizePersistent(this.configurationContainer.logoOnlyTargetSize);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.composites.BaseConfigurationComposite#validateSettings
-	 * ()
-	 */
-	@Override
-	public void validateSettings(int resumeFrom) throws Exception {
-		switch (resumeFrom) {
-			case 0:
-				this.plainMobileNumberSetter();
-				// Fall through
-			case 1:
-				this.processSignatureNoteChanged();
-				break;
-			default:
-				break;
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(grpHandySignatur, "simple_config.MobileBKU_Title");
-		SWTUtils.setLocalizedText(lblMobileNumber, "simple_config.PhoneNumber");
-		SWTUtils.setLocalizedToolTipText(txtMobileNumber, "simple_config.ExampleNumber_ToolTip");
-		this.txtMobileNumber.setMessage(Messages.getString("simple_config.ExampleNumber"));
-
-		SWTUtils.setLocalizedText(grpPreview, "simple_config.Preview_Title");
-		SWTUtils.setLocalizedText(btnClearImage, "simple_config.ClearEmblem");
-		SWTUtils.setLocalizedText(btnBrowseLogo, "simple_config.ReplaceEmblem");
-		SWTUtils.setLocalizedText(grpSignatureNote, "simple_config.Note_Title");
-		SWTUtils.setLocalizedText(lblSignatureNote, "simple_config.Note");
-		SWTUtils.setLocalizedToolTipText(txtSignatureNote, "simple_config.Note_Tooltip");
-		SWTUtils.setLocalizedText(btnSignatureNoteDefault, "simple_config.Note_SetDefault");
-
-		SWTUtils.setLocalizedText(grpSignatureLang, "simple_config.SigBlockLang_Title");
-		SWTUtils.setLocalizedToolTipText(cmbSignatureLang, "simple_config.SigBlockLang_ToolTip");
-
-		SWTUtils.setLocalizedText(grpSignatureProfile, "simple_config.SigProfile_Title");
-		this.cmbSignatureProfiles.setItems(Arrays.stream(Profile.values()).map(v -> Messages.getString("simple_config."+v.name())).toArray(String[]::new));
-
-		SWTUtils.setLocalizedText(grpLogoOnlyTargetSize, "simple_config.LogoOnlyTargetSize_Title");
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUEnterNumberComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUEnterNumberComposite.java
deleted file mode 100644
index 7c02eda0..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUEnterNumberComposite.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites.mobilebku;
-
-// Imports
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.bku.mobile.MobileBKUValidator;
-import at.asit.pdfover.gui.composites.StateComposite;
-import at.asit.pdfover.gui.exceptions.InvalidPasswordException;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.states.State;
-
-/**
- * Composite for entering the phone number for the mobile BKU
- */
-public class MobileBKUEnterNumberComposite extends StateComposite {
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(MobileBKUEnterNumberComposite.class);
-
-	/**
-	 *
-	 */
-	private final SelectionListener okListener = new SelectionAdapter() {
-		@Override
-		public void widgetSelected(SelectionEvent e) {
-			if (!MobileBKUEnterNumberComposite.this.btn_ok.isEnabled()) {
-				return;
-			}
-
-			try {
-				String number = MobileBKUEnterNumberComposite.this.txt_number.getText();
-
-				MobileBKUEnterNumberComposite.this.setMobileNumber(number);
-
-				String password = MobileBKUEnterNumberComposite.this.txt_password.getText();
-
-				MobileBKUValidator.validatePassword(password);
-
-				MobileBKUEnterNumberComposite.this.mobilePassword = password;
-				MobileBKUEnterNumberComposite.this.userAck = true;
-
-				MobileBKUEnterNumberComposite.this.btn_ok.setEnabled(false);
-
-			} catch(InvalidPasswordException ex) {
-				log.info("Validating input for Mobile BKU failed!", ex);
-				MobileBKUEnterNumberComposite.this.setErrorMessage(ex.getMessage());
-				MobileBKUEnterNumberComposite.this.txt_password.setFocus();
-			} catch (Exception ex) {
-				log.info("Validating input for Mobile BKU failed!", ex);
-				MobileBKUEnterNumberComposite.this.setErrorMessage(Messages.getString("error.InvalidPhoneNumber"));
-				MobileBKUEnterNumberComposite.this.txt_number.setFocus();
-				return;
-			}
-		}
-	};
-
-	/**
-	 *
-	 */
-	private final SelectionListener cancelListener = new SelectionAdapter() {
-		@Override
-		public void widgetSelected(SelectionEvent e) {
-			MobileBKUEnterNumberComposite.this.userCancel = true;
-		}
-	};
-
-
-	String mobileNumber;
-
-	String mobilePassword;
-
-	Text txt_number;
-
-	Text txt_password;
-
-	String errorMessage = null;
-
-	public boolean userAck = false;
-	public boolean userCancel = false;
-
-
-	private Label lbl_error;
-	private Label lbl_password;
-	private Label lbl_number;
-
-	Button btn_ok;
-	Button btn_cancel;
-	Button btn_remember;
-
-	/**
-	 * @return the errorMessage
-	 */
-	public String getErrorMessage() {
-		return this.errorMessage;
-	}
-
-	/**
-	 * @param errorMessage
-	 *            the errorMessage to set
-	 */
-	public void setErrorMessage(String errorMessage) {
-		this.errorMessage = errorMessage;
-
-		if (this.errorMessage != null) {
-			this.lbl_error.setText(this.errorMessage);
-		} else {
-			this.lbl_error.setText("");
-		}
-	}
-
-	public boolean isRememberPassword() { return this.btn_remember.getSelection(); }
-	public void setRememberPassword(boolean state) { this.btn_remember.setSelection(state); }
-
-	/**
-	 * Create the composite.
-	 *
-	 * @param parent
-	 * @param style
-	 * @param state
-	 */
-	public MobileBKUEnterNumberComposite(Composite parent, int style, State state) {
-		super(parent, style, state);
-		setLayout(new FormLayout());
-
-		final Composite containerComposite = new Composite(this, SWT.NATIVE);
-		containerComposite.addPaintListener(e -> {
-			Rectangle clientArea = containerComposite.getClientArea();
-
-			//e.gc.setForeground();
-			e.gc.setForeground(Constants.MAINBAR_ACTIVE_BACK_DARK);
-			e.gc.setLineWidth(3);
-			e.gc.setLineStyle(SWT.LINE_SOLID);
-			e.gc.drawRoundRectangle(clientArea.x,
-					clientArea.y, clientArea.width - 2, clientArea.height - 2,
-					10, 10);
-		});
-		containerComposite.setLayout(new FormLayout());
-		SWTUtils.anchor(containerComposite).top(50, -120).bottom(50, 120).left(50, -200).right(50, 200);
-
-		this.txt_number = new Text(containerComposite, SWT.SINGLE | SWT.NATIVE | SWT.BORDER);
-		SWTUtils.anchor(txt_number).bottom(50, -10).left(50, 10).right(100, -20);
-		this.txt_number.setEditable(true);
-
-		this.lbl_number = new Label(containerComposite, SWT.NATIVE);
-		this.lbl_number.setAlignment(SWT.RIGHT);
-		SWTUtils.anchor(lbl_number).bottom(50, -10).right(50, -10);
-
-		ImageData mobileIconData = new ImageData(this.getClass().getResourceAsStream(Constants.RES_IMG_MOBILE));
-		Image mobileIcon = new Image(getDisplay(), mobileIconData);
-
-		Label lbl_image = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lbl_image).top(20, -1 * (mobileIconData.width / 2)).bottom(20, mobileIconData.width / 2).left(0, 10).width(mobileIconData.width);
-		lbl_image.setImage(mobileIcon);
-
-		this.txt_password = new Text(containerComposite, SWT.SINGLE | SWT.PASSWORD | SWT.BORDER | SWT.NATIVE);
-		SWTUtils.anchor(txt_password).top(50, 10).left(50, 10).right(100, -20);
-		this.txt_password.setEditable(true);
-
-		this.lbl_password = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lbl_password).top(50, 10).right(50, -10);
-		this.lbl_password.setAlignment(SWT.RIGHT);
-
-		this.btn_ok = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btn_ok).bottom(100, -20).right(100, -20);
-		this.btn_ok.addSelectionListener(this.okListener);
-
-		this.btn_cancel = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btn_cancel).bottom(100, -20).right(btn_ok, -10);
-		this.btn_cancel.addSelectionListener(this.cancelListener);
-
-		this.lbl_error = new Label(containerComposite, SWT.WRAP | SWT.NATIVE );
-		SWTUtils.anchor(lbl_error).bottom(103, -20).left(5, 0).right(btn_cancel, -10);
-
-		this.btn_remember = new Button(containerComposite, SWT.CHECK);
-		SWTUtils.anchor(btn_remember).right(100, -10).top(0, 5);
-	}
-
-	@Override public void onDisplay() {
-		getShell().setDefaultButton(this.btn_ok);
-		if (this.txt_number.getText().isEmpty()) {
-			this.txt_number.setFocus();
-		} else {
-			this.txt_password.setFocus();
-		}
-	}
-
-	/**
-	 * enables submit button
-	 */
-	public void enableButton() {
-		this.btn_ok.setEnabled(true);
-	}
-
-	/**
-	 * @return the mobileNumber
-	 */
-	public String getMobileNumber() {
-		return this.mobileNumber;
-	}
-
-	/**
-	 * @param mobileNumber
-	 *            the mobileNumber to set
-	 */
-	public void setMobileNumber(String mobileNumber) {
-		this.mobileNumber = mobileNumber;
-
-		if (this.mobileNumber != null && !this.mobileNumber.isEmpty()) {
-			this.txt_number.setText(this.mobileNumber);
-		} else {
-			this.txt_number.setText("");
-		}
-	}
-
-	/**
-	 * @return the mobilePassword
-	 */
-	public String getMobilePassword() {
-		return this.mobilePassword;
-	}
-
-
-
-	/**
-	 * @param mobilePassword
-	 *            the mobilePassword to set
-	 */
-	public void setMobilePassword(String mobilePassword) {
-		this.mobilePassword = mobilePassword;
-
-		if (this.mobilePassword != null) {
-			this.txt_password.setText(this.mobilePassword);
-		} else {
-			this.txt_password.setText("");
-		}
-	}
-
-	/** (non-Javadoc)
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(lbl_number, "mobileBKU.number");
-		SWTUtils.setLocalizedText(lbl_password, "mobileBKU.password");
-		SWTUtils.setLocalizedText(btn_remember, "mobileBKU.rememberPassword");
-		SWTUtils.setLocalizedText(btn_ok, "common.Ok");
-		SWTUtils.setLocalizedText(btn_cancel, "common.Cancel");
-
-		SWTUtils.setLocalizedToolTipText(btn_remember, "mobileBKU.rememberPasswordNote");
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUEnterTANComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUEnterTANComposite.java
deleted file mode 100644
index a1e90f51..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUEnterTANComposite.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites.mobilebku;
-
-// Imports
-import java.net.URI;
-import java.util.Objects;
-
-import javax.annotation.CheckForNull;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.swt.widgets.Text;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.beust.jcommander.internal.Nullable;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.composites.StateComposite;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.states.State;
-import at.asit.webauthn.WebAuthN;
-
-/**
- * Composite for entering the TAN for the mobile BKU
- */
-public class MobileBKUEnterTANComposite extends StateComposite {
-
-	private void validateAndConfirmTAN() {
-		String tan = this.txt_tan.getText();
-
-		tan = tan.trim();
-
-		if (tan.isEmpty()) {
-			this.setMessage(Messages.getString("error.NoTan"));
-			return;
-		}
-
-		if (MobileBKUEnterTANComposite.this.refVal.startsWith(tan)) {
-			this.setMessage(Messages.getString("error.EnteredReferenceValue"));
-			return;
-		}
-
-		if (tan.length() > 6) {
-			this.setMessage(Messages.getString("error.TanTooLong"));
-			return;
-		}
-
-		this.tan = tan;
-		this.userAck = true;
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(MobileBKUEnterTANComposite.class);
-
-	private Text txt_tan;
-
-	private boolean userAck = false;
-	private boolean userCancel = false;
-	private boolean userFido2 = false;
-
-	private Label lblRefVal;
-
-	private String refVal;
-
-	private URI signatureDataURI;
-
-	/**
-	 * @param signatureData
-	 *            the signatureData to set
-	 */
-	public void setSignatureDataURI(@Nullable URI uri) {
-		this.signatureDataURI = uri;
-		this.lnk_sig_data.setVisible(uri != null);
-	}
-
-	private String tan;
-
-	private Link lnk_sig_data;
-
-	private Label lblMessage;
-	private Label lblRefValLabel;
-	private Label lblTan;
-
-	private Button btn_ok;
-	private Button btn_cancel;
-	private Button btn_fido2;
-
-	public boolean isDone() { return (this.userAck || this.userCancel || this.userFido2); }
-	public boolean isUserAck() { return this.userAck; }
-	public boolean isUserCancel() { return this.userCancel; }
-	public boolean isUserFido2() { return this.userFido2; }
-
-	public void reset() { this.userAck = this.userCancel = this.userFido2 = false; }
-
-	/**
-	 * Set an error message
-	 * @param errorMessage the error message
-	 */
-	public void setErrorMessage(String errorMessage) {
-		if (errorMessage == null)
-			this.lblMessage.setText("");
-		else
-			this.lblMessage.setText(
-					Messages.getString("error.Title") + ": " + errorMessage);
-	}
-
-	public void setFIDO2Enabled(boolean state) {
-		this.btn_fido2.setEnabled(state);
-	}
-
-	/**
-	 * Sets the message
-	 *
-	 * @param msg
-	 */
-	public void setMessage(String msg) {
-		this.lblMessage.setText(msg);
-		this.lblMessage.redraw();
-		this.lblMessage.getParent().layout(true, true);
-	}
-
-	public String getRefVal() { return this.refVal; }
-	public void setRefVal(@CheckForNull String refVal) {
-		this.refVal = (refVal != null) ? refVal.trim() : null;
-		this.lblRefVal.setText(Objects.requireNonNullElse(this.refVal, ""));
-	}
-
-	/**
-	 * @return the tan
-	 */
-	public String getTan() {
-		return this.tan;
-	}
-
-	/**
-	 * @param tan
-	 *            the tan to set
-	 */
-	public void setTan(String tan) {
-		this.tan = tan;
-
-		if (this.tan == null) {
-			this.txt_tan.setText("");
-		} else {
-			this.txt_tan.setText(this.tan);
-		}
-	}
-
-	/**
-	 * Create the composite.
-	 *
-	 * @param parent
-	 * @param style
-	 * @param state
-	 */
-	public MobileBKUEnterTANComposite(Composite parent, int style, State state) {
-		super(parent, style, state);
-		setLayout(new FormLayout());
-
-		final Composite containerComposite = new Composite(this, SWT.NATIVE);
-		containerComposite.addPaintListener(new PaintListener() {
-			@Override
-			public void paintControl(PaintEvent e) {
-				Rectangle clientArea = containerComposite.getClientArea();
-
-				// e.gc.setForeground();
-				e.gc.setForeground(Constants.MAINBAR_ACTIVE_BACK_DARK);
-				e.gc.setLineWidth(3);
-				e.gc.setLineStyle(SWT.LINE_SOLID);
-				e.gc.drawRoundRectangle(clientArea.x, clientArea.y,
-						clientArea.width - 2, clientArea.height - 2, 10, 10);
-			}
-		});
-		containerComposite.setLayout(new FormLayout());
-		SWTUtils.anchor(containerComposite).top(50, -120).bottom(50, 120).left(50, -200).right(50, 200);
-
-		this.lblRefValLabel = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lblRefValLabel).right(50, -10).bottom(50,-10);
-		SWTUtils.setLocalizedText(lblRefValLabel, "tanEnter.ReferenceValue");
-		this.lblRefValLabel.setAlignment(SWT.RIGHT);
-
-		ImageData mobileIcon = new ImageData(this.getClass().getResourceAsStream(Constants.RES_IMG_MOBILE));
-		Label lbl_image = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lbl_image).top(50, -1 * (mobileIcon.width / 2)).bottom(50, mobileIcon.width / 2).left(0, 10).width(mobileIcon.width);
-		lbl_image.setImage(new Image(getDisplay(), mobileIcon));
-
-		this.lblRefVal = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lblRefVal).left(50,10).right(100,-20).bottom(50,-10);
-		this.lblRefVal.setText("");
-
-		this.lblTan = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lblTan).right(50,-10).top(50,10);
-		SWTUtils.setLocalizedText(lblTan, "tanEnter.TAN");
-		this.lblTan.setAlignment(SWT.RIGHT);
-
-		this.txt_tan = new Text(containerComposite, SWT.BORDER | SWT.NATIVE);
-		SWTUtils.anchor(txt_tan).left(50,10).right(100,-20).top(50,10);
-		this.txt_tan.setEditable(true);
-
-		this.txt_tan.addTraverseListener((e) -> {
-			if (e.detail == SWT.TRAVERSE_RETURN) {
-				validateAndConfirmTAN();
-			}
-		});
-
-		this.txt_tan.addModifyListener((e) -> {
-			String text = this.txt_tan.getText();
-			if (text.length() > 3 && this.getRefVal().startsWith(text.trim()))
-				this.setMessage(Messages.getString("error.EnteredReferenceValue"));
-		});
-
-		this.lnk_sig_data = new Link(containerComposite, SWT.NATIVE | SWT.RESIZE);
-		SWTUtils.anchor(lnk_sig_data).right(100,-20).top(0,20);
-		lnk_sig_data.setEnabled(true);
-		SWTUtils.addSelectionListener(lnk_sig_data, (e) -> { SWTUtils.openURL(this.signatureDataURI); });
-
-		this.btn_ok = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btn_ok).right(100,-20).bottom(100,-20);
-		SWTUtils.addSelectionListener(btn_ok, (e) -> { validateAndConfirmTAN(); });
-		
-		this.btn_cancel = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btn_cancel).right(btn_ok, -20).bottom(100, -20);
-		SWTUtils.addSelectionListener(btn_cancel, (e) -> { this.userCancel = true; });
-
-		this.btn_fido2 = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btn_fido2).right(btn_cancel, -20).bottom(100, -20);
-		SWTUtils.addSelectionListener(btn_fido2, (e) -> { this.userFido2 = true; });
-		this.btn_fido2.setVisible(WebAuthN.isAvailable());
-
-		this.lblMessage = new Label(containerComposite, SWT.WRAP | SWT.NATIVE);
-		SWTUtils.anchor(lblMessage).right(btn_fido2, -10).bottom(100, -20);
-	}
-	
-	@Override public void onDisplay() { getShell().setDefaultButton(btn_ok); txt_tan.setFocus(); }
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(lnk_sig_data, "mobileBKU.show");
-		SWTUtils.setLocalizedToolTipText(lnk_sig_data, "mobileBKU.show_tooltip");
-		SWTUtils.setLocalizedText(lblRefValLabel, "tanEnter.ReferenceValue");
-		SWTUtils.setLocalizedText(lblTan, "tanEnter.TAN");
-		SWTUtils.setLocalizedText(btn_cancel, "common.Cancel");
-		SWTUtils.setLocalizedText(btn_ok, "common.Ok");
-		SWTUtils.setLocalizedText(btn_fido2, "tanEnter.FIDO2");
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUFido2Composite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUFido2Composite.java
deleted file mode 100644
index b0506596..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUFido2Composite.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package at.asit.pdfover.gui.composites.mobilebku;
-
-import java.net.URI;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.composites.StateComposite;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.states.State;
-import at.asit.webauthn.PublicKeyCredential;
-import at.asit.webauthn.WebAuthN;
-import at.asit.webauthn.exceptions.WebAuthNUserCancelled;
-import at.asit.webauthn.responsefields.AuthenticatorAssertionResponse;
-
-public class MobileBKUFido2Composite extends StateComposite {
-    private static final Logger log = LoggerFactory.getLogger(MobileBKUFido2Composite.class);
-    
-    private @Nonnull String fido2OptionsString = "";
-
-    private PublicKeyCredential<AuthenticatorAssertionResponse> credential;
-    private boolean userCancel;
-    private boolean userSms;
-
-    private Button btn_authenticate;
-    private Button btn_cancel;
-    private Button btn_sms;
-    public void setSMSEnabled(boolean state) { this.btn_sms.setEnabled(state); }
-
-    private @CheckForNull URI signatureDataURI;
-    private Link lnk_sigData;
-    public void setSignatureDataURI(URI uri) { this.signatureDataURI = uri; this.lnk_sigData.setVisible(uri != null); }
-
-    public void initialize(@Nonnull String fido2Options) {
-        this.fido2OptionsString = fido2Options;
-        this.credential = null;
-        this.userCancel = this.userSms = false;
-    }
-
-    public boolean isDone() { return ((this.credential != null) || this.userCancel || this.userSms); }
-    public PublicKeyCredential<AuthenticatorAssertionResponse> getResultingCredential() { return this.credential; }
-    public boolean wasUserCancelClicked() { return userCancel; }
-    public boolean wasUserSMSClicked() { return userSms; }
-
-    public void beginAuthentication() {
-        if (!btn_authenticate.isEnabled()) return;
-
-        SWTUtils.setLocalizedText(btn_authenticate, "common.working");
-        btn_authenticate.setEnabled(false);
-        new Thread(() -> {
-            try {
-                this.credential = WebAuthN.buildGetFromJSON(this.fido2OptionsString).get("https://service.a-trust.at");
-            } catch (Throwable t) {
-                if (!(t instanceof WebAuthNUserCancelled)) {
-                    log.warn("webauthn operation failed", t);
-                }
-            } finally {
-                this.getDisplay().syncExec(() -> { btn_authenticate.setEnabled(true); this.reloadResources(); });
-                this.getDisplay().wake();
-            }
-        }).start();
-    }    
-
-    public MobileBKUFido2Composite(Composite parent, int style, State state) {
-        super(parent, style, state);
-        setLayout(new FormLayout());
-
-        final Composite containerComposite = new Composite(this, SWT.NATIVE);
-        containerComposite.addPaintListener((e) -> {
-            Rectangle clientArea = containerComposite.getClientArea();
-            e.gc.setForeground(Constants.MAINBAR_ACTIVE_BACK_DARK);
-            e.gc.setLineWidth(3);
-            e.gc.setLineStyle(SWT.LINE_SOLID);
-            e.gc.drawRoundRectangle(clientArea.x, clientArea.y+25,
-                    clientArea.width - 2, clientArea.height - 27, 10, 10);
-        
-		});
-        containerComposite.setLayout(new FormLayout());
-        SWTUtils.anchor(containerComposite).top(50, -145).bottom(50, 120).left(50, -200).right(50, 200);
-
-        ImageData webauthnLogoImg = new ImageData(this.getClass().getResourceAsStream(Constants.RES_IMG_WEBAUTHN));
-        Label webauthnLogo = new Label(containerComposite, SWT.NATIVE);
-        SWTUtils.anchor(webauthnLogo).top(0,0).left(0, 10).height(50).width(187);
-        webauthnLogo.setBackground(getBackground());
-        webauthnLogo.setImage(new Image(getDisplay(), webauthnLogoImg.scaledTo(187, 50)));
-
-        ImageData fidoLogoImg = new ImageData(this.getClass().getResourceAsStream(Constants.RES_IMG_FIDO2));
-        Label fidoLogo = new Label(containerComposite, SWT.NATIVE);
-        SWTUtils.anchor(fidoLogo).left(0, 10).bottom(100, -10).height(50).width(81);
-        fidoLogo.setImage(new Image(getDisplay(), fidoLogoImg.scaledTo(81, 50)));
-
-        this.btn_authenticate = new Button(containerComposite, SWT.NATIVE);
-        SWTUtils.anchor(btn_authenticate).top(50, -15).left(0, 90).right(100, -90);
-        SWTUtils.addSelectionListener(btn_authenticate, this::beginAuthentication);
-        btn_authenticate.setEnabled(WebAuthN.isAvailable());
-
-        this.btn_cancel = new Button(containerComposite, SWT.NATIVE);
-        SWTUtils.anchor(btn_cancel).bottom(100, -10).right(100, -10);
-        SWTUtils.addSelectionListener(btn_cancel, () -> { this.userCancel = true; });
-
-        this.btn_sms = new Button(containerComposite, SWT.NATIVE);
-        SWTUtils.anchor(btn_sms).bottom(100, -10).right(btn_cancel, -10);
-        SWTUtils.addSelectionListener(btn_sms, () -> { this.userSms = true; });
-
-        this.lnk_sigData = new Link(containerComposite, SWT.NATIVE | SWT.RESIZE);
-		SWTUtils.anchor(lnk_sigData).top(0, 45).right(100, -20);
-		SWTUtils.addSelectionListener(lnk_sigData, (e) -> { SWTUtils.openURL(this.signatureDataURI); });
-    }
-
-    @Override public void onDisplay() { getShell().setDefaultButton(this.btn_authenticate); beginAuthentication(); }
-
-    @Override
-    public void reloadResources() {
-        SWTUtils.setLocalizedText(btn_authenticate, WebAuthN.isAvailable() ? "mobileBKU.authorize" : "common.unavailable");
-        SWTUtils.setLocalizedText(btn_cancel, "common.Cancel");
-        SWTUtils.setLocalizedText(btn_sms, "tanEnter.SMS");
-        SWTUtils.setLocalizedText(lnk_sigData, "mobileBKU.show");
-        SWTUtils.setLocalizedToolTipText(lnk_sigData, "mobileBKU.show_tooltip");
-    }
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUFingerprintComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUFingerprintComposite.java
deleted file mode 100644
index ee9d9a0c..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUFingerprintComposite.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites.mobilebku;
-
-import java.net.URI;
-import java.util.Objects;
-
-import javax.annotation.CheckForNull;
-
-// Imports
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.composites.StateComposite;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.states.State;
-import at.asit.webauthn.WebAuthN;
-
-/**
- * Composite for displaying the QR code for the mobile BKU
- */
-public class MobileBKUFingerprintComposite extends StateComposite {
-	private Label lblError;
-	private Label lblRefValLabel;
-	private Label lblFPLabel;
-	private Label lblRefVal;
-	private Button btn_sms;
-	private Button btn_fido2;
-	private Button btn_cancel;
-	private Link lnk_sig_data;
-	public URI signatureDataURI;
-	private String refVal;
-
-	private boolean userCancelClicked = false;
-	private boolean userSMSClicked = false;
-	private boolean userFido2Clicked = false;
-	private boolean pollingDone = false;
-
-	public void signalPollingDone() { this.pollingDone = true; getDisplay().wake(); }
-	public boolean isDone() { return (this.userCancelClicked || this.userSMSClicked || this.userFido2Clicked || this.pollingDone); }
-	public boolean wasCancelClicked() { return this.userCancelClicked; }
-	public boolean wasSMSClicked() { return this.userSMSClicked; }
-	public boolean wasFIDO2Clicked() { return this.userFido2Clicked; }
-	public void reset() { this.userCancelClicked = this.userSMSClicked = this.userFido2Clicked = this.pollingDone = false; }
-
-	public void setSMSEnabled(boolean state) {
-		this.btn_sms.setEnabled(state);
-	}
-
-	public void setFIDO2Enabled(boolean state) {
-		this.btn_fido2.setEnabled(state);
-	}
-
-	/**
-	 * Set an error message
-	 * @param errorMessage the error message
-	 */
-	public void setErrorMessage(String errorMessage) {
-		if (errorMessage == null)
-			this.lblError.setText("");
-		else
-			this.lblError.setText(Messages.getString("error.Title") + ": " + errorMessage);
-	}
-
-	public String getRefVal() { return this.refVal; }
-	public void setRefVal(@CheckForNull String refVal) {
-		this.refVal = (refVal != null) ? refVal.trim() : null;
-		this.lblRefVal.setText(Objects.requireNonNullElse(this.refVal, ""));
-	}
-
-	/**
-	 * Create the composite.
-	 *
-	 * @param parent
-	 * @param style
-	 * @param state
-	 */
-	public MobileBKUFingerprintComposite(Composite parent, int style, State state) {
-		super(parent, style, state);
-		setLayout(new FormLayout());
-
-		final Composite containerComposite = new Composite(this, SWT.NATIVE);
-		containerComposite.addPaintListener(new PaintListener() {
-			@Override
-			public void paintControl(PaintEvent e) {
-				Rectangle clientArea = containerComposite.getClientArea();
-
-				// e.gc.setForeground();
-				e.gc.setForeground(Constants.MAINBAR_ACTIVE_BACK_DARK);
-				e.gc.setLineWidth(3);
-				e.gc.setLineStyle(SWT.LINE_SOLID);
-				e.gc.drawRoundRectangle(clientArea.x, clientArea.y,
-						clientArea.width - 2, clientArea.height - 2, 10, 10);
-			}
-		});
-		containerComposite.setLayout(new FormLayout());
-		SWTUtils.anchor(containerComposite).top(50, -140).bottom(50, 140).left(50, -200).right(50, 200);
-
-		this.lblRefValLabel = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lblRefValLabel).right(50, -10).top(30, -10);
-		this.lblRefValLabel.setAlignment(SWT.RIGHT);
-
-		ImageData mobileIcon = new ImageData(this.getClass().getResourceAsStream(Constants.RES_IMG_MOBILE));
-		Label lbl_image = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lbl_image).top(50, -1 * (mobileIcon.width / 2)).bottom(50, mobileIcon.width / 2).left(0, 10).width(mobileIcon.width);
-		lbl_image.setImage(new Image(getDisplay(), mobileIcon));
-
-		this.lblRefVal = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lblRefVal).left(50, 10).right(100, -20).top(30, -10);
-
-		this.lblFPLabel = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lblFPLabel).left(25, 10).top(lblRefValLabel, 10);
-		this.lblFPLabel.setAlignment(SWT.LEFT);
-
-		this.lnk_sig_data = new Link(containerComposite, SWT.NATIVE | SWT.RESIZE);
-		SWTUtils.anchor(lnk_sig_data).right(100, -20).top(0, 20);
-		this.lnk_sig_data.setEnabled(true);
-		SWTUtils.addSelectionListener(lnk_sig_data, (e) -> { SWTUtils.openURL(this.signatureDataURI); });
-
-		this.btn_cancel = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btn_cancel).right(100, -20).bottom(100, -20);
-		SWTUtils.addSelectionListener(btn_cancel, () -> { this.userCancelClicked = true; });
-
-		this.btn_sms = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btn_sms).right(btn_cancel, -20).bottom(100, -20);
-		SWTUtils.addSelectionListener(btn_sms, () -> { this.userSMSClicked = true; });
-
-		this.btn_fido2 = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btn_fido2).right(btn_sms, -20).bottom(100, -20);
-		SWTUtils.addSelectionListener(btn_fido2, () -> { this.userFido2Clicked = true; });
-		this.btn_fido2.setVisible(WebAuthN.isAvailable());
-
-		this.lblError = new Label(containerComposite, SWT.WRAP | SWT.NATIVE);
-		SWTUtils.anchor(lblError).right(btn_sms, -10).bottom(100, -20);
-
-		reloadResources();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(lblRefValLabel, "tanEnter.ReferenceValue");
-		SWTUtils.setLocalizedText(lblFPLabel, "tanEnter.FP");
-		SWTUtils.setLocalizedText(lnk_sig_data, "mobileBKU.show");
-		SWTUtils.setLocalizedToolTipText(lnk_sig_data, "mobileBKU.show_tooltip");
-		SWTUtils.setLocalizedText(btn_cancel, "common.Cancel");
-		SWTUtils.setLocalizedText(btn_sms, "tanEnter.SMS");
-		SWTUtils.setLocalizedText(btn_fido2, "tanEnter.FIDO2");
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUQRComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUQRComposite.java
deleted file mode 100644
index 135bb775..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/MobileBKUQRComposite.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites.mobilebku;
-
-// Imports
-import java.io.ByteArrayInputStream;
-import java.net.URI;
-import java.util.Objects;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.SWTException;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.composites.StateComposite;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.states.State;
-import at.asit.webauthn.WebAuthN;
-
-/**
- * Composite for displaying the QR code for the mobile BKU
- */
-public class MobileBKUQRComposite extends StateComposite {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(MobileBKUQRComposite.class);
-
-	private Label lblQR;
-
-	private boolean userCancelClicked = false;
-	private boolean userSMSClicked = false;
-	private boolean userFIDO2Clicked = false;
-	private boolean pollingDone = false;
-
-	private Label lblRefVal;
-
-	private String refVal;
-
-	private ImageData currentQRImage;
-
-	private URI signatureDataURI;
-
-	private Label lblError;
-	private Label lblRefValLabel;
-	private Label lblQRLabel;
-
-	private Button btn_fido2;
-	private Button btn_sms;
-	private Button btn_cancel;
-
-	private Link lnk_sig_data;
-
-	public void signalPollingDone() { this.pollingDone = true; getDisplay().wake(); }
-	public boolean isDone() { return (this.userCancelClicked || this.userSMSClicked || this.userFIDO2Clicked || this.pollingDone); }
-	public boolean wasCancelClicked() { return this.userCancelClicked; }
-	public boolean wasSMSClicked() { return this.userSMSClicked; }
-	public boolean wasFIDO2Clicked() { return this.userFIDO2Clicked; }
-	public void reset() { this.userCancelClicked = this.userSMSClicked = this.userFIDO2Clicked = this.pollingDone = false; }
-
-	/**
-	 * Set an error message
-	 * @param errorMessage the error message
-	 */
-	public void setErrorMessage(String errorMessage) {
-		if (errorMessage == null)
-			this.lblError.setText("");
-		else
-			this.lblError.setText(
-					Messages.getString("error.Title") + ": " + errorMessage);
-	}
-
-	public String getRefVal() { return this.refVal; }
-	public void setRefVal(@CheckForNull String refVal) {
-		this.refVal = (refVal != null) ? refVal.trim() : null;
-		this.lblRefVal.setText(Objects.requireNonNullElse(this.refVal, ""));
-	}
-
-	private void updateQRImage() {
-		if (this.currentQRImage == null)
-			return;
-
-		Point availableSize = this.lblQR.getSize();
-		int targetSize = Math.min(availableSize.x, availableSize.y);
-		if (targetSize <= 0)
-			return;
-		
-		this.lblQR.setImage(new Image(this.lblQR.getDisplay(), this.currentQRImage.scaledTo(targetSize, targetSize)));
-	}
-
-	/**
-	 * @param qrcode
-	 *            the qrcode to set
-	 */
-	public void setQR(byte[] qrcode) {
-		if (qrcode == null) {
-			setErrorMessage(Messages.getString("error.FailedToLoadQRCode"));
-			return;
-		}
-		try {
-			this.currentQRImage = new ImageData(new ByteArrayInputStream(qrcode));
-		} catch (SWTException e) {
-			log.warn("Failed to load QR code", e);
-			setErrorMessage(Messages.getString("error.FailedToLoadQRCode"));
-			return;
-		}
-		updateQRImage();
-	}
-
-	public void setSMSEnabled(boolean state) {
-		this.btn_sms.setEnabled(state);
-	}
-
-	public void setFIDO2Enabled(boolean state) {
-		this.btn_fido2.setEnabled(state);
-	}
-
-	public void setSignatureDataURI(@Nullable URI uri) {
-		this.signatureDataURI = uri;
-		this.lnk_sig_data.setVisible(uri != null);
-	}
-
-	/**
-	 * Create the composite.
-	 *
-	 * @param parent
-	 * @param style
-	 * @param state
-	 */
-	public MobileBKUQRComposite(Composite parent, int style, State state) {
-		super(parent, style, state);
-		setLayout(new FormLayout());
-
-		final Composite containerComposite = new Composite(this, SWT.NATIVE);
-		SWTUtils.anchor(containerComposite).top(50, -140).bottom(50, 140).left(50, -200).right(50, 200);
-		containerComposite.addPaintListener(new PaintListener() {
-			@Override
-			public void paintControl(PaintEvent e) {
-				Rectangle clientArea = containerComposite.getClientArea();
-
-				// e.gc.setForeground();
-				e.gc.setForeground(Constants.MAINBAR_ACTIVE_BACK_DARK);
-				e.gc.setLineWidth(3);
-				e.gc.setLineStyle(SWT.LINE_SOLID);
-				e.gc.drawRoundRectangle(clientArea.x, clientArea.y,
-						clientArea.width - 2, clientArea.height - 2, 10, 10);
-			}
-		});
-		containerComposite.setLayout(new FormLayout());
-
-		this.lblRefValLabel = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lblRefValLabel).right(50, -10).top(30, -10);
-		this.lblRefValLabel.setAlignment(SWT.RIGHT);
-
-		ImageData mobileIcon = new ImageData(this.getClass().getResourceAsStream(Constants.RES_IMG_MOBILE));
-		Label lbl_image = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lbl_image).top(50, -1 * (mobileIcon.width / 2)).bottom(50, mobileIcon.width / 2).left(0, 10).width(mobileIcon.width);
-		lbl_image.setImage(new Image(getDisplay(), mobileIcon));
-
-		this.lblRefVal = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lblRefVal).left(50, 10).right(100, -20).top(30, -10);
-
-		this.lblQRLabel = new Label(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(lblQRLabel).right(50, -10).top(lblRefValLabel, 10);
-		this.lblQRLabel.setAlignment(SWT.RIGHT);
-
-		this.lblQR = new Label(containerComposite, SWT.NATIVE);
-		this.lblQR.addListener(SWT.Resize, (e) -> { updateQRImage(); });
-
-		this.lnk_sig_data = new Link(containerComposite, SWT.NATIVE | SWT.RESIZE);
-		SWTUtils.anchor(lnk_sig_data).right(100, -20).top(0, 20);
-		SWTUtils.addSelectionListener(lnk_sig_data, (e) -> { SWTUtils.openURL(this.signatureDataURI); });
-
-		this.btn_cancel = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btn_cancel).right(100, -20).bottom(100, -5);
-		SWTUtils.addSelectionListener(btn_cancel, (e) -> { this.userCancelClicked = true; });
-
-		this.btn_sms = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btn_sms).right(btn_cancel, -20).bottom(100, -5);
-		SWTUtils.addSelectionListener(btn_sms, (e) -> { this.userSMSClicked = true; });
-
-		this.btn_fido2 = new Button(containerComposite, SWT.NATIVE);
-		SWTUtils.anchor(btn_fido2).right(btn_sms, -20).bottom(100, -5);
-		SWTUtils.addSelectionListener(btn_fido2, (e) -> { this.userFIDO2Clicked = true; });
-		this.btn_fido2.setVisible(WebAuthN.isAvailable());
-
-		SWTUtils.anchor(lblQR).left(50, 10).right(100, -20).top(lblRefVal, 10).bottom(btn_sms, -10);
-
-		this.lblError = new Label(containerComposite, SWT.WRAP | SWT.NATIVE);
-		SWTUtils.anchor(lblError).right(btn_sms, -10).bottom(100, -20);
-
-		reloadResources();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(lblRefValLabel, "tanEnter.ReferenceValue");
-		SWTUtils.setLocalizedText(lblQRLabel, "tanEnter.QR");
-		SWTUtils.setLocalizedText(lnk_sig_data, "mobileBKU.show");
-		SWTUtils.setLocalizedToolTipText(lnk_sig_data, "mobileBKU.show_tooltip");
-		SWTUtils.setLocalizedText(btn_cancel, "common.Cancel");
-		SWTUtils.setLocalizedText(btn_sms, "tanEnter.SMS");
-		SWTUtils.setLocalizedText(btn_fido2, "tanEnter.FIDO2");
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/WaitingForAppComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/WaitingForAppComposite.java
deleted file mode 100644
index 24529452..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/mobilebku/WaitingForAppComposite.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.composites.mobilebku;
-
-
-// Imports
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.ProgressBar;
-
-import at.asit.pdfover.gui.composites.StateComposite;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.gui.workflow.states.State;
-import at.asit.webauthn.WebAuthN;
-
-import org.eclipse.swt.widgets.Button;
-
-/**
- *
- */
-public class WaitingForAppComposite extends StateComposite {
-	private Label lbl_description;
-	private Button btn_sms;
-	private Button btn_cancel;
-	private Button btn_fido2;
-	private boolean userSMSClicked = false;
-	private boolean userCancelClicked = false;
-	private boolean userFIDO2Clicked = false;
-	private boolean pollingDone = false;
-
-	public void signalPollingDone() { this.pollingDone = true; getDisplay().wake(); }
-	public boolean isDone() { return (this.userCancelClicked || this.userSMSClicked || this.userFIDO2Clicked || this.pollingDone); }
-	public boolean wasCancelClicked() { return this.userCancelClicked; }
-	public boolean wasSMSClicked() { return this.userSMSClicked; }
-	public boolean wasFIDO2Clicked() { return this.userFIDO2Clicked; }
-	public void reset() { this.userCancelClicked = this.userSMSClicked = this.userFIDO2Clicked = this.pollingDone = false; }
-
-	public void setSMSEnabled(boolean state) {
-		this.btn_sms.setEnabled(state);
-	}
-
-	public void setFIDO2Enabled(boolean state) {
-		this.btn_fido2.setEnabled(state);
-	}
-
-	/**
-	 * Create the composite.
-	 * @param parent
-	 * @param style
-	 * @param state
-	 */
-	public WaitingForAppComposite(Composite parent, int style, State state) {
-		super(parent, style, state);
-		setLayout(new FormLayout());
-
-		this.lbl_description = new Label(this, SWT.NATIVE);
-		SWTUtils.anchor(lbl_description).bottom(50, -1).left(0, 10).right(100, -10);
-		this.lbl_description.setAlignment(SWT.CENTER);
-		SWTUtils.setLocalizedText(lbl_description, "waiting_for_app.message");
-
-		ProgressBar progressBar = new ProgressBar(this, SWT.HORIZONTAL | SWT.INDETERMINATE);
-		SWTUtils.anchor(progressBar).top(50, 10).bottom(50, 40).left(50,-100).right(50,100);
-
-		this.btn_sms = new Button(this, SWT.NONE);
-		SWTUtils.anchor(btn_sms).top(progressBar, 24).right(progressBar, 0, SWT.RIGHT);
-		SWTUtils.addSelectionListener(btn_sms, (e) -> { this.userSMSClicked = true; });
-
-		this.btn_cancel = new Button(this, SWT.NONE);
-		SWTUtils.anchor(btn_cancel).top(btn_sms, 0, SWT.TOP).right(btn_sms, -6);
-		SWTUtils.addSelectionListener(btn_cancel, (e) -> { this.userCancelClicked = true; });
-
-		this.btn_fido2 = new Button(this, SWT.NONE);
-		SWTUtils.anchor(btn_fido2).top(btn_cancel, 0, SWT.TOP).right(btn_cancel, -6);
-		SWTUtils.addSelectionListener(btn_fido2, (e) -> { this.userFIDO2Clicked = true; });
-		this.btn_fido2.setVisible(WebAuthN.isAvailable());
-
-		reloadResources();
-
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.composites.StateComposite#reloadResources()
-	 */
-	@Override
-	public void reloadResources() {
-		SWTUtils.setLocalizedText(lbl_description, "waiting_for_app.message");
-		SWTUtils.setLocalizedText(btn_sms, "tanEnter.SMS");
-		SWTUtils.setLocalizedText(btn_fido2, "tanEnter.FIDO2");
-		SWTUtils.setLocalizedText(btn_cancel, "common.Cancel");
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ClickableCanvas.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ClickableCanvas.java
deleted file mode 100644
index 0f3f1642..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ClickableCanvas.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.controls;
-
-// Imports
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Cursor;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Canvas;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-
-/**
- *
- */
-public class ClickableCanvas extends Canvas {
-
-	private Image image = null;
-
-	/**
-	 * @param parent
-	 * @param style
-	 */
-	public ClickableCanvas(Composite parent, int style) {
-		super(parent, style);
-
-		this.addPaintListener(new PaintListener() {
-
-			@Override
-			public void paintControl(PaintEvent e) {
-				ClickableCanvas.this.paintControl(e);
-			}
-		});
-
-		final Cursor hand = new Cursor(this.getDisplay(), SWT.CURSOR_HAND);
-
-		this.addListener(SWT.Resize, (Event event) -> {
-			ClickableCanvas.this.redraw();
-		});
-
-		this.setCursor(hand);
-
-	}
-
-	/**
-	 * Gets the image
-	 *
-	 * @return the image
-	 */
-	public Image getImage() {
-		return this.image;
-	}
-
-	/**
-	 * Sets the Image
-	 *
-	 * @param image
-	 *            the imgage to set
-	 */
-	public void setImage(Image image) {
-		this.image = image;
-	}
-
-	/**
-	 * Main painting method
-	 *
-	 * @param e
-	 */
-	void paintControl(PaintEvent e) {
-		this.paintText(e);
-	}
-
-	/**
-	 * Paint the text or image on the button
-	 *
-	 * @param e
-	 */
-	protected void paintText(PaintEvent e) {
-		Point size = this.getSize();
-		int width = size.x;
-
-		// e.gc.fillGradientRectangle(0, 1, width, height / 4, true);
-
-		if (this.image != null) {
-
-			//log.debug("Width: " + width + " Height: " + height);
-
-			int w = 0;
-			Image tmp = null;
-			if(this.image.getImageData().width < width) {
-				tmp = new Image(getDisplay(), this.image.getImageData());
-				w = (width - this.image.getImageData().width) / 2;
-			} else if(this.image.getImageData().width > width) {
-				tmp = new Image(getDisplay(), this.image.getImageData().scaledTo(width, width));
-			} else {
-				tmp = new Image(getDisplay(), this.image.getImageData());
-			}
-
-			e.gc.drawImage(tmp, w, w);
-		}
-
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/Dialog.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/Dialog.java
deleted file mode 100644
index de3fb157..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/Dialog.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.controls;
-
-// Imports
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * A Message dialog
- */
-public class Dialog {
-
-	private MessageBox box;
-
-	/**
-	 * Message box buttons
-	 */
-	public enum BUTTONS {
-		/** Display only ok button */
-		OK,
-		/** Display buttons ok and cancel */
-		OK_CANCEL,
-		/** Display retry and cancel buttons */
-		RETRY_CANCEL,
-		/** Display abort, retry and ignore buttons */
-		ABORT_RETRY_IGNORE,
-		/** Display yes and no buttons */
-		YES_NO
-	};
-
-	/**
-	 * Message box icon
-	 */
-	public enum ICON {
-		/** Error icon */
-		ERROR,
-		/** Information icon */
-		INFORMATION,
-		/** Question icon */
-		QUESTION,
-		/** Warning icon */
-		WARNING,
-		/** Working icon */
-		WORKING
-	};
-
-	/**
-	 * @param parent The parent shell
-	 * @param title The dialog title
-	 * @param message The dialog message
-	 * @param button The BUTTONS to be shown
-	 * @param icon The ICON to be displayed
-	 */
-	public Dialog(Shell parent, String title, String message, BUTTONS button, ICON icon) {
-		this.initialize(parent, title, message, button, icon);
-	}
-
-	private void initialize(Shell parent, String title, String message, BUTTONS button, ICON icon) {
-		int boxstyle = 0;
-		switch (icon) {
-			case ERROR:
-				boxstyle |= SWT.ICON_ERROR;
-				break;
-			case INFORMATION:
-				boxstyle |= SWT.ICON_INFORMATION;
-				break;
-			case QUESTION:
-				boxstyle |= SWT.ICON_QUESTION;
-				break;
-			case WARNING:
-				boxstyle |= SWT.ICON_WARNING;
-				break;
-			case WORKING:
-				boxstyle |= SWT.ICON_WORKING;
-				break;
-		}
-
-		switch(button) {
-			case OK:
-				boxstyle |= SWT.OK;
-				break;
-			case OK_CANCEL:
-				boxstyle |= SWT.OK | SWT.CANCEL;
-				break;
-			case RETRY_CANCEL:
-				boxstyle |= SWT.RETRY | SWT.CANCEL;
-				break;
-			case ABORT_RETRY_IGNORE:
-				boxstyle |= SWT.RETRY | SWT.ABORT | SWT.IGNORE;
-				break;
-			case YES_NO:
-				boxstyle |= SWT.YES | SWT.NO;
-		}
-
-		this.box = new MessageBox(parent, boxstyle);
-		this.box.setMessage(message);
-		this.box.setText(title);
-	}
-
-	/**
-	 * Open error dialog
-	 *
-	 * @return SWT.OK | SWT.IGNORE | SWT.ABORT | SWT.RETRY | SWT.CANCEL
-	 */
-	public int open() {
-		return this.box.open();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorDialog.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorDialog.java
deleted file mode 100644
index f5b5bf9b..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorDialog.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.controls;
-
-// Imports
-import org.eclipse.swt.widgets.Shell;
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- * An error dialog
- */
-public class ErrorDialog extends Dialog {
-	/**
-	 * @param parent The parent shell
-	 * @param message The error message
-	 * @param button The buttons to be shown
-	 */
-	public ErrorDialog(Shell parent, String message, BUTTONS button) {
-		super(parent, Messages.getString("error.Title"),
-				message, button, ICON.ERROR);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorMarker.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorMarker.java
deleted file mode 100644
index bd99b887..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorMarker.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.controls;
-
-// Imports
-import java.io.InputStream;
-
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-
-/**
- *
- */
-public class ErrorMarker extends Label {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	@SuppressWarnings("unused")
-	private static final Logger log = LoggerFactory.getLogger(ErrorMarker.class);
-
-	Image errorImg;
-
-	/**
-	 * Draw an error marker for a faulty entry
-	 * @param parent the parent composite
-	 * @param style the SWT style
-	 * @param message a message describing the error (can be set later through setToolTipText)
-	 */
-	public ErrorMarker(Composite parent, int style,
-			String message) {
-		super(parent, style);
-
-		InputStream stream = this.getClass().getResourceAsStream(Constants.RES_IMG_ERROR);
-
-		this.errorImg = new Image(getDisplay(), new ImageData(stream));
-
-		this.addPaintListener(new PaintListener() {
-			final Rectangle imgSize = ErrorMarker.this.errorImg.getBounds();
-
-			@Override
-			public void paintControl(PaintEvent e) {
-				Rectangle dstSize = ErrorMarker.this.getBounds();
-				e.gc.drawImage(ErrorMarker.this.errorImg,
-						0, 0, this.imgSize.width, this.imgSize.height,
-						0, 0, dstSize.width, dstSize.height);
-			}
-		});
-
-		setToolTipText(message);
-	}
-
-	@Override
-	protected void checkSubclass() {
-		// Allow subclassing
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/InputDialog.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/InputDialog.java
deleted file mode 100644
index 4845863f..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/InputDialog.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.controls;
-
-// Imports
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-import at.asit.pdfover.gui.utils.SWTUtils;
-
-/**
- *
- */
-public class InputDialog extends org.eclipse.swt.widgets.Dialog {
-	/**
-	 * SLF4J Logger instance
-	 **/
-//	private static final Logger log = LoggerFactory
-//			.getLogger(InputDialog.class);
-
-	private String prompt;
-	String input;
-
-	/**
-	 * SWT flags of the input box
-	 */
-	protected static int TEXT_FLAGS = SWT.BORDER;
-
-	/**
-	 * Create a password input dialog
-	 * @param parent parent
-	 * @param title title
-	 * @param prompt prompt message
-	 */
-	public InputDialog(Shell parent, String title, String prompt) {
-		super(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		setText(title);
-		setMessage(prompt);
-	}
-
-	/**
-	 * Get the prompt message
-	 * @return the prompt message
-	 */
-	public String getPrompt() {
-		return this.prompt;
-	}
-
-	/**
-	 * set the prompt message
-	 * @param message the prompt message
-	 */
-	public void setMessage(String message) {
-		this.prompt = message;
-	}
-
-	/**
-	 * Get the input
-	 * @return the input
-	 */
-	public String getInput() {
-		return this.input;
-	}
-
-	/**
-	 * Get the input
-	 * @param input the input
-	 */
-	public void setInput(String input) {
-		this.input = input;
-	}
-
-	/**
-	 * Open the dialog
-	 * @return the input
-	 */
-	public String open() {
-		Shell parent = getParent();
-		Shell shell = new Shell(parent, getStyle());
-		shell.setText(getText());
-		createContents(shell);
-		shell.pack();
-		shell.open();
-		Display display = parent.getDisplay();
-		Rectangle bounds = parent.getBounds();
-		Rectangle main = shell.getBounds();
-		shell.setLocation(
-				bounds.x + (bounds.width - main.width) / 2,
-				bounds.y + (bounds.height - main.height) / 2);
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch()) {
-				display.sleep();
-			}
-		}
-		return getInput();
-	}
-
-	private void createContents(final Shell shell) {
-		GridLayout layout = new GridLayout(2, false);
-		layout.verticalSpacing = 10;
-		layout.marginLeft = 5;
-		layout.marginRight = 5;
-		layout.marginTop = 5;
-		shell.setLayout(layout);
-		Label label = new Label(shell, SWT.NONE);
-		label.setText(this.prompt);
-		GridData data = new GridData();
-		data.horizontalSpan = 2;
-		label.setLayoutData(data);
-		final Text text = new Text(shell, TEXT_FLAGS);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 2;
-		text.setLayoutData(data);
-		Button ok = new Button(shell, SWT.PUSH);
-		SWTUtils.setLocalizedText(ok, "common.Ok");
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		ok.setLayoutData(data);
-		ok.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent event) {
-				InputDialog.this.input = text.getText();
-				shell.close();
-			}
-		});
-		Button cancel = new Button(shell, SWT.PUSH);
-		SWTUtils.setLocalizedText(cancel, "common.Cancel");
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		cancel.setLayoutData(data);
-		cancel.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent event) {
-				InputDialog.this.input = null;
-				shell.close();
-			}
-		});
-		shell.setDefaultButton(ok);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarButton.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarButton.java
deleted file mode 100644
index 52bdf55c..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarButton.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.controls;
-
-// Imports
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Cursor;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Region;
-import org.eclipse.swt.widgets.Canvas;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-
-import at.asit.pdfover.commons.Constants;
-
-/**
- * Main Bar Button implementation
- */
-public abstract class MainBarButton extends Canvas {
-
-	/**
-	 * If borders are drawn with a gradient effect this sets the size
-	 */
-	public static final int GradientFactor = 5;
-
-	/**
-	 * Number of pixel of the altitude of the triangle representing the arrow within the button shapes
-	 *
-	 * This should be a multiple of 2!
-	 */
-	public static final int SplitFactor = 10;
-
-	/**
-	 * the used text color
-	 */
-	protected Color textColor = null;
-
-	/**
-	 * the text size
-	 */
-	protected int textsize = Constants.TEXT_SIZE_BUTTON;
-
-	private Color inactiveBackground = null;
-	private Color activeBackground1 = null;
-	private Color borderColor = null;
-	private Color activeBackground = null;
-
-	private Color inactiveText = null;
-
-	private String text = "";
-
-	private boolean active = true;
-
-	private Image image = null;
-
-
-	/**
-	 * @param parent
-	 * @param style
-	 */
-	public MainBarButton(Composite parent, int style) {
-		super(parent, style);
-		this.addPaintListener(new PaintListener() {
-
-			@Override
-			public void paintControl(PaintEvent e) {
-				MainBarButton.this.paintControl(e);
-			}
-		});
-
-		final Cursor hand = new Cursor(this.getDisplay(), SWT.CURSOR_HAND);
-
-		this.addListener(SWT.Resize, new Listener() {
-
-			@Override
-			public void handleEvent(Event event) {
-				MainBarButton.this.setRegion(MainBarButton.this
-						.getCustomRegion());
-				MainBarButton.this.redraw();
-			}
-		});
-
-		this.setCursor(hand);
-
-
-		this.inactiveBackground = Constants.MAINBAR_INACTIVE_BACK;
-		this.activeBackground1 = Constants.MAINBAR_ACTIVE_BACK_DARK;
-		this.activeBackground = Constants.MAINBAR_ACTIVE_BACK_LIGHT;
-		//this.textColor = this.getForeground();
-		this.textColor = Constants.MAINBAR_ACTIVE_TEXTCOLOR;
-		//this.borderColor = new Color(getDisplay(), 0xf9, 0xf9, 0xf9);
-		this.borderColor = this.getBackground();
-		this.inactiveText = Constants.MAINBAR_INACTIVE_TEXTCOLOR;
-		this.textsize = Constants.TEXT_SIZE_BUTTON;
-
-	}
-
-	/**
-	 * @param inactiveBackground
-	 *            the inactiveBackground to set
-	 */
-	public void setInactiveBackground(Color inactiveBackground) {
-		this.inactiveBackground = inactiveBackground;
-	}
-
-	/**
-	 * @param activeBackground
-	 *            the activeBackground to set
-	 */
-	public void setActiveBackground(Color activeBackground) {
-		this.activeBackground = activeBackground;
-	}
-
-	/**
-	 * @return the textsize
-	 */
-	public int getTextsize() {
-		return this.textsize;
-	}
-
-	/**
-	 * @param textsize
-	 *            the textsize to set
-	 */
-	public void setTextsize(int textsize) {
-		this.textsize = textsize;
-	}
-
-	/**
-	 * @param textColor
-	 *            the textColor to set
-	 */
-	public void setTextColor(Color textColor) {
-		this.textColor = textColor;
-	}
-
-	/**
-	 * @return the borderColor
-	 */
-	public Color getBorderColor() {
-		return this.borderColor;
-	}
-
-	/**
-	 * @param borderColor
-	 *            the borderColor to set
-	 */
-	public void setBorderColor(Color borderColor) {
-		this.borderColor = borderColor;
-	}
-
-
-	/**
-	 * Gets the image
-	 *
-	 * @return the image
-	 */
-	public Image getImage() {
-		return this.image;
-	}
-
-	/**
-	 * Sets the Image
-	 *
-	 * @param image
-	 *            the imgage to set
-	 */
-	public void setImage(Image image) {
-		this.image = image;
-	}
-
-	/**
-	 * Sets if this button is active
-	 *
-	 * @param active
-	 *            the active state
-	 */
-	public void setActive(boolean active) {
-
-		this.active = active;
-		if (this.active) {
-			this.setBackground(this.activeBackground);
-		} else {
-			this.setBackground(this.inactiveBackground);
-		}
-	}
-
-	/**
-	 * Gets if this button is active
-	 *
-	 * @return the active state
-	 */
-	public boolean getActive() {
-		return this.active;
-	}
-
-	/**
-	 * Gets the button text
-	 *
-	 * @return the text
-	 */
-	public String getText() {
-		return this.text;
-	}
-
-	/**
-	 * Sets the text for the button
-	 *
-	 * @param text
-	 *            the text to set
-	 */
-	public void setText(String text) {
-		this.text = text;
-	}
-
-	/**
-	 * Paint 3D style borders
-	 *
-	 * @param e
-	 */
-	protected void paintBackground(PaintEvent e) {
-		Point size = this.getSize();
-		int height = size.y - 4;
-
-		int width = size.x;
-
-		e.gc.setForeground(this.activeBackground1);
-		e.gc.setBackground(this.activeBackground);
-
-		e.gc.fillGradientRectangle(0, height, width, -1 * height, true);
-
-		//e.gc.setBackground(activeBackground);
-
-		// LEFT
-		// e.gc.fillGradientRectangle(0, 0, factor, height, false);
-
-		// RIGTH
-		// e.gc.fillGradientRectangle(width, 0, -1 * (width / factor), height,
-		// false);
-
-	}
-
-	/**
-	 * Main painting method
-	 *
-	 * @param e
-	 */
-	void paintControl(PaintEvent e) {
-		Color forecurrent = e.gc.getForeground();
-		Color backcurrent = e.gc.getBackground();
-
-		e.gc.setForeground(getBorderColor());
-		if(this.getActive()) {
-			this.paintBackground(e);
-		}
-
-		e.gc.setForeground(getBorderColor());
-
-		this.paintButton(e);
-
-		e.gc.setForeground(forecurrent);
-		e.gc.setBackground(backcurrent);
-
-		this.paintText(e);
-	}
-
-	/**
-	 * paint the inner button
-	 *
-	 * @param e
-	 */
-	protected void paintButton(PaintEvent e) {
-		// could be overwritten by subclasses
-	}
-
-	/**
-	 * Paint the text or image on the button
-	 *
-	 * @param e
-	 */
-	protected void paintText(PaintEvent e) {
-		Point size = this.getSize();
-		int height = size.y;
-
-		int width = size.x;
-
-		// e.gc.fillGradientRectangle(0, 1, width, height / 4, true);
-
-		if (this.image == null) {
-			Color current = e.gc.getForeground();
-
-			if(this.getActive() && this.isEnabled()) {
-				e.gc.setForeground(this.textColor);
-			} else {
-				e.gc.setForeground(this.inactiveText);
-			}
-
-			String font_name = e.gc.getFont().getFontData()[0].getName();
-
-			Font font = new Font(this.getDisplay(), font_name,
-					this.getTextsize(),
-					e.gc.getFont().getFontData()[0].getStyle());
-
-			String text = this.getText();
-			e.gc.setFont(font);
-			size = e.gc.stringExtent(text);
-			int texty = (height - size.y) / 2;
-			int textx = (width - size.x) / 2;
-			textx = this.changeTextPosition(textx);
-			e.gc.drawText(this.getText(), textx, texty, true);
-			font.dispose();
-
-			e.gc.setForeground(current);
-		} else {
-
-			//log.debug("Width: " + width + " Height: " + height);
-
-			int w = 0;
-			Image tmp = null;
-			if(this.image.getImageData().width < width) {
-				tmp = new Image(getDisplay(), this.image.getImageData());
-				w = (width - this.image.getImageData().width) / 2;
-			} else if(this.image.getImageData().width > width) {
-				tmp = new Image(getDisplay(), this.image.getImageData().scaledTo(width, width));
-			} else {
-				tmp = new Image(getDisplay(), this.image.getImageData());
-			}
-
-			e.gc.drawImage(tmp, w, w);
-		}
-
-	}
-
-	/**
-	 * change the text position
-	 *
-	 * @param positionX
-	 *            the position
-	 * @return the new position
-	 */
-	protected int changeTextPosition(int positionX) {
-		return positionX;
-	}
-
-	/**
-	 * Gets the region of the button
-	 *
-	 * @return the button region
-	 */
-	protected abstract Region getCustomRegion();
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarEndButton.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarEndButton.java
deleted file mode 100644
index 1e80aa36..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarEndButton.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.controls;
-
-// Imports
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Region;
-import org.eclipse.swt.widgets.Composite;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *
- */
-public class MainBarEndButton extends MainBarButton {
-	/**
-	 * @param parent
-	 * @param style
-	 */
-	public MainBarEndButton(Composite parent, int style) {
-		super(parent, style);
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	@SuppressWarnings("unused")
-	private static final Logger log = LoggerFactory.getLogger(MainBarEndButton.class);
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.controls.MainBarButton#paintButton(org.eclipse.swt
-	 * .events.PaintEvent)
-	 */
-	@Override
-	protected void paintButton(PaintEvent e) {
-		Point size = this.getSize();
-		int height = size.y - 3;
-
-		int split = 10;
-		int width = size.x - 1;
-
-		e.gc.drawLine(0, 0, width, 0);
-		e.gc.drawLine(width, 0, width, height);
-		e.gc.drawLine(width, height, 0, height);
-		e.gc.drawLine(0, height, 0+split, (height) / 2);
-		e.gc.drawLine(0+split, (height) / 2, 0, 0);
-
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.controls.MainBarButton#getCustomRegion()
-	 */
-	@Override
-	protected Region getCustomRegion() {
-		Point size = this.getSize();
-
-		int height = size.y - 2;
-
-		int split = SplitFactor;
-
-		int width = size.x;
-
-		Region reg = new Region();
-		reg.add(new int[] { 0, 0, width, 0, width, height, 0, height,
-				0 + split, (height) / 2, 0, 0 });
-		return reg;
-	}
-
-	/**
-	 * change the text position
-	 * @param positionX the position
-	 * @return the new position
-	 */
-	@Override
-	protected int changeTextPosition(int positionX) {
-		return positionX + (SplitFactor / 2);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarMiddleButton.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarMiddleButton.java
deleted file mode 100644
index 452f0a45..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarMiddleButton.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.controls;
-
-// Imports
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Region;
-import org.eclipse.swt.widgets.Composite;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *
- */
-public class MainBarMiddleButton extends MainBarButton {
-	/**
-	 * @param parent
-	 * @param style
-	 */
-	public MainBarMiddleButton(Composite parent, int style) {
-		super(parent, style);
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	@SuppressWarnings("unused")
-	private static final Logger log = LoggerFactory.getLogger(MainBarMiddleButton.class);
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.controls.MainBarButton#paintButton(org.eclipse.swt.events.PaintEvent)
-	 */
-	@Override
-	protected void paintButton(PaintEvent e) {
-
-		Point size = this.getSize();
-
-		int height = size.y - 3;
-
-		int split = SplitFactor;
-		int width = size.x - split;
-
-		e.gc.drawLine(0, 0, width, 0);
-		e.gc.drawLine(width, 0, width+split, (height) / 2);
-		e.gc.drawLine(width+split, (height) / 2, width, height);
-		e.gc.drawLine(width, height, 0, height);
-		e.gc.drawLine(0, height, 0+split, (height) / 2);
-		e.gc.drawLine(0+split, (height) / 2, 0, 0);
-
-	}
-
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.controls.MainBarButton#getCustomRegion()
-	 */
-	@Override
-	protected Region getCustomRegion() {
-		Point size = this.getSize();
-
-		int height = size.y - 2;
-
-		int split = SplitFactor;
-
-		int width = size.x - split;
-
-		Region reg = new Region();
-		reg.add(new int[] {
-				0, 0,
-				width, 0,
-				width + split, (height) / 2,
-				width, height,
-				0, height,
-				0+split, (height) / 2,
-				0, 0 });
-
-		return reg;
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarRectangleButton.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarRectangleButton.java
deleted file mode 100644
index 22a73b15..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarRectangleButton.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.controls;
-
-// Imports
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Region;
-import org.eclipse.swt.widgets.Composite;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *
- */
-public class MainBarRectangleButton extends MainBarButton {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	@SuppressWarnings("unused")
-	private static final Logger log = LoggerFactory.getLogger(MainBarRectangleButton.class);
-
-	private Image enabledImg = null;
-	private Image disabledImg = null;
-
-	/**
-	 * @param parent
-	 * @param style
-	 */
-	public MainBarRectangleButton(Composite parent, int style) {
-		super(parent, style);
-		this.setActiveBackground(null);
-		this.setInactiveBackground(null);
-	}
-
-	/**
-	 * Set the image to display while this control is enabled
-	 * @param enabledImg enabled image
-	 */
-	public void setEnabledImage(Image enabledImg) {
-		this.enabledImg = enabledImg;
-		if (getEnabled())
-			setImage(enabledImg);
-	}
-
-	/**
-	 * Set the image to display while this control is disabled
-	 * @param disabledImg disabled image
-	 */
-	public void setDisabledImage(Image disabledImg) {
-		this.disabledImg = disabledImg;
-		if (!getEnabled())
-			setImage(disabledImg);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.controls.MainBarButton#paintButton(org.eclipse.swt
-	 * .events.PaintEvent)
-	 */
-	@Override
-	protected void paintButton(PaintEvent e) {
-
-		Point size = this.getSize();
-
-		int height = size.y - 3;
-
-		int width = size.x;
-
-		e.gc.drawLine(0, 0, width, 0);
-		e.gc.drawLine(width, 0, width, height);
-		e.gc.drawLine(width, height, 0, height);
-		e.gc.drawLine(0, height, 0, 0);
-
-	}
-
-	@Override
-	protected void paintBackground(PaintEvent e) {
-		Point size = this.getSize();
-		int height = size.y - 2;
-
-		int width = size.x;
-
-		int factor = GradientFactor;
-
-		Region left_reg = new Region();
-		left_reg.add(new int[] { 0, 0, factor, factor, factor, height-factor, 0, height, 0, 0 });
-
-		Region right_reg = new Region();
-		right_reg.add(new int[] { width, 0,
-				width - factor, factor,
-				width - factor, height-factor, width, height, width, 0 });
-
-		Region top_reg = new Region();
-		top_reg.add(new int[] {
-				0, 0,
-				factor, factor,
-				width - factor, factor,
-				width, 0,
-				0, 0 });
-
-		Region bottom_reg = new Region();
-		bottom_reg.add(new int[] {
-				0, height,
-				factor, height-factor,
-				width - factor, height-factor,
-				width, height, 0, height });
-
-		e.gc.setClipping(top_reg);
-
-		//TOP
-		 e.gc.fillGradientRectangle(0, 0, width, factor, true);
-
-		 e.gc.setClipping(bottom_reg);
-
-		 //BOTTOM
-		 e.gc.fillGradientRectangle(0, height, width, -1 * (factor),
-		  true);
-
-		 e.gc.setClipping(left_reg);
-
-		// LEFT
-		e.gc.fillGradientRectangle(0, 0, factor, height, false);
-
-
-		e.gc.setClipping(right_reg);
-		// RIGTH
-		e.gc.fillGradientRectangle(width, 0, -1 * factor, height,
-				false);
-
-		e.gc.setClipping((Region)null);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.controls.MainBarButton#getCustomRegion()
-	 */
-	@Override
-	protected Region getCustomRegion() {
-		Point size = this.getSize();
-
-		int height = size.y - 2;
-
-		int width = size.x;
-
-		Region reg = new Region();
-		reg.add(new int[] { 0, 0, width, 0, width, height, 0, height, 0, 0 });
-		return reg;
-	}
-
-	@Override
-	public void setEnabled(boolean enabled) {
-		setImage(enabled ? this.enabledImg : this.disabledImg);
-		super.setEnabled(enabled);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarStartButton.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarStartButton.java
deleted file mode 100644
index ef03fdcb..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/MainBarStartButton.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.controls;
-
-// Imports
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Region;
-import org.eclipse.swt.widgets.Composite;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *
- */
-public class MainBarStartButton extends MainBarButton {
-	/**
-	 * @param parent
-	 * @param style
-	 */
-	public MainBarStartButton(Composite parent, int style) {
-		super(parent, style);
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	@SuppressWarnings("unused")
-	private static final Logger log = LoggerFactory.getLogger(MainBarStartButton.class);
-
-	@Override
-	protected void paintBackground(PaintEvent e) {
-		super.paintBackground(e);
-		/*
-		Point size = this.getSize();
-		int height = size.y - 2;
-
-		int split = SplitFactor;
-		int width = size.x - split;
-
-		int factor = GradientFactor;
-
-		Region left_reg = new Region();
-		left_reg.add(new int[] { 0, 0, factor, factor, factor, height-factor, 0, height, 0, 0 });
-
-		Region right1_reg = new Region();
-		right1_reg.add(new int[] { width, 0,
-				width - factor, factor,
-				width - factor, height-factor, width, height, width, 0 });
-
-		Region top_reg = new Region();
-		top_reg.add(new int[] {
-				0, 0,
-				factor, factor,
-				width - factor, factor,
-				width, 0,
-				0, 0 });
-
-		Region bottom_reg = new Region();
-		bottom_reg.add(new int[] {
-				0, height,
-				factor, height-factor,
-				width - factor, height-factor,
-				width, height, 0, height });
-
-		e.gc.setClipping(top_reg);
-
-		//TOP
-		 e.gc.fillGradientRectangle(0, 0, width, factor, true);
-
-		 e.gc.setClipping(bottom_reg);
-
-		 //BOTTOM
-		 e.gc.fillGradientRectangle(0, height, width, -1 * (factor),
-		  true);
-
-		 e.gc.setClipping(left_reg);
-
-		// LEFT
-		e.gc.fillGradientRectangle(0, 0, factor, height, false);
-
-
-		e.gc.setClipping(right1_reg);
-		// RIGTH
-		e.gc.fillGradientRectangle(width, 0, -1 * factor, height,
-				false);
-
-		e.gc.setClipping((Region)null);*/
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.controls.MainBarButton#paintButton(org.eclipse.swt.events.PaintEvent)
-	 */
-	@Override
-	protected void paintButton(PaintEvent e) {
-
-		Point size = this.getSize();
-
-		int height = size.y - 3;
-
-		int split = SplitFactor;
-		int width = size.x - split;
-
-		e.gc.drawLine(0, 0, width, 0);
-		e.gc.drawLine(width, 0, width + split, (height) / 2);
-		e.gc.drawLine(width + split, (height) / 2, width, height);
-		e.gc.drawLine(width, height, 0, height);
-		e.gc.drawLine(0, height, 0, 0);
-
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.controls.MainBarButton#getRegion()
-	 */
-	@Override
-	protected Region getCustomRegion() {
-		Point size = this.getSize();
-
-		int height = size.y - 2;
-
-		int split = SplitFactor;
-
-		int width = size.x - split;
-
-		Region reg = new Region();
-		reg.add(new int[] { 0, 0, width, 0, width + split,
-				(height) / 2, width, height, 0, height, 0, 0 });
-		return reg;
-	}
-
-
-	/**
-	 * change the text position
-	 * @param positionX the position
-	 * @return the new position
-	 */
-	@Override
-	protected int changeTextPosition(int positionX) {
-		return positionX - (SplitFactor / 2);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/PasswordInputDialog.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/PasswordInputDialog.java
deleted file mode 100644
index 3a15c63a..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/PasswordInputDialog.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.controls;
-
-// Imports
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- *
- */
-public class PasswordInputDialog extends InputDialog {
-
-	/**
-	 * @param parent
-	 * @param title
-	 * @param prompt
-	 */
-	public PasswordInputDialog(Shell parent, String title, String prompt) {
-		super(parent, title, prompt);
-		PasswordInputDialog.TEXT_FLAGS = SWT.BORDER | SWT.PASSWORD;
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/ATrustConnectionException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/ATrustConnectionException.java
deleted file mode 100644
index 1b18c99c..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/ATrustConnectionException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-// Imports
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- *
- */
-public class ATrustConnectionException extends Exception {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = -5826910929587650685L;
-
-	/**
-	 * Constructor
-	 * @param file
-	 */
-	public ATrustConnectionException() {
-		super(Messages.getString("error.ATrustConnection"));
-	}
-
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/CantLoadKeystoreException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/CantLoadKeystoreException.java
deleted file mode 100644
index 6bb72ffa..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/CantLoadKeystoreException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- *
- */
-public class CantLoadKeystoreException extends ResumableException {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 7554121273052104624L;
-
-	/**
-	 * @param resumeIndex The resume Index
-	 * @param cause The original exception
-	 */
-	public CantLoadKeystoreException(Throwable cause, int resumeIndex) {
-		super(Messages.getString("error.KeyStore"), cause, resumeIndex);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InitializationException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InitializationException.java
deleted file mode 100644
index 8f717391..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InitializationException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-/**
- *
- */
-public class InitializationException extends PDFOverGUIException {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 433744698649684034L;
-
-	/**
-	 * @param msg
-	 * @param cause
-	 */
-	public InitializationException(String msg, Throwable cause) {
-		super(msg, cause);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidEmblemFile.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidEmblemFile.java
deleted file mode 100644
index 27295b1d..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidEmblemFile.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-// Imports
-import java.io.File;
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- *
- */
-public class InvalidEmblemFile extends PDFOverGUIException {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = -5826910929131650685L;
-
-	/**
-	 * Constructor
-	 * @param file
-	 */
-	public InvalidEmblemFile(final File file) {
-		super(Messages.formatString("exception.InvalidEmblemFile", file.getAbsolutePath()));
-	}
-
-	/**
-	 * Constructor
-	 * @param file
-	 * @param reason
-	 */
-	public InvalidEmblemFile(final File file, Throwable reason) {
-		super(Messages.formatString("exception.InvalidEmblemFile", file.getAbsolutePath()), reason);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidPasswordException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidPasswordException.java
deleted file mode 100644
index 2067c0fc..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidPasswordException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-/**
- * Base Class for Invalid password exceptions
- */
-public abstract class InvalidPasswordException extends PDFOverGUIException {
-
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 6735754648793405145L;
-
-	/**
-	 * Invalid Password
-	 * @param msg
-	 */
-	public InvalidPasswordException(String msg) {
-		super(msg);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidPortException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidPortException.java
deleted file mode 100644
index 96c09663..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/InvalidPortException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- *
- */
-public class InvalidPortException extends PDFOverGUIException {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = -4809078091773253962L;
-
-
-	/**
-	 * Constructor with an invalid port number
-	 * @param port invalid port number
-	 */
-	public InvalidPortException(int port) {
-		super(Messages.formatString("exception.InvalidPort", Integer.toString(port), 1, 0xffff));
-	}
-
-	/**
-	 * Constructor with an invalid port string
-	 * @param source InvalidNumberFormat exception
-	 * @param portString invalid port string
-	 */
-	public InvalidPortException(String portString, Throwable source) {
-		super(Messages.formatString("exception.InvalidPort", portString, 1, 0xffff), source);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreAliasDoesntExistException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreAliasDoesntExistException.java
deleted file mode 100644
index da1a2fe9..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreAliasDoesntExistException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- *
- */
-public class KeystoreAliasDoesntExistException extends ResumableException {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 2264150118185552023L;
-
-	/**
-	 * @param alias The keystore key alias
-	 * @param resumeIndex The resume Index
-	 */
-	public KeystoreAliasDoesntExistException(final String alias, int resumeIndex) {
-		super(Messages.formatString("error.KeyStoreAliasExist", alias), resumeIndex);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreAliasNoKeyException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreAliasNoKeyException.java
deleted file mode 100644
index 3b1d28cf..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreAliasNoKeyException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- *
- */
-public class KeystoreAliasNoKeyException extends ResumableException {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = -4030764219866181859L;
-
-	/**
-	 * @param alias The keystore key alias
-	 * @param resumeIndex The resume Index
-	 */
-	public KeystoreAliasNoKeyException(final String alias, int resumeIndex) {
-		super(Messages.formatString("error.KeyStoreAliasNoKey", alias), resumeIndex);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreDoesntExistException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreDoesntExistException.java
deleted file mode 100644
index 9cd205d4..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreDoesntExistException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-import java.io.File;
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- *
- */
-public class KeystoreDoesntExistException extends ResumableException {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 8213496549933275086L;
-
-	/**
-	 * @param keystore The keystore file
-	 * @param resumeIndex The resume Index
-	 */
-	public KeystoreDoesntExistException(final File keystore, int resumeIndex) {
-		super(Messages.formatString("error.KeyStoreFileNotExist", keystore.getPath()), resumeIndex);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreKeyPasswordException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreKeyPasswordException.java
deleted file mode 100644
index 907c5577..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreKeyPasswordException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- *
- */
-public class KeystoreKeyPasswordException extends ResumableException {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 7734648200275150410L;
-
-	/**
-	 * @param resumeIndex The resume Index
-	 */
-	public KeystoreKeyPasswordException(int resumeIndex) {
-		super(Messages.getString("error.KeyStoreKeyPass"), resumeIndex);
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/OutputfolderDoesntExistException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/OutputfolderDoesntExistException.java
deleted file mode 100644
index cddaec98..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/OutputfolderDoesntExistException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-import java.io.File;
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- *
- */
-public class OutputfolderDoesntExistException extends ResumableException {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = -1005495921021280599L;
-
-	/**
-	 * @param folder The file
-	 * @param resumeIndex The resume Index
-	 */
-	public OutputfolderDoesntExistException(final File folder, int resumeIndex) {
-		super(Messages.formatString("exception.PathNotExist", folder.getAbsolutePath()), resumeIndex);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/OutputfolderNotADirectoryException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/OutputfolderNotADirectoryException.java
deleted file mode 100644
index 9355ff87..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/OutputfolderNotADirectoryException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-// Imports
-import java.io.File;
-
-
-import at.asit.pdfover.commons.Messages;
-
-/**
- *
- */
-public class OutputfolderNotADirectoryException extends PDFOverGUIException {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = -3270628002264772405L;
-
-	/**
-	 * @param folder The file
-	 */
-	public OutputfolderNotADirectoryException(File folder) {
-		super(Messages.formatString("exception.PathNotDirectory", folder.getAbsolutePath()));
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PDFOverGUIException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PDFOverGUIException.java
deleted file mode 100644
index bdfbe41d..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PDFOverGUIException.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-/**
- * Base class for GUI Exceptions
- */
-public class PDFOverGUIException extends Exception {
-	/**
-	 * Serial Version UID
-	 */
-	private static final long serialVersionUID = -3942861617701033882L;
-
-	/**
-	 * Constructor
-	 */
-	public PDFOverGUIException() {
-	}
-
-	/**
-	 * Constructor
-	 * @param msg Exception message
-	 */
-	public PDFOverGUIException(String msg) {
-		super(msg);
-	}
-
-	/**
-	 * Constructor
-	 * @param cause Exception causing this one
-	 */
-	public PDFOverGUIException(Throwable cause) {
-		super(cause);
-	}
-
-	/**
-	 * Constructor
-	 * @param msg Exception message
-	 * @param cause Exception causing this one
-	 */
-	public PDFOverGUIException(String msg, Throwable cause) {
-		super(msg, cause);
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PasswordTooLongException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PasswordTooLongException.java
deleted file mode 100644
index 6ea2b662..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PasswordTooLongException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-import at.asit.pdfover.commons.Messages;
-
-// Imports
-
-/**
- *
- */
-public class PasswordTooLongException extends InvalidPasswordException {
-
-	/**
-	 * Constructor
-	 */
-	public PasswordTooLongException() {
-		super(Messages.getString("exception.PasswordTooLong"));
-	}
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = -3268343884240608304L;
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PasswordTooShortException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PasswordTooShortException.java
deleted file mode 100644
index ac1eafb0..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/PasswordTooShortException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-import at.asit.pdfover.commons.Messages;
-
-// Imports
-
-/**
- *
- */
-public class PasswordTooShortException extends InvalidPasswordException {
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 3015765967751806169L;
-
-	/**
-	 * Constructor
-	 */
-	public PasswordTooShortException() {
-		super(Messages.getString("exception.PasswordTooShort"));
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/ResumableException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/ResumableException.java
deleted file mode 100644
index 7cec826f..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/ResumableException.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.exceptions;
-
-/**
- *
- */
-public class ResumableException extends PDFOverGUIException {
-
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = -607216270516492225L;
-
-	private int resumeIndex = 0;
-
-	/**
-	 * Create a new resumable exception, thrown by a validator which can be ignored
-	 * @param msg Error message
-	 * @param resumeIndex Validator index to resume from
-	 */
-	public ResumableException(String msg, int resumeIndex) {
-		super(msg);
-		this.resumeIndex = resumeIndex;
-	}
-
-	/**
-	 * Create a new resumable exception, thrown by a validator which can be ignored
-	 * @param msg Error message
-	 * @param cause Exception causing this one
-	 * @param resumeIndex Validator index to resume from
-	 */
-	public ResumableException(String msg, Throwable cause, int resumeIndex) {
-		super(msg, cause);
-		this.resumeIndex = resumeIndex;
-	}
-
-	/**
-	 * Return the validator index to resume from
-	 * @return the resumeIndex
-	 */
-	public int getResumeIndex() {
-		return this.resumeIndex;
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/keystore/KeystoreUtils.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/keystore/KeystoreUtils.java
deleted file mode 100644
index 8b7bb59c..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/keystore/KeystoreUtils.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package at.asit.pdfover.gui.keystore;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-
-public class KeystoreUtils {
-    public static KeyStore tryLoadKeystore(File location, String storeType, String storePass) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException {
-		KeyStore ks = KeyStore.getInstance(storeType);
-		FileInputStream fis = new FileInputStream(location);
-        try
-        {
-		    ks.load(fis, storePass.toCharArray());
-        } catch (IOException e) {
-            UnrecoverableKeyException keyCause = (UnrecoverableKeyException)e.getCause();
-            if (keyCause != null)
-                throw keyCause;
-            else
-                throw e;
-        }
-        return ks;
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/osx/CocoaUIEnhancer.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/osx/CocoaUIEnhancer.java
deleted file mode 100644
index 60e39aac..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/osx/CocoaUIEnhancer.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * Copyright 2014 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-
-package at.asit.pdfover.gui.osx;
-
-import java.lang.reflect.Method;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.internal.C;
-import org.eclipse.swt.internal.Callback;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Listener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-
-/**
- * Provide a hook to connecting the Preferences, About and Quit menu items of
- * the Mac OS X Application menu when using the SWT Cocoa bindings.
- * <p>
- * This code does not require the Cocoa SWT JAR in order to be compiled as it
- * uses reflection to access the Cocoa specific API methods. Use SWT Listeners
- * instead in order to use this class in SWT only applications.
- *
- * </p>
- * <p>
- * This code was influenced by the <a
- * href="http://www.transparentech.com/opensource/cocoauienhancer"
- * >CocoaUIEnhancer - Connect the About, Preferences and Quit menus in Mac OS X
- * Cocoa SWT and JFace applications</a>.
- * </p>
- * <p>
- * This class works with both the 32-bit and 64-bit versions of the SWT Cocoa
- * bindings.
- * <p>
- * <p>
- * This class is released under the Eclipse Public License (<a
- * href="http://www.eclipse.org/legal/epl-v10.html">EPL</a>).
- */
-public class CocoaUIEnhancer {
-	static final Logger log = LoggerFactory.getLogger(CocoaUIEnhancer.class);
-
-	private static final long kAboutMenuItem = 0;
-	private static final long kPreferencesMenuItem = 2;
-	// private static final long kServicesMenuItem = 4;
-	private static final long kHideApplicationMenuItem = 6;
-	private static final long kQuitMenuItem = 10;
-
-	static long sel_toolbarButtonClicked_;
-	static long sel_preferencesMenuItemSelected_;
-	static long sel_aboutMenuItemSelected_;
-	static long sel_hideApplicationMenuItemSelected_;
-
-	static Callback proc3Args;
-
-	/**
-	 * Class invoked via the Callback object to run the about and preferences
-	 * actions.
-	 */
-	private static class MenuHookObject {
-
-		final Listener about;
-		final Listener pref;
-
-		public MenuHookObject(final Listener aboutListener,
-				final Listener preferencesListener) {
-			this.about = aboutListener;
-			this.pref = preferencesListener;
-		}
-
-		/**
-		 * Will be called on 32bit SWT.
-		 * @param id
-		 * @param sel
-		 * @param arg0
-		 * @return x
-		 */
-		@SuppressWarnings("unused")
-		public int actionProc(final int id, final int sel, final int arg0) {
-			return (int) this.actionProc((long) id, (long) sel, (long) arg0);
-		}
-
-		/**
-		 * Will be called on 64bit SWT.
-		 * @param id
-		 * @param sel
-		 * @param arg0
-		 * @return x
-		 */
-		public long actionProc(final long id, final long sel, final long arg0) {
-			if (sel == sel_aboutMenuItemSelected_) {
-				if (log.isDebugEnabled()) {
-					log.debug("[MenuHookObject - actionProc] : About");
-					this.about.handleEvent(null);
-				}
-			} else if (sel == sel_preferencesMenuItemSelected_) {
-				if (log.isDebugEnabled()) {
-					log.debug("[MenuHookObject - actionProc] : Preferences");
-				}
-				this.pref.handleEvent(null);
-
-			} else {
-				if (log.isDebugEnabled()) {
-					log.debug("[MenuHookObject - actionProc] : Unknow selection!");
-				}
-			}
-			// Return value is not used.
-			return 99;
-		}
-
-		// Getters and setters
-		@SuppressWarnings("unused")
-		public Listener getAbout() {
-			return this.about;
-		}
-
-		@SuppressWarnings("unused")
-		public Listener getPref() {
-			return this.pref;
-		}
-	}
-
-	/**
-	 * Hook the given Listener to the Mac OS X application Quit menu and the
-	 * IActions to the About and Preferences menus.
-	 *
-	 * @param display
-	 *            The Display to use.
-	 * @param quitListener
-	 *            The listener to invoke when the Quit menu is invoked.
-	 * @param aboutListener
-	 *            The listener to invoke when the About menu is invoked.
-	 * @param preferencesListener
-	 *            The listener to invoke when the Preferences menu is invoked.
-	 */
-	public static void hookApplicationMenu(final Display display,
-			final Listener quitListener, final Listener aboutListener,
-			final Listener preferencesListener) {
-		// This is our callbackObject whose 'actionProc' method will be called
-		// when the About or
-		// Preferences menuItem is invoked.
-		final MenuHookObject target = new MenuHookObject(aboutListener,
-				preferencesListener);
-
-		try {
-			// Initialize the menuItems.
-			initialize(target);
-		} catch (final Exception e) {
-			throw new IllegalStateException(e);
-		}
-
-		// Connect the quit/exit menu.
-		if (!display.isDisposed()) {
-			display.addListener(SWT.Close, quitListener);
-		}
-
-		// Schedule disposal of callback object
-		display.disposeExec(() -> {
-			CocoaUIEnhancer.invoke(proc3Args, "dispose");
-		});
-	}
-
-	private static void initialize(final Object callbackObject) throws Exception {
-
-		final Class<?> osCls = classForName("org.eclipse.swt.internal.cocoa.OS");
-
-		// Register names in objective-c.
-		if (sel_toolbarButtonClicked_ == 0) {
-			// sel_toolbarButtonClicked_ = registerName( osCls, "toolbarButtonClicked:" );
-			sel_preferencesMenuItemSelected_ = registerName(osCls,
-					"preferencesMenuItemSelected:");
-			sel_aboutMenuItemSelected_ = registerName(osCls,
-					"aboutMenuItemSelected:");
-		}
-
-		// Create an SWT Callback object that will invoke the actionProc method
-		// of our internal
-		// callbackObject.
-		proc3Args = new Callback(callbackObject, "actionProc", 3);
-		final Method getAddress = Callback.class.getMethod("getAddress",
-				new Class[0]);
-		Object object = getAddress.invoke(proc3Args, (Object[]) null);
-		final long proc3 = convertToLong(object);
-		if (proc3 == 0) {
-			SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
-		}
-
-		final Class<?> nsmenuCls = classForName("org.eclipse.swt.internal.cocoa.NSMenu");
-		final Class<?> nsmenuitemCls = classForName("org.eclipse.swt.internal.cocoa.NSMenuItem");
-		final Class<?> nsstringCls = classForName("org.eclipse.swt.internal.cocoa.NSString");
-		final Class<?> nsapplicationCls = classForName("org.eclipse.swt.internal.cocoa.NSApplication");
-
-		// Instead of creating a new delegate class in objective-c,
-		// just use the current SWTApplicationDelegate. An instance of this
-		// is a field of the Cocoa Display object and is already the target
-		// for the menuItems. So just get this class and add the new methods
-		// to it.
-		object = invoke(osCls, "objc_lookUpClass",
-				new Object[] { "SWTApplicationDelegate" });
-		final long cls = convertToLong(object);
-
-		// Add the action callbacks for Preferences and About menu items.
-		invoke(osCls, "class_addMethod", new Object[] { wrapPointer(cls),
-				wrapPointer(sel_preferencesMenuItemSelected_),
-				wrapPointer(proc3), "@:@" });
-		invoke(osCls, "class_addMethod", new Object[] { wrapPointer(cls),
-				wrapPointer(sel_aboutMenuItemSelected_), wrapPointer(proc3),
-				"@:@" });
-
-		// Get the Mac OS X Application menu.
-		final Object sharedApplication = invoke(nsapplicationCls,
-				"sharedApplication");
-		final Object mainMenu = invoke(sharedApplication, "mainMenu");
-		final Object mainMenuItem = invoke(nsmenuCls, mainMenu, "itemAtIndex",
-				new Object[] { wrapPointer(0) });
-		final Object appMenu = invoke(mainMenuItem, "submenu");
-
-		// Create the About <application-name> menu command
-		final Object aboutMenuItem = invoke(nsmenuCls, appMenu, "itemAtIndex",
-				new Object[] { wrapPointer(kAboutMenuItem) });
-		final Object nsStrAbout = invoke(nsstringCls, "stringWith",
-				new Object[] { Messages.formatString("main.about", Constants.APP_NAME) });
-		invoke(nsmenuitemCls, aboutMenuItem, "setTitle",
-				new Object[] { nsStrAbout });
-		// Rename the quit action.
-		final Object quitMenuItem = invoke(nsmenuCls, appMenu,
-				"itemAtIndex", new Object[] { wrapPointer(kQuitMenuItem) });
-		final Object nsStrQuit = invoke(nsstringCls, "stringWith",
-				new Object[] { Messages.formatString("main.quit", Constants.APP_NAME) });
-		invoke(nsmenuitemCls, quitMenuItem, "setTitle",
-				new Object[] { nsStrQuit });
-
-		// Rename the hide action.
-		final Object hideMenuItem = invoke(nsmenuCls, appMenu,
-				"itemAtIndex",
-				new Object[] { wrapPointer(kHideApplicationMenuItem) });
-		final Object nsStrHide = invoke(nsstringCls, "stringWith",
-				new Object[] { Messages.formatString("main.hide", Constants.APP_NAME) });
-		invoke(nsmenuitemCls, hideMenuItem, "setTitle",
-				new Object[] { nsStrHide });
-
-		// Enable the Preferences menuItem.
-		final Object prefMenuItem = invoke(nsmenuCls, appMenu, "itemAtIndex",
-				new Object[] { wrapPointer(kPreferencesMenuItem) });
-		invoke(nsmenuitemCls, prefMenuItem, "setEnabled", new Object[] { true });
-
-		// Set the action to execute when the About or Preferences menuItem is
-		// invoked.
-
-		// We don't need to set the target here as the current target is the
-		// SWTApplicationDelegate
-		// and we have registerd the new selectors on it. So just set the new
-		// action to invoke the
-		// selector.
-		invoke(nsmenuitemCls, prefMenuItem, "setAction",
-				new Object[] { wrapPointer(sel_preferencesMenuItemSelected_) });
-		invoke(nsmenuitemCls, aboutMenuItem, "setAction",
-				new Object[] { wrapPointer(sel_aboutMenuItemSelected_) });
-	}
-
-	private static long registerName(final Class<?> osCls, final String name)
-			throws IllegalArgumentException, SecurityException {
-		final Object object = invoke(osCls, "sel_registerName",
-				new Object[] { name });
-		return convertToLong(object);
-	}
-
-	private static long convertToLong(final Object object) {
-		if (object instanceof Integer) {
-			final Integer i = (Integer) object;
-			return i.longValue();
-		}
-		if (object instanceof Long) {
-			final Long l = (Long) object;
-			return l.longValue();
-		}
-		return 0;
-	}
-
-	private static Object wrapPointer(final long value) {
-		final Class<?> PTR_CLASS = C.PTR_SIZEOF == 8 ? long.class : int.class;
-		if (PTR_CLASS == long.class) {
-			return Long.valueOf(value);
-		}
-		return Integer.valueOf((int) value);
-	}
-
-	private static Object invoke(final Class<?> clazz, final String methodName,
-			final Object[] args) {
-		return invoke(clazz, null, methodName, args);
-	}
-
-	private static Object invoke(final Class<?> clazz, final Object target,
-			final String methodName, final Object[] args) {
-		try {
-			final Class<?>[] signature = new Class<?>[args.length];
-			for (int i = 0; i < args.length; i++) {
-				final Class<?> thisClass = args[i].getClass();
-				if (thisClass == Integer.class) {
-					signature[i] = int.class;
-				} else if (thisClass == Long.class) {
-					signature[i] = long.class;
-				} else if (thisClass == Byte.class) {
-					signature[i] = byte.class;
-				} else if (thisClass == Boolean.class) {
-					signature[i] = boolean.class;
-				} else {
-					signature[i] = thisClass;
-				}
-			}
-			final Method method = clazz.getMethod(methodName, signature);
-			return method.invoke(target, args);
-		} catch (final Exception e) {
-			throw new IllegalStateException(e);
-		}
-	}
-
-	private static Class<?> classForName(final String classname) {
-		try {
-			final Class<?> cls = Class.forName(classname);
-			return cls;
-		} catch (final ClassNotFoundException e) {
-			throw new IllegalStateException(e);
-		}
-	}
-
-	private static Object invoke(final Class<?> cls, final String methodName) {
-		return invoke(cls, methodName, (Class<?>[]) null, (Object[]) null);
-	}
-
-	private static Object invoke(final Class<?> cls, final String methodName,
-			final Class<?>[] paramTypes, final Object... arguments) {
-		try {
-			final Method m = cls.getDeclaredMethod(methodName, paramTypes);
-			return m.invoke(null, arguments);
-		} catch (final Exception e) {
-			throw new IllegalStateException(e);
-		}
-	}
-
-	static Object invoke(final Object obj, final String methodName) {
-		return invoke(obj, methodName, (Class<?>[]) null, (Object[]) null);
-	}
-
-	private static Object invoke(final Object obj, final String methodName,
-			final Class<?>[] paramTypes, final Object... arguments) {
-		try {
-			final Method m = obj.getClass().getDeclaredMethod(methodName,
-					paramTypes);
-			return m.invoke(obj, arguments);
-		} catch (final Exception e) {
-			throw new IllegalStateException(e);
-		}
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/FileUploadSource.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/FileUploadSource.java
deleted file mode 100644
index b0ff16ea..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/FileUploadSource.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.utils;
-
-// Imports
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.httpclient.methods.multipart.PartSource;
-
-import at.asit.pdfover.signer.DocumentSource;
-
-/**
- *
- */
-public class FileUploadSource implements PartSource {
-
-	private DocumentSource source;
-
-	/**
-	 * Constructor
-	 *
-	 * @param source
-	 *            the source
-	 */
-	public FileUploadSource(DocumentSource source) {
-		this.source = source;
-	}
-
-	@Override
-	public long getLength() {
-		return this.source.getLength();
-	}
-
-	@Override
-	public String getFileName() {
-		return "sign.pdf";
-	}
-
-	@Override
-	public InputStream createInputStream() throws IOException {
-		return this.source.getInputStream();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/LocaleSerializer.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/LocaleSerializer.java
deleted file mode 100644
index 5d90ae6f..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/LocaleSerializer.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.utils;
-
-// Imports
-import java.util.Locale;
-
-import javax.annotation.Nonnull;
-
-import at.asit.pdfover.commons.Constants;
-
-/**
- *
- */
-public class LocaleSerializer {
-	/**
-	 * Parse a locale from a string
-	 * @param localeString the string
-	 * @return the locale
-	 */
-	public static Locale parseFromString(String localeString) {
-
-		if(localeString == null || localeString.isEmpty()) {
-			return null;
-		}
-
-		Locale targetLocale = null;
-		Locale[] locale = Locale.getAvailableLocales();
-		for(int i = 0; i < locale.length; i++) {
-			if(locale[i].toString().equals(localeString)) {
-				targetLocale = locale[i];
-				break;
-			}
-		}
-		return targetLocale;
-	}
-
-	/**
-	 * creates a parsable string for a locale
-	 * @param locale the locale
-	 * @return the parsable string
-	 */
-	public static @Nonnull String getParsableString(Locale locale) {
-		return Constants.ISNOTNULL(locale.toString());
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTUtils.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTUtils.java
deleted file mode 100644
index 22e52467..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTUtils.java
+++ /dev/null
@@ -1,235 +0,0 @@
-package at.asit.pdfover.gui.utils;
-
-import java.awt.Desktop;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.function.Consumer;
-
-import javax.annotation.Nullable;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.program.Program;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Messages;
-
-public final class SWTUtils {
-
-    private static final Logger log = LoggerFactory.getLogger(SWTUtils.class);
-
-    /* oh how i miss C++, and compile-time safety; this would be so much cleaner as a templated function */
-    private static void genericSetText(Object swtObj, String text) {
-    	try {
-    		Method m = swtObj.getClass().getMethod("setText", String.class);
-    		m.invoke(swtObj, text);
-    	} catch (NoSuchMethodException | IllegalAccessException e) {
-    		log.error("Attempted to setLocalizedText on object of type {}, which does not have an accessible setText method", swtObj.getClass().getSimpleName(), e);
-    	} catch (InvocationTargetException e) {
-    		log.error("Failed to setLocalizedText on object of type {}", swtObj.getClass().getSimpleName(), e);
-    	}
-    
-    	try {
-    		// request re-layout if possible, changing the text content will change the bounding box
-    		Method m = swtObj.getClass().getMethod("requestLayout");
-    		m.invoke(swtObj);
-    	} catch (NoSuchMethodException | IllegalAccessException e) {
-    		// do nothing, this may not exist on every control we use
-    	} catch (InvocationTargetException e) {
-    		log.error("Failed to re-layout {}", swtObj.getClass().getSimpleName(), e);
-    	}
-    }
-    public static void setLocalizedText(Object o, String messageKey) { genericSetText(o, Messages.getString(messageKey)); }
-    public static void setLocalizedText(Object o, String formatMessageKey, Object... formatArgs) { genericSetText(o, Messages.formatString(formatMessageKey, formatArgs)); }
-
-	private static void genericSetToolTipText(Object swtObj, String text) {
-		try {
-			Method m = swtObj.getClass().getMethod("setToolTipText", String.class);
-			m.invoke(swtObj, text);
-		} catch (NoSuchMethodException | IllegalAccessException e) {
-			log.error("Attempted to setLocalizedToolTipText on object of type {}, which does not have an accessible setToolTipText method", swtObj.getClass().getSimpleName(), e);
-		} catch (InvocationTargetException e) {
-			log.error("Failed to setLocalizedToolTipText on object of type {}", swtObj.getClass().getSimpleName(), e);
-		}
-	}
-	public static void setLocalizedToolTipText(Object o, String messageKey) { genericSetToolTipText(o, Messages.getString(messageKey));}
-
-    public static void disableEventDefault(Control c, int event) {
-    	c.addListener(event, (Event e) -> { e.doit = false; });
-    }
-
-    public static void scrollPassthrough(Control c) {
-    	c.addListener(SWT.MouseVerticalWheel, (Event e) -> {
-			// disable default handling
-			e.doit = false;
-
-			// find containing ScrolledComposite
-			Composite target = c.getParent();
-			while ((target != null) && !(target instanceof ScrolledComposite))
-				target = target.getParent();
-			
-			if (target == null)
-				return;
-			
-			// scroll containing ScrolledComposite
-			ScrolledComposite sTarget = (ScrolledComposite)target;
-			Point origin = sTarget.getOrigin();
-			origin.y -= (e.count * 10);
-			sTarget.setOrigin(origin);
-		});
-    }
-
-    public static void setFontHeight(Control c, int height) {
-    	FontData[] fD = c.getFont().getFontData();
-    	fD[0].setHeight(height);
-    	Font font = new Font(c.getDisplay(), fD[0]);
-    	c.setFont(font);
-    }
-
-    public static void setFontStyle(Control c, int style) {
-    	FontData[] fD = c.getFont().getFontData();
-    	fD[0].setStyle(style);
-    	Font font = new Font(c.getDisplay(), fD[0]);
-    	c.setFont(font);
-    }
-
-    public static class AnchorSetter {
-    	private final Control c;
-    	private final FormData fd;
-    	private AnchorSetter(Control c, boolean isNew)
-		{
-			this.c = c;
-			if (isNew) {
-				this.fd = new FormData();
-				this.c.setLayoutData(this.fd);
-			} else {
-				Object layoutData = this.c.getLayoutData();
-				try {
-					this.fd = (FormData)layoutData;
-				} catch (ClassCastException e) {
-					log.error("Tried to reanchor() object with layout data of type {} (not FormData)", layoutData.getClass().getSimpleName(), e);
-					throw new RuntimeException("Invalid reanchor() use");
-				}
-			}
-		}
-    
-    	public AnchorSetter height(int h) { fd.height = h; return this; }
-    	public AnchorSetter width(int w) { fd.width = w; return this; }
-    
-    	public AnchorSetter top(FormAttachment a) { fd.top = a; return this; }
-    	public AnchorSetter left(FormAttachment a) { fd.left = a; return this; }
-    	public AnchorSetter right(FormAttachment a) { fd.right = a; return this; }
-    	public AnchorSetter bottom(FormAttachment a) { fd.bottom = a; return this; }
-    
-    	public AnchorSetter top(Control control, int offset, int alignment) { return top(new FormAttachment(control, offset, alignment)); }
-    	public AnchorSetter top(Control control, int offset) { return top(new FormAttachment(control, offset)); }
-    	public AnchorSetter top(Control control) { return top(new FormAttachment(control)); }
-    	public AnchorSetter top(int num, int offset) { return top(new FormAttachment(num, offset)); }
-    	public AnchorSetter top(int num) { return top(new FormAttachment(num)); }
-    
-    	public AnchorSetter left(Control control, int offset, int alignment) { return left(new FormAttachment(control, offset, alignment)); }
-    	public AnchorSetter left(Control control, int offset) { return left(new FormAttachment(control, offset)); }
-    	public AnchorSetter left(Control control) { return left(new FormAttachment(control)); }
-    	public AnchorSetter left(int num, int offset) { return left(new FormAttachment(num, offset)); }
-    	public AnchorSetter left(int num) { return left(new FormAttachment(num)); }
-    
-    	public AnchorSetter right(Control control, int offset, int alignment) { return right(new FormAttachment(control, offset, alignment)); }
-    	public AnchorSetter right(Control control, int offset) { return right(new FormAttachment(control, offset)); }
-    	public AnchorSetter right(Control control) { return right(new FormAttachment(control)); }
-    	public AnchorSetter right(int num, int offset) { return right(new FormAttachment(num, offset)); }
-    	public AnchorSetter right(int num) { return right(new FormAttachment(num)); }
-    
-    	public AnchorSetter bottom(Control control, int offset, int alignment) { return bottom(new FormAttachment(control, offset, alignment)); }
-    	public AnchorSetter bottom(Control control, int offset) { return bottom(new FormAttachment(control, offset)); }
-    	public AnchorSetter bottom(Control control) { return bottom(new FormAttachment(control)); }
-    	public AnchorSetter bottom(int num, int offset) { return bottom(new FormAttachment(num, offset)); }
-    	public AnchorSetter bottom(int num) { return bottom(new FormAttachment(num)); }
-    }
-    public static AnchorSetter anchor(Control c) { return new AnchorSetter(c, true); }
-	public static AnchorSetter reanchor(Control c) { return new AnchorSetter(c, false); }
-    
-	/**
-	 * functional-interface wrapper around swtObj.addSelectionListener
-	 * @param swtObj SWT widget supporting addSelectionListener
-	 * @param callback widgetSelected method
-	 */
-	public static void addSelectionListener(Object swtObj, Consumer<SelectionEvent> callback) {
-		try {
-			Method m = swtObj.getClass().getMethod("addSelectionListener", SelectionListener.class);
-			m.invoke(swtObj, new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { callback.accept(e); } });
-		} catch (NoSuchMethodException | IllegalAccessException e) {
-			log.error("Attempted to pass object of type {} to addSelectionListener; object does not have an accessible addSelectionListener method", swtObj.getClass().getSimpleName(), e);
-		} catch (InvocationTargetException e) {
-			log.error("Failed to add selection listener on object of type {}", swtObj.getClass().getSimpleName(), e);
-		}
-	}
-
-	/**
-	 * @see SWTUtils#addSelectionListener(Object, Consumer)
-	 */
-	public static void addSelectionListener(Object swtObj, Runnable callback) {
-		addSelectionListener(swtObj, (e) -> { callback.run(); });
-	}
-
-	/**
-	 * functional-interface wrapper around swtObj.addMouseListener
-	 * @param swtObj SWT widget supporting addMouseListener
-	 * @param callback mouseDown method
-	 */
-	public static void addMouseDownListener(Object swtObj, Consumer<MouseEvent> callback) {
-		try {
-			Method m = swtObj.getClass().getMethod("addMouseListener", MouseListener.class);
-			m.invoke(swtObj, new MouseAdapter() { @Override public void mouseDown (MouseEvent e) { callback.accept(e); } });
-		} catch (NoSuchMethodException | IllegalAccessException e) {
-			log.error("Attempted to pass object of type {} to addMouseDownListener; object does not have an accessible addMouseListener method", swtObj.getClass().getSimpleName(), e);
-		} catch (InvocationTargetException e) {
-			log.error("Failed to add selection listeer on object of type {}", swtObj.getClass().getSimpleName(), e);
-		}
-	}
-
-	/**
-	 * @see SWTUtils#addMouseDownListener(Object, Consumer)
-	 */
-	public static void addMouseDownListener(Object swtObj, Runnable callback) {
-		addMouseDownListener(swtObj, (e) -> { callback.run(); });
-	}
-
-	public static void openURL(@Nullable URI uri) {
-		try {
-			if (uri == null) return;
-			if (Desktop.isDesktopSupported()) {
-				Desktop.getDesktop().browse(uri);
-			} else {
-				Program.launch(uri.toURL().toExternalForm());
-			}
-		} catch (Exception e) {
-			log.warn("Failed to open URI: {}", uri, e);
-		}
-	}
-
-	public static void openURL(@Nullable String uri) {
-		if (uri == null) return;
-		try {
-			openURL(new URI(uri));
-		} catch (URISyntaxException e) {
-			log.warn("Failed to open URI: {}", uri, e);
-		}
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/UpdateCheckManager.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/UpdateCheckManager.java
deleted file mode 100644
index 168f5b18..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/UpdateCheckManager.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package at.asit.pdfover.gui.utils;
-
-import java.util.ArrayList;
-import java.util.function.Consumer;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.bku.BKUHelper;
-import at.asit.pdfover.gui.controls.Dialog;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.Dialog.ICON;
-
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.methods.GetMethod;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Shell;
-
-public final class UpdateCheckManager {
-    private static final Logger log = LoggerFactory.getLogger(UpdateCheckManager.class);
-    private static Thread updateCheckThread = null;
-    private static boolean needsCheck = false;
-
-    public enum Status { NOT_CHECKED, CHECKING, OUTDATED, UP_TO_DATE, FAILED };
-    private static Status currentStatus = Status.NOT_CHECKED;
-    public static Status getCurrentStatus() {
-        synchronized (UpdateCheckManager.class) {
-            return currentStatus;
-        }
-    }
-
-    private static ArrayList<Consumer<Status>> statusCallbacks = new ArrayList<>();
-    public static void registerStatusCallback(Consumer<Status> f) {
-        synchronized (UpdateCheckManager.class) {
-            statusCallbacks.add(f);
-            f.accept(currentStatus);
-        }
-    }
-
-    private static void setStatus(Status status) {
-        synchronized(UpdateCheckManager.class) {
-            currentStatus = status;
-            for (Consumer<Status> f : statusCallbacks)
-                f.accept(status);
-        }
-    }
-
-    private static String latestVersionNotified = null;
-    private static Status runCheck(Shell shell) {
-        HttpClient client = (HttpClient) BKUHelper.getHttpClient();
-        GetMethod method = new GetMethod(Constants.CURRENT_RELEASE_URL);
-        try {
-            client.executeMethod(method);
-            final String version = method.getResponseBodyAsString().trim();
-            if (!VersionComparator.before(Constants.APP_VERSION, version))
-                return Status.UP_TO_DATE;
-
-            if ((latestVersionNotified == null) || VersionComparator.before(latestVersionNotified, version)) {
-                latestVersionNotified = version;
-                // invoke GUI message in main thread
-                shell.getDisplay().asyncExec(() -> {
-                    Dialog info = new Dialog(shell,
-                            Messages.getString("version_check.UpdateTitle"),
-                            Messages.formatString("version_check.UpdateText", version),
-                            BUTTONS.OK_CANCEL, ICON.INFORMATION);
-
-                    if (info.open() == SWT.OK)
-                        SWTUtils.openURL(Constants.UPDATE_URL);
-                });
-            }
-
-            return Status.OUTDATED;
-        } catch (Exception e) {
-            log.error("Error downloading update information: ", e);
-            return Status.FAILED;
-        }
-    }
-
-    public static void checkNow(Shell shell) {
-        if (Constants.APP_VERSION == null)
-            return;
-
-        synchronized (UpdateCheckManager.class) {
-            if (updateCheckThread != null)
-                return;
-
-            needsCheck = true;
-            updateCheckThread = new Thread(() -> {
-                synchronized(UpdateCheckManager.class) {
-                    setStatus(Status.CHECKING);
-                }
-                while (true) {
-                    Status status = runCheck(shell);
-                    synchronized (UpdateCheckManager.class) {
-                        if (!UpdateCheckManager.needsCheck) {
-                            setStatus(status);
-                            UpdateCheckManager.updateCheckThread = null;
-                            return;
-                        }
-                        UpdateCheckManager.needsCheck = false;
-                        setStatus(Status.CHECKING);
-                    }
-                }
-            });
-            updateCheckThread.start();
-        }
-    }
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/VersionComparator.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/VersionComparator.java
deleted file mode 100644
index 9d06dfb1..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/VersionComparator.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.utils;
-
-// Imports
-import java.util.Comparator;
-
-/**
- *
- */
-public class VersionComparator implements Comparator<String> {
-	/* (non-Javadoc)
-	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
-	 */
-	@Override
-	public int compare(String v1, String v2) {
-		String[] v1Parts = v1.split("\\.|-");
-		String[] v2Parts = v2.split("\\.|-");
-
-		int length = Math.max(v1Parts.length, v2Parts.length);
-		for (int i = 0; i < length; ++i) {
-			int v1Part = 0;
-			try {
-				if (i < v1Parts.length)
-					v1Part = Integer.parseInt(v1Parts[i]);
-			} catch (NumberFormatException e) {
-				if (v1Parts[i].equals("SNAPSHOT"))
-					v1Part = Integer.MAX_VALUE;
-			}
-
-			int v2Part = 0;
-			try {
-				if (i < v2Parts.length)
-					v2Part = Integer.parseInt(v2Parts[i]);
-			} catch (NumberFormatException e) {
-				if (v2Parts[i].equals("SNAPSHOT"))
-					v2Part = Integer.MAX_VALUE;
-			}
-
-			if (v1Part < v2Part)
-				return -1;
-			if (v1Part > v2Part)
-				return 1;
-		}
-		return 0;
-	}
-
-	/**
-	 * Compare two version strings (static version)
-	 * @param v1 version 1
-	 * @param v2 version 2
-	 * @return -1 if v1 &lt; v2, 0 if v1 = v2, 1 if v1 &gt; v2
-	 */
-	public static int compare_s(String v1, String v2) {
-		VersionComparator vc = new VersionComparator();
-		return vc.compare(v1, v2);
-	}
-
-	/**
-	 * Check two version strings for equality
-	 * @param v1 version 1
-	 * @param v2 version 2
-	 * @return v1 == v2
-	 */
-	public static boolean equals(String v1, String v2) {
-		return compare_s(v1, v2) == 0;
-	}
-
-	/**
-	 * Check two version strings for order
-	 * @param v1 version 1
-	 * @param v2 version 2
-	 * @return v1 &lt; v2
-	 */
-	public static boolean before(String v1, String v2) {
-		return compare_s(v1, v2) < 0;
-	}
-
-	/**
-	 * Check two version strings for order
-	 * @param v1 version 1
-	 * @param v2 version 2
-	 * @return v1 &gt; v2
-	 */
-	public static boolean after(String v1, String v2) {
-		return compare_s(v1, v2) > 0;
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/Zipper.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/Zipper.java
deleted file mode 100644
index a25de58a..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/Zipper.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.utils;
-
-// Imports
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URI;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Zipper/unzipper to backup/extract configuration
- */
-public class Zipper {
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(Zipper.class);
-
-	/**
-	 * Compresses the source path to Zip File output stream
-	 * @param sourcePath
-	 * @param os
-	 * @throws IOException
-	 */
-	public static void zip(String sourcePath, OutputStream os) throws IOException {
-		zip(sourcePath, os, false);
-	}
-
-		/**
-	 * Compresses the source path to Zip File output stream
-	 * @param sourcePath
-	 * @param os
-	 * @param doDelete whether to delete content after compression
-	 * @throws IOException
-	 */
-	public static void zip(String sourcePath, OutputStream os, boolean doDelete) throws IOException {
-		ZipOutputStream zos = new ZipOutputStream(os);
-		File dir = new File(sourcePath);
-		zip(dir, dir.toURI(), zos, doDelete);
-		zos.close();
-	}
-
-	private static void zip(File f, URI root, ZipOutputStream zos, boolean doDelete) throws IOException {
-		if (f.isDirectory()) {
-			File[] subDirs = f.listFiles();
-			for (File subDir : subDirs) {
-				zip(subDir, root, zos, doDelete);
-				if (doDelete && !f.toURI().equals(root))
-					subDir.delete();
-			}
-		} else {
-			URI path = root.relativize(f.toURI());
-			ZipEntry entry = new ZipEntry(path.toString());
-			zos.putNextEntry(entry);
-			byte[] buffer = new byte[1024];
-			int len;
-			BufferedInputStream is = new BufferedInputStream(new FileInputStream(f));
-			while ((len = is.read(buffer)) >= 0)
-				zos.write(buffer, 0, len);
-			is.close();
-			zos.closeEntry();
-			if (doDelete)
-				f.delete();
-		}
-	}
-
-	/**
-	 * Extracts Zip File input stream to target path
-	 * @param is
-	 * @param targetPath
-	 * @throws IOException
-	 */
-	public static void unzip(InputStream is, String targetPath) throws IOException {
-		ZipInputStream zis = new ZipInputStream(is);
-		ZipEntry entry;
-		// while there are entries I process them
-		while ((entry = zis.getNextEntry()) != null) {
-			log.debug("entry: " + entry.getName() + ", "  ////
-					+ entry.getSize());
-			// consume all the data from this entry
-
-			if (entry.isDirectory()) {
-				log.debug("Extracting directory: " + entry.getName());
-
-				File nDir = new File(targetPath + File.separator + entry.getName());
-				if(!nDir.exists()) {
-					if(!nDir.mkdir()) {
-						throw new IOException("Failed to create dir: " + entry.getName());
-					}
-				}
-				continue;
-			}
-			byte[] buffer = new byte[1024];
-			int len;
-			BufferedOutputStream out = new BufferedOutputStream(
-					new FileOutputStream(targetPath + File.separator + entry.getName()));
-			while ((len = zis.read(buffer)) >= 0)
-				out.write(buffer, 0, len);
-
-			out.close();
-		}
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/StateMachine.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/StateMachine.java
deleted file mode 100644
index b5df6ff3..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/StateMachine.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow;
-
-//Imports
-import java.lang.reflect.Constructor;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.MainWindow;
-import at.asit.pdfover.gui.composites.StateComposite;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.gui.workflow.states.PrepareConfigurationState;
-import at.asit.pdfover.gui.workflow.states.State;
-
-/**
- * Workflow holds logical state of signing process and updates the current
- * logical state
- */
-public class StateMachine {
-
-	private static final Logger log = LoggerFactory.getLogger(StateMachine.class);
-
-	public final Status status;
-	public final ConfigurationManager configProvider;
-	public final String[] cmdLineArgs;
-
-	/**
-	 * Default constructor
-	 *
-	 * @param cmdLineArgs
-	 */
-	public StateMachine(String[] cmdLineArgs) {
-		this.status = new Status();
-		this.status.setCurrentState(new PrepareConfigurationState(this));
-		this.configProvider = new ConfigurationManager();
-		this.cmdLineArgs = cmdLineArgs;
-	}
-
-	/**
-	 * Sets the workflow state
-	 * This method should be used to let the user jump
-	 * around between states. This Method also resets certain properties defined
-	 * by later states then state
-	 *
-	 * @param state
-	 */
-	public void jumpToState(State state) {
-		this.status.setCurrentState(state);
-		this.invokeUpdate();
-	}
-
-	/**
-	 * Update workflow logic and let state machine do its job...
-	 */
-	public synchronized void update() {
-		State next = null;
-		while (this.status.getCurrentState() != null) {
-			State current = this.status.getCurrentState();
-			try {
-				current.run();
-			} catch (Exception e) {
-				log.error("StateMachine update: ", e);
-				ErrorDialog errorState = new ErrorDialog(this.getMainShell(),
-						Messages.getString("error.Unexpected"), BUTTONS.OK);
-				//errorState.setException(e);
-				//jumpToState(errorState);
-				errorState.open();
-				this.exit();
-			}
-
-			if (this.exit) {
-				// exit request ignore
-				next = null;
-				this.status.setCurrentState(next);
-			} else {
-
-				if (this.mainWindow != null && !this.mainWindow.getShell().isDisposed()) {
-					log.debug("Allowing MainWindow to update its state for " + current);
-					current.updateMainWindowBehavior();
-					this.mainWindow.applyBehavior();
-					this.mainWindow.doLayout();
-				}
-				
-				// TODO: i really want this to be a return value from run()
-				next = current.nextState();
-				if (next == current) {
-					break;
-				}
-
-				if (next == null) {
-					log.info("Next state is null -> exit");
-					this.status.setCurrentState(next);
-					break;
-				}
-
-				log.debug("Changing state from: "
-						+ current + " to "
-						+ next.toString());
-				this.status.setCurrentState(next);
-			}
-		}
-	}
-
-	/**
-	 * Invoke Update in UI (Main) Thread
-	 */
-	public void invokeUpdate() {
-		if (this.display != null) {
-			this.display.asyncExec(() -> {
-				this.update();
-			});
-		}
-	}
-
-	private Display display = null;
-
-	private Shell shell = null;
-
-	private Composite container = null;
-
-	private MainWindow mainWindow = null;
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.workflow.StateMachine#display(org.eclipse.swt.widgets
-	 * .Composite)
-	 */
-	public void display(StateComposite composite) {
-		this.mainWindow.setTopControl(composite);
-	}
-
-	private void createMainWindow() {
-		try {
-
-			this.display = Display.getDefault();
-
-			this.mainWindow = new MainWindow(this);
-			this.mainWindow.open();
-
-			this.shell = this.mainWindow.getShell();
-
-			this.container = this.mainWindow.getContainer();
-
-			this.shell.open();
-			this.shell.layout();
-		} catch (Exception e) {
-			log.warn("Main-Window creation FAILED.", e);
-			this.display = null;
-			this.mainWindow = null;
-			this.shell = null;
-			this.container = null;
-			throw e;
-		}
-	}
-
-	/**
-	 * Gets the Shell for drawing the ui
-	 *
-	 * @return Composite
-	 */
-	public synchronized Composite getComposite() {
-		// Main window will be built on first call
-		// returns SWT Composite container for states to draw their GUI
-
-		if (this.container == null) {
-			this.createMainWindow();
-		}
-
-		return this.container;
-	}
-
-	public <T> T createComposite(Class<T> compositeClass, int style, State state) {
-		T composite = null;
-		try {
-			Constructor<T> constructor = compositeClass.getDeclaredConstructor(
-					Composite.class, int.class, State.class);
-			composite = constructor.newInstance(getComposite(), style, state);
-		} catch (Exception e) {
-			log.error("Could not create Composite for Class "
-					+ compositeClass.getName(), e);
-		}
-		return composite;
-	}
-
-	/**
-	 * Only returns a shell if one was already created ...
-	 *
-	 * @return
-	 */
-	private Shell nonCreatingGetShell() {
-		return this.shell;
-	}
-
-	private boolean exit = false;
-
-	/**
-	 * Exists the Workflow
-	 */
-	public void exit() {
-		this.exit = true;
-		if (this.shell != null) {
-			this.shell.dispose();
-		}
-	}
-
-	/**
-	 * Only returns a shell if one was already created ...
-	 *
-	 * @return
-	 */
-	private Display nonCreatingGetDisplay() {
-		return this.display;
-	}
-
-	/**
-	 * Workflow main entrance point
-	 */
-	public void start() {
-
-		// Call update to start processing ...
-		update();
-
-		// if a user interaction is required we have a shell ...
-		Shell shell = nonCreatingGetShell();
-		Display display = nonCreatingGetDisplay();
-
-		if (this.status.getCurrentState() == null) {
-			if (shell != null) {
-				this.shell.dispose();
-			}
-		}
-
-		if (shell != null && display != null) {
-			while (!shell.isDisposed()) {
-				if (!display.readAndDispatch()) {
-					display.sleep();
-				}
-			}
-			display.dispose();
-		}
-	}
-
-
-	public synchronized Shell getMainShell() {
-		if(this.shell == null) {
-			this.createMainWindow();
-		}
-
-		return this.shell;
-	}
-
-	public void reloadResources() {
-		this.mainWindow.reloadLocalization();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/Status.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/Status.java
deleted file mode 100644
index ba5e5fd5..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/Status.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow;
-
-// Imports
-import java.io.File;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.BKUs;
-import at.asit.pdfover.gui.MainWindowBehavior;
-import at.asit.pdfover.gui.workflow.states.State;
-import at.asit.pdfover.signer.SignResult;
-import at.asit.pdfover.signer.SignaturePosition;
-import at.asit.pdfover.signer.pdfas.PdfAs4SigningState;
-
-public class Status {
-	private static final Logger log = LoggerFactory.getLogger(Status.class);
-
-	public File document = null;
-
-	public SignaturePosition signaturePosition = null;
-
-	public BKUs bku = BKUs.NONE;
-
-	private State currentState = null;
-
-	private State previousState = null;
-
-	public PdfAs4SigningState signingState = null;
-
-	public SignResult signResult = null;
-
-	public final MainWindowBehavior behavior;
-
-	public boolean searchForPlacehoderSignature = false;
-
-	public Status() {
-		this.behavior = new MainWindowBehavior();
-	}
-
-	public State getCurrentState() {
-		return this.currentState;
-	}
-
-	public void setCurrentState(State newState) {
-		log.debug("Changing from " + currentState + " to " + newState);
-
-		if ((previousState != null) && (previousState != currentState) && (previousState != newState))
-		{
-			// Reference to previous state will be lost - perform cleanup
-			log.debug("Cleaning up " + previousState);
-			previousState.cleanUp();
-		}
-
-		this.previousState = currentState;
-		this.currentState = newState;
-	}
-
-	public State getPreviousState() {
-		return this.previousState;
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationDataInMemory.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationDataInMemory.java
deleted file mode 100644
index adf03913..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationDataInMemory.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.config;
-
-// Imports
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.Locale;
-import java.util.Objects;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-import at.asit.pdfover.commons.Profile;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Display;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.BKUs;
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.bku.mobile.MobileBKUValidator;
-import at.asit.pdfover.gui.exceptions.InvalidEmblemFile;
-import at.asit.pdfover.gui.exceptions.InvalidPortException;
-
-import static at.asit.pdfover.commons.Constants.ISNOTNULL;
-
-/**
- * Implementation of the configuration container
- */
-public class ConfigurationDataInMemory {
-	/**
-	 * SLF4J Logger instance
-	 **/
-	@SuppressWarnings("unused")
-	private static final Logger log = LoggerFactory.getLogger(ConfigurationDataInMemory.class);
-
-	/** the emblem size (in mm) for logo only signatures */
-	public double logoOnlyTargetSize = Constants.DEFAULT_LOGO_ONLY_SIZE;
-
-	/** the emblem File */
-	protected String emblemFile = null;
-	public String getEmblemPath() { return this.emblemFile; }
-	public void setEmblem(String emblemFile) throws InvalidEmblemFile {
-		if (emblemFile == null || emblemFile.trim().isEmpty()) {
-			// Ok to set no file ...
-		} else {
-			File imageFile = new File(emblemFile);
-			if (!imageFile.exists()) {
-				throw new InvalidEmblemFile(imageFile,
-						new FileNotFoundException(emblemFile));
-			}
-
-			try {
-				Image img = new Image(Display.getDefault(), new ImageData(
-						emblemFile));
-
-				img.dispose();
-			} catch (Exception ex) {
-				throw new InvalidEmblemFile(imageFile, ex);
-			}
-		}
-
-		this.emblemFile = emblemFile;
-	}
-
-	/** The mobile phone number */
-	protected @CheckForNull String mobileNumber = null;
-	public @CheckForNull String getMobileNumber() { return this.mobileNumber; }
-	public void setMobileNumber(String number) {
-		if(number == null || number.trim().isEmpty()) {
-			this.mobileNumber = null;
-			return;
-		}
-		this.mobileNumber = MobileBKUValidator.normalizeMobileNumber(number);
-	}
-
-	/** The mobile phone password */
-	public @CheckForNull String mobilePassword = null;
-
-	public boolean rememberPassword = false;
-
-	/** Holds the proxy host */
-	public @CheckForNull String proxyHost = null;
-
-	/** Holds the proxy port number */
-	protected int proxyPort = -1;
-	public int getProxyPort() { return this.proxyPort; }
-	public void setProxyPort(int port) throws InvalidPortException {
-		if(port > 0 && port <= 0xFFFF) {
-			this.proxyPort = port;
-			return;
-		}
-		if(port == -1) {
-			this.proxyPort = -1;
-			return;
-		}
-		throw new InvalidPortException(port);
-	}
-
-	/** Holds the proxy username */
-	public @CheckForNull String proxyUser = null;
-
-	/** Holds the proxy password */
-	public @CheckForNull String proxyPass = null;
-
-	/** Holds the default BKU to use */
-	public @Nonnull BKUs defaultBKU = BKUs.NONE;
-
-	/** Holds the output folder */
-	public @CheckForNull String outputFolder = null;
-
-	/** Holds the signatureNote */
-	public @CheckForNull String signatureNote = null;
-
-	/** Holds the locale */
-	public @CheckForNull Locale interfaceLocale = null;
-	
-	/** Holds the signature locale */
-	public @CheckForNull Locale signatureLocale = null;
-
-	/** Holds the PDF/A compatibility setting */
-	public boolean signaturePDFACompat = false;
-
-	/** Holds the default signature position */
-	public boolean autoPositionSignature = false;
-
-	/** Keystore signing options */
-	public enum KeyStorePassStorageType { MEMORY, DISK };
-	public @CheckForNull Boolean keystoreEnabled = null;
-	public @CheckForNull String keystoreFile = null;
-	public @CheckForNull String keystoreType = null;
-	public @CheckForNull String keystoreAlias = null;
-	public @CheckForNull KeyStorePassStorageType keystorePassStorageType = null;
-	public @CheckForNull String keystoreStorePass = null;
-	public @CheckForNull String keystoreKeyPass = null;
-
-	/** Whether to automatically check for updates */
-	public boolean updateCheck = true;
-
-	/** Holds the main window size
-	 * 
-	 * @IMPORTANT this must always be valid and non-null, even if configuration failed to load for whatever reason (it is used by error handlers!)
-	*/
-	public @Nonnull Point mainWindowSize = new Point(Constants.DEFAULT_MAINWINDOW_WIDTH, Constants.DEFAULT_MAINWINDOW_HEIGHT);
-
-	/** Whether to skip the output state */
-	public boolean skipFinish = false;
-
-	/** Whether to use an existing signature marker. */
-	protected boolean useMarker = false;
-	public boolean getUseMarker() { return this.useMarker; }
-	public void setUseMarker(boolean useMarker) {
-		this.useMarker = useMarker;
-		if (useMarker) setUseSignatureFields(false);
-	}
-
-	/** Either QR-Code or signature fields as marker */
-	protected boolean useSignatureFields = false;
-	public boolean getUseSignatureFields() { return this.useSignatureFields; }
-	public void setUseSignatureFields(boolean useFields) {
-		this.useSignatureFields  = useFields;
-		if (useFields) setUseMarker(false);
-	}
-
-	/** describes if the placeholder search is enabled */
-	public boolean enabledPlaceholderUsage = false;
-
-	/**	The Signature Profile */
-	protected @CheckForNull Profile signatureProfile = null;
-	public @Nonnull Profile getSignatureProfile() {
-		return ISNOTNULL(Objects.requireNonNullElse(this.signatureProfile, Profile.SIGNATURBLOCK_SMALL));
-	}
-	public void setSignatureProfile(Profile profile) { this.signatureProfile = profile; }
-
-	public @Nonnull String saveFilePostFix = Constants.DEFAULT_POSTFIX;
-
-	/** whether fido2 authentication should be selected by default */
-	public boolean fido2ByDefault = false;
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationManager.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationManager.java
deleted file mode 100644
index 39071667..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/config/ConfigurationManager.java
+++ /dev/null
@@ -1,919 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.config;
-
-// Imports
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Locale;
-import java.util.Properties;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-import at.asit.pdfover.commons.Profile;
-
-import org.apache.commons.io.FileUtils;
-import org.eclipse.swt.graphics.Point;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.BKUs;
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.exceptions.InvalidEmblemFile;
-import at.asit.pdfover.gui.exceptions.InvalidPortException;
-import at.asit.pdfover.gui.utils.LocaleSerializer;
-import at.asit.pdfover.gui.workflow.config.ConfigurationDataInMemory.KeyStorePassStorageType;
-import at.asit.pdfover.commons.Messages;
-
-import static at.asit.pdfover.commons.Constants.ISNOTNULL;
-
-/**
- * Implementation of the configuration provider and manipulator
- */
-public class ConfigurationManager {
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(ConfigurationManager.class);
-
-	private String configurationFile = Constants.DEFAULT_CONFIG_FILENAME;
-
-	private boolean loaded = false;
-
-	// The persistent configuration read from the config file
-	private ConfigurationDataInMemory configuration;
-
-	// The configuration overlay built from the cmd line args
-	private ConfigurationDataInMemory configurationOverlay;
-
-	// whether the configuration screen should crash on startup (for debugging purposes)
-	public boolean crashOnConfig = false;
-
-	/**
-	 * Constructor
-	 */
-	public ConfigurationManager() {
-		this.configuration = new ConfigurationDataInMemory();
-		this.configurationOverlay = new ConfigurationDataInMemory();
-	}
-
-	static public void factoryResetPersistentConfig() {
-		// tell logback to close all file handles
-		((ch.qos.logback.classic.LoggerContext)LoggerFactory.getILoggerFactory()).stop();
-
-		File configDirectory = new File(Constants.CONFIG_DIRECTORY);
-		File backupDirectory = new File(Constants.CONFIG_BACKUP_DIRECTORY);
-		
-		// delete existing backup, if any
-		FileUtils.deleteQuietly(backupDirectory);
-
-		// attempt 1: try to move the old config directory to a backup location
-		try {
-			FileUtils.moveDirectory(
-				configDirectory,
-				backupDirectory
-			);
-		} catch (Exception e) {
-			System.out.println("Failed move config directory to backup location:");
-			e.printStackTrace();
-
-			// attempt 2: try to simply force delete the config directory
-			try {
-				FileUtils.forceDelete(configDirectory);
-			} catch (Exception e2) {
-				System.out.println("Failed to delete config directory:");
-				e2.printStackTrace();
-
-				// attempt 3: try to schedule the config directory for force deletion on JVM exit
-				try {
-					FileUtils.forceDeleteOnExit(configDirectory);
-				} catch (Exception e3) {
-					System.out.println("Failed to schedule config directory for deletion:");
-					e3.printStackTrace();
-				}
-			}
-		}
-	}
-
-	/* load from disk */
-	public void loadFromDisk() throws IOException {
-		if (loaded)
-			throw new RuntimeException("ConfigProvider double load?");
-
-		Properties diskConfig = new Properties();
-
-		diskConfig.load(new FileInputStream(Constants.CONFIG_DIRECTORY + File.separator + getConfigurationFileName()));
-
-		{ /* for testing of error handlers */
-			String crashProperty = diskConfig.getProperty("CRASH");
-			if ("startup".equalsIgnoreCase(crashProperty))
-				throw new RuntimeException("A robot must obey the orders given it by human beings except where such orders would conflict with the First Law.\n(CRASH=startup is set.)");
-			else if ("config".equalsIgnoreCase(crashProperty))
-				this.crashOnConfig = true;
-			else if (crashProperty != null)
-				log.warn("Unknown value '{}' for CRASH property -- you want 'startup' or 'config'.", crashProperty);
-		}
-
-		setDefaultEmblemPersistent(diskConfig.getProperty(Constants.CFG_EMBLEM));
-		try {
-			String strProp = diskConfig.getProperty(Constants.CFG_LOGO_ONLY_SIZE);
-			if (strProp != null)
-				setLogoOnlyTargetSizePersistent(Double.parseDouble(strProp));
-		} catch (NumberFormatException e) { log.info("Invalid value for CFG_LOGO_ONLY_SIZE ignored.", e); }
-
-		setDefaultMobileNumberPersistent(diskConfig.getProperty(Constants.CFG_MOBILE_NUMBER));
-		setRememberMobilePasswordPersistent(Constants.TRUE.equals(diskConfig.getProperty(Constants.CFG_MOBILE_PASSWORD_REMEMBER)));
-
-		setProxyHostPersistent(diskConfig.getProperty(Constants.CFG_PROXY_HOST));
-		setProxyUserPersistent(diskConfig.getProperty(Constants.CFG_PROXY_USER));
-		setProxyPassPersistent(diskConfig.getProperty(Constants.CFG_PROXY_PASS));
-
-		setDefaultOutputFolderPersistent(diskConfig.getProperty(Constants.CFG_OUTPUT_FOLDER));
-
-		String postFix = diskConfig.getProperty(Constants.CFG_POSTFIX);
-		if (postFix == null)
-			setSaveFilePostFixPersistent(Constants.DEFAULT_POSTFIX);
-		else
-			setSaveFilePostFixPersistent(postFix);
-
-		String localeString = diskConfig.getProperty(Constants.CFG_LOCALE);
-
-		Locale targetLocale = LocaleSerializer.parseFromString(localeString);
-		if (targetLocale != null)
-			setInterfaceLocalePersistent(targetLocale);
-
-		String signatureLocaleString = diskConfig.getProperty(Constants.CFG_SIGNATURE_LOCALE);
-
-		Locale signatureTargetLocale = LocaleSerializer.parseFromString(signatureLocaleString);
-		if (signatureTargetLocale != null)
-			setSignatureLocalePersistent(signatureTargetLocale);
-
-		String useMarker = diskConfig.getProperty(Constants.CFG_USE_MARKER);
-		if (useMarker != null)
-			setUseMarkerPersistent(useMarker.equalsIgnoreCase(Constants.TRUE));
-
-		String useSignatureFields = diskConfig.getProperty(Constants.CFG_USE_SIGNATURE_FIELDS);
-		if (useSignatureFields != null)
-			setUseSignatureFieldsPersistent(useSignatureFields.equalsIgnoreCase(Constants.TRUE));
-
-		String enablePlaceholder = diskConfig.getProperty(Constants.CFG_ENABLE_PLACEHOLDER);
-		if (enablePlaceholder != null)
-			setEnablePlaceholderUsagePersistent(enablePlaceholder.equalsIgnoreCase(Constants.TRUE));
-
-		String signatureProfileName = diskConfig.getProperty(Constants.SIGNATURE_PROFILE);
-		if (signatureProfileName != null)
-			setSignatureProfilePersistent(Profile.getProfile(signatureProfileName));
-
-		if (diskConfig.containsKey(Constants.CFG_SIGNATURE_NOTE))
-			setSignatureNotePersistent(diskConfig.getProperty(Constants.CFG_SIGNATURE_NOTE));
-		else
-			setSignatureNotePersistent(getSignatureProfile().getDefaultSignatureBlockNote(getSignatureLocale()));
-
-		String compat = diskConfig.getProperty(Constants.CFG_SIGNATURE_PDFA_COMPAT);
-		if (compat != null)
-			setSignaturePdfACompatPersistent(compat.equalsIgnoreCase(Constants.TRUE));
-
-		String proxyPortString = diskConfig.getProperty(Constants.CFG_PROXY_PORT);
-		if (proxyPortString != null && !proxyPortString.trim().isEmpty())
-		{
-			int port = Integer.parseInt(proxyPortString);
-
-			if (port > 0 && port <= 0xFFFF)
-				setProxyPortPersistent(port);
-			else
-				log.warn("Proxy port is out of range!: " + port);
-		}
-
-		// Set Default BKU
-		String bkuString = diskConfig.getProperty(Constants.CFG_BKU);
-		BKUs defaultBKU = BKUs.NONE;
-		if (bkuString != null) {
-			try {
-				defaultBKU = BKUs.valueOf(bkuString);
-			} catch (IllegalArgumentException ex) {
-				log.error("Invalid BKU config value " + bkuString + " using none!");
-				defaultBKU = BKUs.NONE;
-			} catch (NullPointerException ex) {
-				log.error("Invalid BKU config value " + bkuString + " using none!");
-				defaultBKU = BKUs.NONE;
-			}
-		}
-		setDefaultBKUPersistent(defaultBKU);
-
-		// Set MainWindow size
-		int width = Constants.DEFAULT_MAINWINDOW_WIDTH;
-		int height = Constants.DEFAULT_MAINWINDOW_HEIGHT;
-		String size = diskConfig.getProperty(Constants.CFG_MAINWINDOW_SIZE);
-		parse: {
-			if (size == null)
-				break parse;
-			int pos = size.indexOf(',');
-			if (pos <= 0)
-				break parse;
-
-			try {
-				width = Integer.parseInt(size.substring(0, pos).trim());
-				height = Integer.parseInt(size.substring(pos + 1).trim());
-			} catch (NumberFormatException e) {
-				log.debug("Couldn't parse main window size", e);
-				// ignore parsing exception
-			}
-		}
-		this.configuration.mainWindowSize = new Point(width, height);
-
-		// Set Signature Position
-		String signaturePositionStr = diskConfig.getProperty(Constants.CFG_SIGNATURE_POSITION);
-		setAutoPositionSignaturePersistent(signaturePositionStr != null && signaturePositionStr.trim().equals("auto"));
-
-		//Set keystore stuff
-		String keystoreEnabled = diskConfig.getProperty(Constants.CFG_KEYSTORE_ENABLED);
-		if (keystoreEnabled != null)
-			setKeyStoreEnabledPersistent(keystoreEnabled.equalsIgnoreCase(Constants.TRUE));
-		setKeyStoreFilePersistent(diskConfig.getProperty(Constants.CFG_KEYSTORE_FILE));
-		setKeyStoreTypePersistent(diskConfig.getProperty(Constants.CFG_KEYSTORE_TYPE));
-		setKeyStoreAliasPersistent(diskConfig.getProperty(Constants.CFG_KEYSTORE_ALIAS));
-		setKeyStoreStorePassPersistent(diskConfig.getProperty(Constants.CFG_KEYSTORE_STOREPASS));
-		setKeyStoreKeyPassPersistent(diskConfig.getProperty(Constants.CFG_KEYSTORE_KEYPASS));
-		String storeTypeOnDisk = diskConfig.getProperty(Constants.CFG_KEYSTORE_PASSSTORETYPE);
-		if (storeTypeOnDisk == null) /* auto-detect based on old config */
-		{
-			String oldKeyPass = getKeyStoreKeyPassPersistent();
-			String oldStorePass = getKeyStoreStorePassPersistent();
-			if ((oldKeyPass != null && !oldKeyPass.trim().isEmpty()) || (oldStorePass != null && !oldStorePass.trim().isEmpty()))  /* previously stored password exists */
-				storeTypeOnDisk = "disk";
-			else
-				storeTypeOnDisk = "memory";
-		}
-		if ("disk".equals(storeTypeOnDisk))
-			setKeyStorePassStorageTypePersistent(KeyStorePassStorageType.DISK);
-		else if ("memory".equals(storeTypeOnDisk))
-			setKeyStorePassStorageTypePersistent(KeyStorePassStorageType.MEMORY);
-		else
-			setKeyStorePassStorageTypePersistent(null);
-
-		// Set update check
-		String updateCheck = diskConfig.getProperty(Constants.CFG_UPDATE_CHECK);
-		if (updateCheck != null)
-			setUpdateCheckPersistent(!updateCheck.equalsIgnoreCase(Constants.FALSE));
-
-		setFido2ByDefaultPersistent(Constants.TRUE.equalsIgnoreCase(diskConfig.getProperty(Constants.CFG_FIDO2_BY_DEFAULT)));
-		
-		log.info("Successfully loaded config from: " + getConfigurationFileName());
-		loaded = true;
-	}
-
-	private void setProperty(@Nonnull Properties props, @Nonnull String key, @Nonnull String value) { props.setProperty(key, value); }
-	private void setPropertyIfNotNull(@Nonnull Properties props, @Nonnull String key, @CheckForNull String value) { if (value != null) setProperty(props, key, value); }
-	private void setPropertyIfNotBlank(@Nonnull Properties props, @Nonnull String key, @Nonnull String value) { if (!value.isEmpty()) setProperty(props, key, value); }
-	/* save to file */
-	public void saveToDisk() throws IOException {
-		String filename = this.getConfigurationFileName();
-		File configFile = new File(Constants.CONFIG_DIRECTORY + File.separator + filename);
-
-		Properties props = new Properties();
-		props.clear();
-
-		setProperty(props, Constants.CFG_BKU, ISNOTNULL(getDefaultBKUPersistent().name()));
-
-		setPropertyIfNotNull(props, Constants.CFG_PROXY_HOST, getProxyHostPersistent());
-		int proxyPort = getProxyPortPersistent();
-		if (proxyPort != -1)
-			setProperty(props, Constants.CFG_PROXY_PORT, ISNOTNULL(Integer.toString(proxyPort)));
-		setPropertyIfNotNull(props, Constants.CFG_PROXY_USER, getProxyUserPersistent());
-		setPropertyIfNotNull(props, Constants.CFG_PROXY_PASS, getProxyPassPersistent());
-
-		setPropertyIfNotNull(props, Constants.CFG_EMBLEM, getDefaultEmblemPersistent());
-		setProperty(props, Constants.CFG_LOGO_ONLY_SIZE, ISNOTNULL(Double.toString(getLogoOnlyTargetSize())));
-		
-		setPropertyIfNotNull(props, Constants.CFG_SIGNATURE_NOTE, getSignatureNote());
-		setPropertyIfNotNull(props, Constants.CFG_MOBILE_NUMBER, getDefaultMobileNumberPersistent());
-		if (getRememberMobilePassword())
-			setProperty(props, Constants.CFG_MOBILE_PASSWORD_REMEMBER, Constants.TRUE);
-		setPropertyIfNotNull(props, Constants.CFG_OUTPUT_FOLDER, getDefaultOutputFolderPersistent());
-		setProperty(props, Constants.CFG_POSTFIX, getSaveFilePostFix());
-
-		Point size = this.configuration.mainWindowSize;
-		setProperty(props, Constants.CFG_MAINWINDOW_SIZE, size.x + "," + size.y);
-
-		Locale configLocale = getInterfaceLocale();
-		if(configLocale != null) {
-			setProperty(props, Constants.CFG_LOCALE, LocaleSerializer.getParsableString(configLocale));
-		}
-
-		Locale signatureLocale = this.getSignatureLocale();
-		if(signatureLocale != null) {
-			setProperty(props, Constants.CFG_SIGNATURE_LOCALE, LocaleSerializer.getParsableString(signatureLocale));
-		}
-
-		if (getUseMarker())
-			setProperty(props, Constants.CFG_USE_MARKER, Constants.TRUE);
-
-		if (getUseSignatureFields()) {
-			setProperty(props, Constants.CFG_USE_SIGNATURE_FIELDS, Constants.TRUE);
-		}
-
-		if (getEnablePlaceholderUsage()) {
-			setProperty(props, Constants.CFG_ENABLE_PLACEHOLDER, Constants.TRUE);
-		}
-
-		if (getSignaturePdfACompat())
-			setProperty(props, Constants.CFG_SIGNATURE_PDFA_COMPAT, Constants.TRUE);
-
-		if (!getAutoPositionSignaturePersistent())
-			setProperty(props, Constants.CFG_SIGNATURE_POSITION, "");
-		else
-			setProperty(props, Constants.CFG_SIGNATURE_POSITION, "auto");
-
-		if (Constants.THEME != Constants.Themes.DEFAULT)
-			setProperty(props, Constants.CFG_THEME, ISNOTNULL(Constants.THEME.name()));
-
-		if (getKeyStoreEnabledPersistent())
-			setProperty(props, Constants.CFG_KEYSTORE_ENABLED, Constants.TRUE);
-		setPropertyIfNotBlank(props, Constants.CFG_KEYSTORE_FILE, getKeyStoreFilePersistent());
-		setPropertyIfNotBlank(props, Constants.CFG_KEYSTORE_TYPE, getKeyStoreTypePersistent());
-		setPropertyIfNotBlank(props, Constants.CFG_KEYSTORE_ALIAS, getKeyStoreAliasPersistent());
-
-		KeyStorePassStorageType keystorePassStorageType = getKeyStorePassStorageType();
-		if (keystorePassStorageType == null)
-			setProperty(props, Constants.CFG_KEYSTORE_PASSSTORETYPE, "none");
-		else if (keystorePassStorageType == KeyStorePassStorageType.MEMORY)
-			setProperty(props, Constants.CFG_KEYSTORE_PASSSTORETYPE, "memory");
-		else if (keystorePassStorageType == KeyStorePassStorageType.DISK)
-			setProperty(props, Constants.CFG_KEYSTORE_PASSSTORETYPE, "disk");
-
-		if (keystorePassStorageType == KeyStorePassStorageType.DISK)
-		{
-			String keystoreStorePass = getKeyStoreStorePassPersistent();
-			if (keystoreStorePass == null)
-				keystoreStorePass = "";
-			setProperty(props, Constants.CFG_KEYSTORE_STOREPASS, keystoreStorePass);
-			String keystoreKeyPass = getKeyStoreKeyPassPersistent();
-			if (keystoreKeyPass == null)
-				keystoreKeyPass = "";
-			setProperty(props, Constants.CFG_KEYSTORE_KEYPASS, keystoreKeyPass);
-		}
-
-		if (!getUpdateCheck())
-			setProperty(props, Constants.CFG_UPDATE_CHECK, Constants.FALSE);
-		
-		if (getFido2ByDefault())
-			setProperty(props, Constants.CFG_FIDO2_BY_DEFAULT, Constants.TRUE);
-
-		setProperty(props, Constants.SIGNATURE_PROFILE, ISNOTNULL(getSignatureProfile().name()));
-
-
-		FileOutputStream outputstream = new FileOutputStream(configFile, false);
-
-		props.store(outputstream, "Configuration file was generated!");
-
-		log.info("Configuration file saved to " + configFile.getAbsolutePath());
-	}
-
-	static private <T> T fallThroughOnNull(T one, T two) { return (one != null) ? one : two; }
-
-	public void setConfigurationFileName(String configurationFile)
-	{
-		if (this.configurationFile.equals(configurationFile))
-			return;
-		if (this.loaded)
-			throw new RuntimeException("Cannot change configuration file path after it has been loaded");
-		this.configurationFile = configurationFile;
-	}
-	public String getConfigurationFileName() { return this.configurationFile; }
-
-	public void setDefaultBKUPersistent(@Nonnull BKUs bku) {
-		this.configuration.defaultBKU = bku;
-	}
-
-	public void setDefaultBKUOverlay(@Nonnull BKUs bku) {
-		this.configurationOverlay.defaultBKU = bku;
-	}
-
-	public @Nonnull BKUs getDefaultBKU() {
-		BKUs bku = this.configurationOverlay.defaultBKU;
-		if (bku == BKUs.NONE)
-			bku = getDefaultBKUPersistent();
-		return bku;
-	}
-
-	public @Nonnull BKUs getDefaultBKUPersistent() {
-		return this.configuration.defaultBKU;
-	}
-
-	public void setAutoPositionSignaturePersistent(boolean state) {
-		this.configuration.autoPositionSignature = state;
-	}
-
-	public void setAutoPositionSignatureOverlay() {
-		this.configurationOverlay.autoPositionSignature = true;
-	}
-
-	public boolean getAutoPositionSignature() {
-		return this.configurationOverlay.autoPositionSignature || getAutoPositionSignaturePersistent();
-	}
-
-	public boolean getAutoPositionSignaturePersistent() {
-		return this.configuration.autoPositionSignature;
-	}
-
-	public void setDefaultMobileNumberPersistent(String number) {
-		if (number == null || number.trim().isEmpty()) {
-			this.configuration.setMobileNumber(null);
-		} else {
-			this.configuration.setMobileNumber(number);
-		}
-	}
-
-	public void setDefaultMobileNumberOverlay(String number) {
-		if (number == null || number.trim().isEmpty()) {
-			this.configurationOverlay.setMobileNumber(null);
-		} else {
-			this.configurationOverlay.setMobileNumber(number);
-		}
-	}
-
-	public @CheckForNull String getDefaultMobileNumber() {
-		return fallThroughOnNull(this.configurationOverlay.getMobileNumber(), getDefaultMobileNumberPersistent());
-	}
-
-	public @CheckForNull String getDefaultMobileNumberPersistent() {
-		return this.configuration.getMobileNumber();
-	}
-
-	public void setDefaultMobilePasswordOverlay(String password) {
-		if (password == null || password.trim().isEmpty()) {
-			this.configurationOverlay.mobilePassword = null;
-		} else {
-			this.configurationOverlay.mobilePassword = password;
-		}
-	}
-
-	public @CheckForNull String getDefaultMobilePassword() {
-		/* this does not exist as a permanent config variable */
-		return this.configurationOverlay.mobilePassword;
-	}
-
-	public boolean getRememberMobilePassword() {
-		return this.configuration.rememberPassword;
-	}
-
-	public void setRememberMobilePasswordPersistent(boolean state) {
-		this.configuration.rememberPassword = state;
-	}
-
-	public void setDefaultEmblemPersistent(String emblem) {
-		try {
-			if (emblem == null || emblem.trim().isEmpty()) {
-				this.configuration.setEmblem(null);
-			} else {
-				this.configuration.setEmblem(emblem);
-			}
-		} catch (InvalidEmblemFile e) {
-			log.error("Error setting emblem file", e);
-			try {
-				this.configuration.setEmblem(null);
-			} catch (InvalidEmblemFile e1) {
-				// Ignore
-			}
-		}
-	}
-
-	public void setDefaultEmblemOverlay(String emblem) {
-		try {
-			if (emblem == null || emblem.trim().isEmpty()) {
-				this.configurationOverlay.setEmblem(null);
-			} else {
-				this.configurationOverlay.setEmblem(emblem);
-			}
-		} catch (InvalidEmblemFile e) {
-			log.error("Error setting emblem file", e);
-			try {
-				this.configurationOverlay.setEmblem(null);
-			} catch (InvalidEmblemFile e1) {
-				// Ignore
-			}
-		}
-	}
-
-	public @CheckForNull String getDefaultEmblemPath() {
-		return fallThroughOnNull(this.configurationOverlay.getEmblemPath(), getDefaultEmblemPersistent());
-	}
-
-	public @CheckForNull String getDefaultEmblemPersistent() {
-		return this.configuration.getEmblemPath();
-	}
-
-	public void setLogoOnlyTargetSizePersistent(double v) {
-		this.configuration.logoOnlyTargetSize = v;
-	}
-
-	public double getLogoOnlyTargetSize() {
-		return this.configuration.logoOnlyTargetSize;
-	}
-
-	public void setProxyHostPersistent(String host) {
-		if (host == null || host.trim().isEmpty()) {
-			this.configuration.proxyHost = null;
-		} else {
-			this.configuration.proxyHost = host;
-		}
-	}
-
-	public void setProxyHostOverlay(String host) {
-		if (host == null || host.trim().isEmpty()) {
-			this.configurationOverlay.proxyHost = null;
-		} else {
-			this.configurationOverlay.proxyHost = host;
-		}
-	}
-
-	public @CheckForNull String getProxyHost() {
-		return fallThroughOnNull(this.configurationOverlay.proxyHost, getProxyHostPersistent());
-	}
-
-	public @CheckForNull String getProxyHostPersistent() {
-		return this.configuration.proxyHost;
-	}
-
-	public void setProxyPortPersistent(int port) {
-		try {
-			this.configuration.setProxyPort(port);
-		} catch (InvalidPortException e) {
-			log.error("Error setting proxy port" , e);
-			// ignore
-		}
-	}
-
-	public void setProxyPortOverlay(int port) {
-		try {
-			this.configurationOverlay.setProxyPort(port);
-		} catch (InvalidPortException e) {
-			log.error("Error setting proxy port" , e);
-			// ignore
-		}
-	}
-
-	public int getProxyPort() {
-		int port = this.configurationOverlay.getProxyPort();
-		if (port == -1) // TODO -1 is a terrible, no good, very bad hack
-			port = getProxyPortPersistent();
-		return port;
-	}
-
-	public int getProxyPortPersistent() {
-		return this.configuration.getProxyPort();
-	}
-
-	public void setProxyUserPersistent(String user) {
-		if (user == null || user.trim().isEmpty()) {
-			this.configuration.proxyUser = null;
-		} else {
-			this.configuration.proxyUser = user;
-		}
-	}
-
-	public void setProxyUserOverlay(String user) {
-		if (user == null || user.trim().isEmpty()) {
-			this.configurationOverlay.proxyUser = null;
-		} else {
-			this.configurationOverlay.proxyUser = user;
-		}
-	}
-
-	public @CheckForNull String getProxyUser() {
-		return fallThroughOnNull(this.configurationOverlay.proxyUser, getProxyUserPersistent());
-	}
-
-	public @CheckForNull String getProxyUserPersistent() {
-		return this.configuration.proxyUser;
-	}
-
-	public void setProxyPassPersistent(String pass) {
-		if (pass == null || pass.trim().isEmpty()) {
-			this.configuration.proxyPass = null;
-		} else {
-			this.configuration.proxyPass = pass;
-		}
-	}
-
-	public void setProxyPassOverlay(String pass) {
-		if (pass == null || pass.trim().isEmpty()) {
-			this.configurationOverlay.proxyPass = null;
-		} else {
-			this.configurationOverlay.proxyPass = pass;
-		}
-	}
-
-	public @CheckForNull String getProxyPass() {
-		return fallThroughOnNull(this.configurationOverlay.proxyPass, getProxyPassPersistent());
-	}
-
-	public @CheckForNull String getProxyPassPersistent() {
-		return this.configuration.proxyPass;
-	}
-
-	public void setDefaultOutputFolderPersistent(String outputFolder) {
-		if (outputFolder == null || outputFolder.trim().isEmpty()) {
-			this.configuration.outputFolder = null;
-		} else {
-			this.configuration.outputFolder = outputFolder;
-		}
-	}
-
-	public void setDefaultOutputFolderOverlay(String outputFolder) {
-		if (outputFolder == null || outputFolder.trim().isEmpty()) {
-			this.configurationOverlay.outputFolder = null;
-		} else {
-			this.configurationOverlay.outputFolder = outputFolder;
-		}
-	}
-
-	public @CheckForNull String getDefaultOutputFolder() {
-		return fallThroughOnNull(this.configurationOverlay.outputFolder, getDefaultOutputFolderPersistent());
-	}
-
-	public @CheckForNull String getDefaultOutputFolderPersistent() {
-		return this.configuration.outputFolder;
-	}
-
-	public void setSignatureNotePersistent(String note) {
-		if (note == null || note.trim().isEmpty()) {
-			this.configuration.signatureNote = null;
-		} else {
-			this.configuration.signatureNote = note;
-		}
-	}
-
-	public @CheckForNull String getSignatureNote() {
-		return this.configuration.signatureNote;
-	}
-
-	public void setInterfaceLocalePersistent(Locale locale) {
-		if(locale == null) {
-			this.configuration.interfaceLocale = Messages.getDefaultLocale();
-		} else {
-			this.configuration.interfaceLocale = locale;
-			Locale.setDefault(locale);
-			Messages.setLocale(locale);
-		}
-	}
-
-	public @Nonnull Locale getInterfaceLocale() {
-		Locale locale = this.configuration.interfaceLocale;
-		if (locale == null)
-			locale = Messages.getDefaultLocale();
-		return locale;
-	}
-
-	public void setSignatureLocalePersistent(Locale locale) {
-		if(locale == null) {
-			this.configuration.signatureLocale = Messages.getDefaultLocale();
-		} else {
-			this.configuration.signatureLocale = locale;
-		}
-	}
-
-	public @Nonnull Locale getSignatureLocale() {
-		Locale locale = this.configuration.signatureLocale;
-		if (locale == null)
-			locale = Messages.getDefaultLocale();
-		return locale;
-	}
-
-	public void setSignaturePdfACompatPersistent(boolean compat) {
-		this.configuration.signaturePDFACompat = compat;
-	}
-
-	public boolean getSignaturePdfACompat() {
-		return this.configuration.signaturePDFACompat;
-	}
-
-	public void setKeyStoreEnabledPersistent(Boolean enabled) {
-		this.configuration.keystoreEnabled = enabled;
-	}
-
-	public void setKeyStoreEnabledOverlay(Boolean enabled) {
-		this.configurationOverlay.keystoreEnabled = enabled;
-	}
-
-	public boolean getKeyStoreEnabled() {
-		return ISNOTNULL(fallThroughOnNull(this.configurationOverlay.keystoreEnabled, getKeyStoreEnabledPersistent()));
-	}
-
-	public boolean getKeyStoreEnabledPersistent() {
-		return ISNOTNULL(fallThroughOnNull(this.configuration.keystoreEnabled, Boolean.FALSE));
-	}
-
-	public void setKeyStoreFilePersistent(@CheckForNull String file) {
-		if (file == null || file.trim().isEmpty()) {
-			this.configuration.keystoreFile = "";
-		} else {
-			this.configuration.keystoreFile = file;
-		}
-	}
-
-	public void setKeyStoreFileOverlay(@CheckForNull String file) {
-		if (file == null || file.trim().isEmpty()) {
-			this.configurationOverlay.keystoreFile = null;
-		} else {
-			this.configurationOverlay.keystoreFile = file;
-		}
-	}
-
-	public @Nonnull String getKeyStoreFile() {
-		return ISNOTNULL(fallThroughOnNull(this.configurationOverlay.keystoreFile, getKeyStoreFilePersistent()));
-	}
-
-	public @Nonnull String getKeyStoreFilePersistent() {
-		return ISNOTNULL(this.configuration.keystoreFile);
-	}
-
-	public void setKeyStoreTypePersistent(@CheckForNull String type) {
-		if (type == null || type.trim().isEmpty()) {
-			this.configuration.keystoreType = "";
-		} else {
-			this.configuration.keystoreType = type;
-		}
-	}
-
-	public void setKeyStoreTypeOverlay(@CheckForNull String type) {
-		if (type == null || type.trim().isEmpty()) {
-			this.configurationOverlay.keystoreType = null;
-		} else {
-			this.configurationOverlay.keystoreType = type;
-		}
-	}
-
-	public @Nonnull String getKeyStoreType() {
-		return ISNOTNULL(fallThroughOnNull(this.configurationOverlay.keystoreType, getKeyStoreTypePersistent()));
-	}
-
-	public @Nonnull String getKeyStoreTypePersistent() {
-		return ISNOTNULL(this.configuration.keystoreType);
-	}
-
-	public void setKeyStoreAliasPersistent(@CheckForNull String alias) {
-		if (alias == null || alias.trim().isEmpty()) {
-			this.configuration.keystoreAlias = "";
-		} else {
-			this.configuration.keystoreAlias = alias;
-		}
-	}
-
-	public void setKeyStoreAliasOverlay(@CheckForNull String alias) {
-		if (alias == null || alias.trim().isEmpty()) {
-			this.configurationOverlay.keystoreAlias = null;
-		} else {
-			this.configurationOverlay.keystoreAlias = alias;
-		}
-	}
-
-	public @Nonnull String getKeyStoreAlias() {
-		return ISNOTNULL(fallThroughOnNull(this.configurationOverlay.keystoreAlias, getKeyStoreAliasPersistent()));
-	}
-
-	public @Nonnull String getKeyStoreAliasPersistent() {
-		return ISNOTNULL(this.configuration.keystoreAlias);
-	}
-
-	public void setKeyStorePassStorageTypePersistent(@CheckForNull KeyStorePassStorageType type) {
-		this.configuration.keystorePassStorageType = type;
-	}
-
-	public @CheckForNull KeyStorePassStorageType getKeyStorePassStorageType() {
-		return this.configuration.keystorePassStorageType;
-	}
-
-	public void setKeyStoreStorePassPersistent(@CheckForNull String storePass) {
-		this.configuration.keystoreStorePass = storePass;
-	}
-
-	public void setKeyStoreStorePassOverlay(@CheckForNull String storePass) {
-		this.configurationOverlay.keystoreStorePass = storePass;
-	}
-
-	public @CheckForNull String getKeyStoreStorePass() {
-		String storePass = this.configurationOverlay.keystoreStorePass;
-		if (storePass != null)
-			return storePass;
-		if (getKeyStorePassStorageType() != KeyStorePassStorageType.DISK)
-			return null;
-		return getKeyStoreStorePassPersistent();
-	}
-
-	public @CheckForNull String getKeyStoreStorePassPersistent() {
-		return this.configuration.keystoreStorePass;
-	}
-
-	public void setKeyStoreKeyPassPersistent(@CheckForNull String keyPass) {
-		this.configuration.keystoreKeyPass = keyPass;
-	}
-
-	public void setKeyStoreKeyPassOverlay(@CheckForNull String keyPass) {
-		this.configurationOverlay.keystoreKeyPass = keyPass;
-	}
-
-	public @CheckForNull String getKeyStoreKeyPass() {
-		String keyPass = this.configurationOverlay.keystoreKeyPass;
-		if (keyPass != null)
-			return keyPass;
-		if (getKeyStorePassStorageType() != KeyStorePassStorageType.DISK)
-			return null;
-		return getKeyStoreKeyPassPersistent();
-	}
-
-	public @CheckForNull String getKeyStoreKeyPassPersistent() {
-		return this.configuration.keystoreKeyPass;
-	}
-
-	public void setUpdateCheckPersistent(boolean checkUpdate) {
-		this.configuration.updateCheck = checkUpdate;
-	}
-
-	public boolean getUpdateCheck() {
-		return this.configuration.updateCheck;
-	}
-
-	public void setMainWindowSizePersistent(@Nonnull Point size) {
-		this.configuration.mainWindowSize = size;
-	}
-
-	public @Nonnull Point getMainWindowSize() {
-		return this.configuration.mainWindowSize;
-	}
-
-	public boolean getSkipFinish() {
-		return this.configurationOverlay.skipFinish;
-	}
-
-	public void setSkipFinishOverlay(boolean skipFinish) {
-		this.configurationOverlay.skipFinish = skipFinish;
-	}
-
-	public boolean getUseSignatureFields() {
-		return this.configuration.getUseSignatureFields();
-	}
-
-	public void setUseSignatureFieldsPersistent(boolean useFields) {
-		this.configuration.setUseSignatureFields(useFields);
-		if (useFields) setUseMarkerPersistent(false);
-	}
-
-	public boolean getUseMarker() {
-		return this.configuration.getUseMarker();
-	}
-
-	public void setUseMarkerPersistent(boolean useMarker) {
-		this.configuration.setUseMarker(useMarker);
-		if (useMarker) setUseSignatureFieldsPersistent(false);
-	}
-
-    public void setSaveFilePostFixPersistent(@Nonnull String postFix) {
-        this.configuration.saveFilePostFix = postFix;
-    }
-
-	public @Nonnull String getSaveFilePostFix(){
-		return this.configuration.saveFilePostFix;
-	}
-
-	public @Nonnull Profile getSignatureProfile() {
-		return ISNOTNULL(fallThroughOnNull(this.configuration.signatureProfile, Profile.SIGNATURBLOCK_SMALL));
-	}
-
-	public void setSignatureProfilePersistent(Profile profile) {
-		this.configuration.signatureProfile = profile;
-	}
-
-	public void setEnablePlaceholderUsagePersistent(boolean bool) {
-		this.configuration.enabledPlaceholderUsage = bool;
-	}
-
-	public boolean getEnablePlaceholderUsage() {
-		return this.configuration.enabledPlaceholderUsage;
-	}
-
-	public void setFido2ByDefaultPersistent(boolean bool) {
-		this.configuration.fido2ByDefault = bool;
-	}
-
-	public boolean getFido2ByDefault() {
-		return this.configuration.fido2ByDefault;
-	}
-
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/BKUSelectionState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/BKUSelectionState.java
deleted file mode 100644
index d1bdfe0d..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/BKUSelectionState.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-//Imports
-import java.io.File;
-
-import org.eclipse.swt.SWT;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.MainWindow.Buttons;
-import at.asit.pdfover.gui.bku.LocalBKUConnector;
-import at.asit.pdfover.commons.BKUs;
-import at.asit.pdfover.gui.MainWindowBehavior;
-import at.asit.pdfover.gui.composites.BKUSelectionComposite;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.Status;
-
-/**
- * Decides which BKU to use (preconfigured or let user choose)
- */
-public class BKUSelectionState extends State {
-
-	/**
-	 * @param stateMachine
-	 */
-	public BKUSelectionState(StateMachine stateMachine) {
-		super(stateMachine);
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	@SuppressWarnings("unused")
-	private static final Logger log = LoggerFactory.getLogger(BKUSelectionState.class);
-
-	private BKUSelectionComposite selectionComposite = null;
-	private BKUSelectionComposite getSelectionComposite() {
-		if (this.selectionComposite == null) {
-			this.selectionComposite =
-					getStateMachine().createComposite(BKUSelectionComposite.class, SWT.RESIZE, this);
-		}
-
-		return this.selectionComposite;
-	}
-
-	private boolean isKeystoreEnabled() {
-		if (getStateMachine().configProvider.getKeyStoreEnabled()) {
-			File ks = new File(getStateMachine().configProvider.getKeyStoreFile());
-			return ks.exists();
-		} else
-			return false;
-	}
-
-	@Override
-	public void run() {
-		Status status = getStateMachine().status;
-		State previousState = status.getPreviousState();
-
-		final boolean hasLocalBKU = LocalBKUConnector.IsAvailable();
-		final boolean hasKeystore = isKeystoreEnabled();
-		if (
-		  (previousState instanceof OpenState) ||
-		  (previousState instanceof PositioningState)
-		) {
-			if (!hasLocalBKU && !hasKeystore)
-				status.bku = BKUs.MOBILE;
-		} else if (!(previousState instanceof BKUSelectionState)) {
-			status.bku = BKUs.NONE;
-		}
-
-		if(status.bku == BKUs.NONE) {
-			BKUSelectionComposite selection = this.getSelectionComposite();
-			selection.setLocalBKUEnabled(hasLocalBKU);
-			selection.setKeystoreEnabled(hasKeystore);
-
-			getStateMachine().display(selection);
-			selection.layout();
-
-			status.bku = selection.getSelected();
-
-			if(status.bku == BKUs.NONE) {
-				return;
-			}
-		}
-		this.setNextState(new PrepareSigningState(getStateMachine()));
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
-	 */
-	@Override
-	public void cleanUp() {
-		if (this.selectionComposite != null)
-			this.selectionComposite.dispose();
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#setMainWindowBehavior()
-	 */
-	@Override
-	public void updateMainWindowBehavior() {
-		MainWindowBehavior behavior = getStateMachine().status.behavior;
-		behavior.reset();
-		behavior.setEnabled(Buttons.CONFIG, true);
-		behavior.setEnabled(Buttons.OPEN, true);
-		behavior.setEnabled(Buttons.POSITION, true);
-		behavior.setActive(Buttons.OPEN, true);
-		behavior.setActive(Buttons.POSITION, true);
-		behavior.setActive(Buttons.SIGN, true);
-	}
-
-	@Override
-	public String toString()  {
-		return this.getClass().getName();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/ConfigurationUIState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/ConfigurationUIState.java
deleted file mode 100644
index 7393f13e..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/ConfigurationUIState.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-// Imports
-import org.eclipse.swt.SWT;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.MainWindowBehavior;
-import at.asit.pdfover.gui.MainWindow.Buttons;
-import at.asit.pdfover.gui.composites.ConfigurationComposite;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.Status;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-
-/**
- *
- */
-public class ConfigurationUIState extends State {
-	private static final Logger log = LoggerFactory.getLogger(ConfigurationUIState.class);
-
-	private ConfigurationComposite configurationComposite = null;
-
-	private ConfigurationComposite getConfigurationComposite() {
-		if (this.configurationComposite == null) {
-			this.configurationComposite =
-					getStateMachine().createComposite(ConfigurationComposite.class, SWT.RESIZE, this);
-			this.configurationComposite.setConfigProvider(getStateMachine().configProvider);
-		}
-
-		return this.configurationComposite;
-	}
-
-	/**
-	 * @param stateMachine
-	 */
-	public ConfigurationUIState(StateMachine stateMachine) {
-		super(stateMachine);
-	}
-
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#run()
-	 */
-	@Override
-	public void run() {
-		Status status = getStateMachine().status;
-		
-		ConfigurationComposite config;
-		try {
-			config = this.getConfigurationComposite();
-			getStateMachine().display(config);
-		} catch (Exception e) {
-			log.error("Failed to initialize config UI", e);
-			ErrorDialog error = new ErrorDialog(
-				getStateMachine().getMainShell(),
-				Messages.getString("error.ConfigInitialization"),
-				BUTTONS.YES_NO
-			);
-
-			int selection = error.open();
-			if (selection == SWT.YES)
-			{
-				ConfigurationManager.factoryResetPersistentConfig();
-				getStateMachine().exit();
-				return;
-			}
-
-			throw e;
-		}
-
-		if(config.isUserDone())
-		{
-			this.reloadResources();
-			State previousState = status.getPreviousState();
-			if (previousState instanceof OutputState)
-				this.setNextState(new OpenState(getStateMachine()));
-			else
-				this.setNextState(previousState); // TODO do we need to tell a previous state to refresh from config settings? (positioning preview)
-		}
-	}
-
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
-	 */
-	@Override
-	public void cleanUp() {
-		if(this.configurationComposite != null)
-			this.configurationComposite.dispose();
-	}
-
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#updateMainWindowBehavior()
-	 */
-	@Override
-	public void updateMainWindowBehavior() {
-		// Leave the state as it is
-		MainWindowBehavior behavior = getStateMachine().status.behavior;
-		behavior.setEnabled(Buttons.CONFIG, false);
-		behavior.setMainBarVisible(false);
-	}
-
-	/**
-	 * Triggers to reload the resources
-	 */
-	public void reloadResources() {
-		getStateMachine().reloadResources();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/KSState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/KSState.java
deleted file mode 100644
index 42a2f605..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/KSState.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-// Imports
-import java.io.File;
-import java.security.Key;
-import java.security.KeyStore;
-import java.security.UnrecoverableKeyException;
-
-import org.eclipse.swt.SWT;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.MainWindow.Buttons;
-import at.asit.pdfover.gui.MainWindowBehavior;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.keystore.KeystoreUtils;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.gui.controls.PasswordInputDialog;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.Status;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.gui.workflow.config.ConfigurationDataInMemory.KeyStorePassStorageType;
-import at.asit.pdfover.signer.SignatureException;
-import at.asit.pdfover.signer.pdfas.PdfAs4SigningState;
-
-/**
- * Logical state for performing the BKU Request to a local BKU
- */
-public class KSState extends State {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(KSState.class);
-
-	/**
-	 * Constructor
-	 * @param stateMachine the StateMachine
-	 */
-	public KSState(StateMachine stateMachine) {
-		super(stateMachine);
-	}
-
-	private void showError(String messageKey, Object... args)
-	{
-		new ErrorDialog(getStateMachine().getMainShell(), Messages.formatString(messageKey, args), BUTTONS.OK).open();
-	}
-
-	private boolean askShouldRetry(String messageKey, Object... args)
-	{
-		return SWT.RETRY == (new ErrorDialog(getStateMachine().getMainShell(), Messages.formatString(messageKey, args), BUTTONS.RETRY_CANCEL).open());
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.workflow.WorkflowState#update(at.asit.pdfover.gui
-	 * .workflow.Workflow)
-	 */
-	@Override
-	public void run() {
-		Status status = getStateMachine().status;
-
-		PdfAs4SigningState signingState = status.signingState;
-		ConfigurationManager config = getStateMachine().configProvider;
-
-		try {
-			String file = config.getKeyStoreFile();
-			File f = new File(file);
-			if (!f.isFile()) {
-				log.error("Keystore not found");
-				if (askShouldRetry("error.KeyStoreFileNotExist", f.getName()))
-					this.run();
-				else
-					this.setNextState(new BKUSelectionState(getStateMachine()));
-				return;
-			}
-			String type = config.getKeyStoreType();
-			KeyStore keyStore = null;
-			String storePass = config.getKeyStoreStorePass();
-			while (keyStore == null) {
-				if (storePass == null)
-				{
-					storePass = new PasswordInputDialog(
-							getStateMachine().getMainShell(),
-							Messages.getString("keystore_config.KeystoreStorePass"),
-							Messages.getString("keystore.KeystoreStorePassEntry")).open();
-
-					if (storePass == null)
-					{
-						this.setNextState(new BKUSelectionState(getStateMachine()));
-						return;
-					}
-				}
-
-				try {
-					keyStore = KeystoreUtils.tryLoadKeystore(f, type, storePass);
-				} catch (UnrecoverableKeyException e) {
-					showError("error.KeyStoreStorePass");
-					storePass = null;
-				} catch (Exception e) {
-					throw new SignatureException("Failed to load keystore", e);
-				}
-			}
-
-			/* we've successfully unlocked the key store, save the entered password if requested */
-			if (config.getKeyStorePassStorageType() == KeyStorePassStorageType.DISK)
-			{
-				/* only save to disk if the current keystore file is the one saved to disk */
-				/* (might not be true if overridden from CLI) */
-				if (file.equals(config.getKeyStoreFilePersistent()))
-					config.setKeyStoreStorePassPersistent(storePass);
-				else
-					config.setKeyStoreStorePassOverlay(storePass);
-			}
-			else if (config.getKeyStorePassStorageType() == KeyStorePassStorageType.MEMORY)
-				config.setKeyStoreStorePassOverlay(storePass);
-
-			/* next, try to load the key from the now-unlocked keystore */
-			String alias = config.getKeyStoreAlias();
-			Key key = null;
-			String keyPass = config.getKeyStoreKeyPass();
-			while (key == null) {
-				if (keyPass == null) {
-					keyPass = new PasswordInputDialog(
-							getStateMachine().getMainShell(),
-							Messages.getString("keystore_config.KeystoreKeyPass"),
-							Messages.getString("keystore.KeystoreKeyPassEntry")).open();
-
-					if (keyPass == null)
-					{
-						this.setNextState(new BKUSelectionState(getStateMachine()));
-						return;
-					}
-				}
-
-				try {
-					key = keyStore.getKey(alias, keyPass.toCharArray());
-					if (key == null) /* alias does not exist */
-					{
-						if (!askShouldRetry("error.KeyStoreAliasExist", alias))
-						{
-							this.setNextState(new BKUSelectionState(getStateMachine()));
-							return;
-						}
-						continue;
-					}
-				} catch (UnrecoverableKeyException e) {
-					showError("error.KeyStoreKeyPass");
-					keyPass = null;
-				} catch (Exception e) {
-					throw new SignatureException("Failed to load key from store", e);
-				}
-			}
-
-			if (config.getKeyStorePassStorageType() == KeyStorePassStorageType.DISK)
-			{
-				if (file.equals(config.getKeyStoreFilePersistent()))
-					config.setKeyStoreKeyPassPersistent(keyPass);
-				else
-					config.setKeyStoreKeyPassOverlay(keyPass);
-			}
-			else if (config.getKeyStorePassStorageType() == KeyStorePassStorageType.MEMORY)
-				config.setKeyStoreKeyPassOverlay(keyPass);
-
-			signingState.setKeystoreSigner(file, alias, storePass, keyPass, type);
-		} catch (SignatureException e) {
-			log.error("Error loading keystore", e);
-			if (askShouldRetry("error.KeyStore"))
-				this.run(); /* recurse */
-			else
-				this.setNextState(new BKUSelectionState(getStateMachine()));
-			return;
-		}
-
-		// OK
-		this.setNextState(new at.asit.pdfover.gui.workflow.states.SigningState(getStateMachine()));
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
-	 */
-	@Override
-	public void cleanUp() {
-		// No composite - no cleanup necessary
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.workflow.states.State#setMainWindowBehavior()
-	 */
-	@Override
-	public void updateMainWindowBehavior() {
-		MainWindowBehavior behavior = getStateMachine().status.behavior;
-		behavior.reset();
-		behavior.setActive(Buttons.OPEN, true);
-		behavior.setActive(Buttons.POSITION, true);
-		behavior.setActive(Buttons.SIGN, true);
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getName();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/LocalBKUState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/LocalBKUState.java
deleted file mode 100644
index f1bfa5b9..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/LocalBKUState.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-// Imports
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpException;
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.httpclient.methods.PostMethod;
-import org.eclipse.swt.SWT;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.MainWindow.Buttons;
-import at.asit.pdfover.gui.MainWindowBehavior;
-import at.asit.pdfover.gui.bku.BKUHelper;
-import at.asit.pdfover.gui.bku.LocalBKUConnector;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.Status;
-import at.asit.pdfover.signer.pdfas.PdfAs4SigningState;
-
-/**
- * Logical state for performing the BKU Request to a local BKU
- */
-public class LocalBKUState extends State {
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(LocalBKUState.class);
-
-	/**
-	 * HTTP Response server HEADER
-	 */
-	public final static String BKU_RESPONSE_HEADER_SERVER = "server";
-
-	/**
-	 * HTTP Response user-agent HEADER
-	 */
-	public final static String BKU_RESPONSE_HEADER_USERAGENT = "user-agent";
-
-	/**
-	 * HTTP Response SignatureLayout HEADER
-	 */
-	public final static String BKU_RESPONSE_HEADER_SIGNATURE_LAYOUT = "SignatureLayout";
-
-	Exception threadException = null;
-
-	/** Whether to use Base64 or FileUpload Request */
-	boolean useBase64Request = false;
-
-	/**
-	 * Null-Operation SL-Request
-	 */
-	private final static String NULL_OPERATION_REQUEST = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
-			"<sl:NullOperationRequest xmlns:sl=\"http://www.buergerkarte.at/namespaces/securitylayer/1.2#\"/>";
-
-	/**
-	 * Constructor
-	 * @param stateMachine the StateMachine
-	 */
-	public LocalBKUState(StateMachine stateMachine) {
-		super(stateMachine);
-	}
-
-	/**
-	 *
-	 */
-	private final class SignLocalBKUThread implements Runnable {
-
-		private LocalBKUState state;
-		private PdfAs4SigningState signingState;
-
-
-		/**
-		 * @param localBKUState
-		 * @param signingState
-		 */
-		public SignLocalBKUThread(LocalBKUState localBKUState, PdfAs4SigningState signingState) {
-			this.state = localBKUState;
-			this.signingState = signingState;
-		}
-
-		@Override
-		public void run() {
-			try {
-
-				HttpClient client = (HttpClient) BKUHelper.getHttpClient();
-
-				PostMethod method = new PostMethod(Constants.LOCAL_BKU_URL);
-
-				String sl_request = NULL_OPERATION_REQUEST;
-				method.addParameter("XMLRequest", sl_request);
-				int returnCode = client.executeMethod(method);
-
-				if (returnCode != HttpStatus.SC_OK) {
-					this.state.threadException = new HttpException(
-							method.getResponseBodyAsString());
-				} else {
-					String server = getResponseHeader(method, BKU_RESPONSE_HEADER_SERVER);
-					if ((server != null) && (server.contains("trustDeskbasic") || server.contains("asignSecurityLayer")))
-						LocalBKUState.this.useBase64Request = true;
-
-					this.signingState.signatureResponse = method.getResponseBodyAsString();
-					this.signingState.useBase64Request = LocalBKUState.this.useBase64Request;
-				}
-			} catch (Exception e) {
-				log.error("SignLocalBKUThread: ", e);
-
-				this.state.threadException = e;
-			} finally {
-				this.state.updateStateMachine();
-			}
-		}
-
-		/**
-		 * Returns the value corresponding to the given header name
-		 * @param method the HTTP method
-		 * @param headerName the header name
-		 * @return the header value (or null if not found)
-		 */
-		private String getResponseHeader(HttpMethod method, String headerName) {
-			if (method.getResponseHeader(headerName) == null)
-				return null;
-			return method.getResponseHeader(headerName).getValue();
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.workflow.WorkflowState#update(at.asit.pdfover.gui
-	 * .workflow.Workflow)
-	 */
-	@Override
-	public void run() {
-		Status status = getStateMachine().status;
-
-		PdfAs4SigningState signingState = status.signingState;
-
-		if ((signingState.signatureResponse == null)
-				&& this.threadException == null) {
-			Thread t = new Thread(new SignLocalBKUThread(this, signingState));
-			t.start();
-			return;
-		}
-		signingState.bkuConnector = new LocalBKUConnector();
-
-		if (this.threadException != null) {
-			ErrorDialog dialog = new ErrorDialog(
-					getStateMachine().getMainShell(),
-					Messages.getString("error.LocalBKU"),
-					BUTTONS.RETRY_CANCEL);
-			if (dialog.open() != SWT.RETRY) {
-				//getStateMachine().exit();
-				this.setNextState(new BKUSelectionState(getStateMachine()));
-				return;
-			}
-			this.threadException = null;
-			this.run();
-			return;
-		}
-
-		// OK
-		this.setNextState(new at.asit.pdfover.gui.workflow.states.SigningState(getStateMachine()));
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
-	 */
-	@Override
-	public void cleanUp() {
-		// No composite - no cleanup necessary
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.workflow.states.State#setMainWindowBehavior()
-	 */
-	@Override
-	public void updateMainWindowBehavior() {
-		MainWindowBehavior behavior = getStateMachine().status.behavior;
-		behavior.reset();
-		behavior.setActive(Buttons.OPEN, true);
-		behavior.setActive(Buttons.POSITION, true);
-		behavior.setActive(Buttons.SIGN, true);
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getName();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/MobileBKUState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/MobileBKUState.java
deleted file mode 100644
index d858c067..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/MobileBKUState.java
+++ /dev/null
@@ -1,668 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-import java.io.IOException;
-import java.net.ConnectException;
-import java.net.URI;
-import java.net.UnknownHostException;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-// Imports
-import at.asit.pdfover.signer.UserCancelledException;
-import at.asit.pdfover.signer.pdfas.PdfAs4SigningState;
-import at.asit.webauthn.PublicKeyCredential;
-import at.asit.webauthn.responsefields.AuthenticatorAssertionResponse;
-
-import org.apache.hc.client5.http.classic.methods.HttpGet;
-import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
-import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
-import org.apache.hc.client5.http.impl.classic.HttpClients;
-import org.apache.hc.core5.http.io.entity.EntityUtils;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.MainWindow.Buttons;
-import at.asit.pdfover.gui.MainWindowBehavior;
-import at.asit.pdfover.gui.bku.MobileBKUConnector;
-import at.asit.pdfover.gui.composites.WaitingComposite;
-import at.asit.pdfover.gui.composites.mobilebku.MobileBKUEnterNumberComposite;
-import at.asit.pdfover.gui.composites.mobilebku.MobileBKUEnterTANComposite;
-import at.asit.pdfover.gui.composites.mobilebku.MobileBKUFido2Composite;
-import at.asit.pdfover.gui.composites.mobilebku.MobileBKUFingerprintComposite;
-import at.asit.pdfover.gui.composites.mobilebku.MobileBKUQRComposite;
-import at.asit.pdfover.gui.composites.mobilebku.WaitingForAppComposite;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.Dialog.ICON;
-import at.asit.pdfover.gui.controls.Dialog;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.StateMachine;
-
-import static at.asit.pdfover.commons.Constants.ISNOTNULL;
-
-/**
- * Logical state for performing the BKU Request to the A-Trust Mobile BKU
- */
-public class MobileBKUState extends State {
-	static final Logger log = LoggerFactory.getLogger(MobileBKUState.class);
-
-	PdfAs4SigningState signingState;
-
-	public Exception threadException = null;
-
-	public MobileBKUState(StateMachine stateMachine) {
-		super(stateMachine);
-	}
-
-	MobileBKUEnterTANComposite mobileBKUEnterTANComposite = null;
-
-	WaitingForAppComposite waitingForAppComposite = null;
-	WaitingForAppComposite getWaitingForAppComposite() {
-		if (this.waitingForAppComposite == null) {
-			this.waitingForAppComposite = getStateMachine()
-					.createComposite(WaitingForAppComposite.class, SWT.RESIZE, this);
-		}
-
-		return this.waitingForAppComposite;
-	}
-
-	WaitingComposite waitingComposite = null;
-	WaitingComposite getWaitingComposite() {
-		if (this.waitingComposite == null) {
-			this.waitingComposite = getStateMachine()
-					.createComposite(WaitingComposite.class, SWT.RESIZE, this);
-		}
-
-		return this.waitingComposite;
-	}
-
-	MobileBKUEnterTANComposite getMobileBKUEnterTANComposite() {
-		if (this.mobileBKUEnterTANComposite == null) {
-			this.mobileBKUEnterTANComposite = getStateMachine()
-					.createComposite(MobileBKUEnterTANComposite.class, SWT.RESIZE, this);
-		}
-
-		return this.mobileBKUEnterTANComposite;
-	}
-
-	MobileBKUQRComposite mobileBKUQRComposite = null;
-	MobileBKUQRComposite getMobileBKUQRComposite() {
-		if (this.mobileBKUQRComposite == null) {
-			this.mobileBKUQRComposite = getStateMachine()
-					.createComposite(MobileBKUQRComposite.class, SWT.RESIZE, this);
-		}
-
-		return this.mobileBKUQRComposite;
-	}
-
-	MobileBKUEnterNumberComposite mobileBKUEnterNumberComposite = null;
-	MobileBKUEnterNumberComposite getMobileBKUEnterNumberComposite() {
-		if (this.mobileBKUEnterNumberComposite == null) {
-			this.mobileBKUEnterNumberComposite = getStateMachine()
-					.createComposite(MobileBKUEnterNumberComposite.class, SWT.RESIZE, this);
-		}
-
-		return this.mobileBKUEnterNumberComposite;
-	}
-
-	MobileBKUFingerprintComposite mobileBKUFingerprintComposite = null;
-	MobileBKUFingerprintComposite getMobileBKUFingerprintComposite() {
-		if (this.mobileBKUFingerprintComposite == null) {
-			this.mobileBKUFingerprintComposite = getStateMachine()
-					.createComposite(MobileBKUFingerprintComposite.class, SWT.RESIZE, this);
-		}
-
-		return this.mobileBKUFingerprintComposite;
-	}
-
-	MobileBKUFido2Composite mobileBKUFido2Composite = null;
-	MobileBKUFido2Composite getMobileBKUFido2Composite() {
-		if (this.mobileBKUFido2Composite == null) {
-			this.mobileBKUFido2Composite = getStateMachine()
-					.createComposite(MobileBKUFido2Composite.class, SWT.RESIZE, this);
-		}
-
-		return this.mobileBKUFido2Composite;
-	}
-
-	/**
-	 * @return the signingState
-	 */
-	public PdfAs4SigningState getSigningState() {
-		return this.signingState;
-	}
-
-	/**
-	 * Display an error message
-	 *
-	 * @param e
-	 *            the exception
-	 */
-	public void displayError(Exception e) {
-		String message = null;
-		if (e instanceof UnknownHostException)
-		{
-			log.error("Failed to resolve hostname", e);
-			message = Messages.formatString("error.CouldNotResolveHostname", e.getMessage());
-		} else if (e instanceof ConnectException) {
-			log.error("Failed to connect", e);
-			message = Messages.formatString("error.FailedToConnect", e.getMessage());
-		} else {
-			message = Messages.getString("error.Unexpected");
-			log.error(message, e);
-			String errormsg = e.getLocalizedMessage();
-			if (errormsg != null && !errormsg.isEmpty())
-				message += ": " + errormsg;
-		}
-		displayError(message);
-	}
-
-	/**
-	 * Display an error message
-	 *
-	 * @param message
-	 *            the error message
-	 */
-	public void displayError(final String message) {
-		log.error(message);
-		Display.getDefault().syncExec(() -> {
-			ErrorDialog error = new ErrorDialog(getStateMachine().getMainShell(), message, BUTTONS.OK);
-			error.open();
-		});
-	}
-
-	public void showInformationMessage(final @Nonnull String message) throws UserCancelledException {
-		Display.getDefault().syncCall(() -> {
-			Dialog dialog = new Dialog(getStateMachine().getMainShell(), Messages.getString("common.info"), message, BUTTONS.OK, ICON.INFORMATION);
-			int result = dialog.open();
-			if (result == SWT.CANCEL)
-				throw new UserCancelledException();
-			return true; /* dummy return to keep java happy */
-		});
-	}
-
-	/**
-	 * Show an error message to the user with "retry" or "cancel" as options
-	 * returns normally on "retry", throws UserCancelledException on "cancel"
-	 */
-	public void showRecoverableError(final @Nonnull String errorMessage) throws UserCancelledException {
-		Display.getDefault().syncCall(() -> {
-			ErrorDialog error = new ErrorDialog(getStateMachine().getMainShell(), errorMessage, BUTTONS.RETRY_CANCEL);
-			int result = error.open();
-			if (result == SWT.CANCEL)
-				throw new UserCancelledException();
-			return true; /* dummy return */
-		});
-	}
-
-	/**
-	 * Show an error message to the user with only an "ok" option;
-	 * throws UserCancelledException afterwards
-	 */
-	public void showUnrecoverableError(final @Nonnull String errorMessage) throws UserCancelledException {
-		Display.getDefault().syncCall(() -> {
-			ErrorDialog error = new ErrorDialog(getStateMachine().getMainShell(), errorMessage, BUTTONS.OK);
-			error.open();
-			throw new UserCancelledException();
-		});
-	}
-
-	public static class UsernameAndPassword {
-		public @CheckForNull String username;
-		public @CheckForNull String password;
-		public UsernameAndPassword() {}
-		public UsernameAndPassword(@Nullable String u, @Nullable String p) { this.username = u; this.password = p; }
-	}
-	public @Nonnull UsernameAndPassword getRememberedCredentials() {
-		UsernameAndPassword r = new UsernameAndPassword();
-		storeRememberedCredentialsTo(r);
-		return r;
-	}
-	public void storeRememberedCredentialsTo(@Nonnull UsernameAndPassword output) {
-		output.username = getStateMachine().configProvider.getDefaultMobileNumber();
-		output.password = getStateMachine().configProvider.getDefaultMobilePassword();
-	}
-
-	public void rememberCredentialsIfNecessary(@Nullable String username, @Nullable String password) {
-		if (getStateMachine().configProvider.getRememberMobilePassword())
-		{
-			getStateMachine().configProvider.setDefaultMobileNumberPersistent(username);
-			getStateMachine().configProvider.setDefaultMobilePasswordOverlay(password);
-		}
-	}
-	public void rememberCredentialsIfNecessary(@Nonnull UsernameAndPassword credentials) {
-		rememberCredentialsIfNecessary(credentials.username, credentials.password);
-	}
-
-	public void clearRememberedPassword() {
-		getStateMachine().configProvider.setDefaultMobilePasswordOverlay(null);
-	}
-
-	public @Nonnull UsernameAndPassword getCredentialsFromUser(@Nullable String currentUsername, @Nullable String errorMessage) throws UserCancelledException {
-		UsernameAndPassword r = new UsernameAndPassword(currentUsername, null);
-		getCredentialsFromUserTo(r, errorMessage);
-		return r;
-	}
-
-	private void updateRememberPasswordSetting(boolean enabled, boolean allowEnabling) {
-		final var config = getStateMachine().configProvider;
-		if (enabled == config.getRememberMobilePassword()) /* nothing to do here */
-			return;
-		if (enabled && !allowEnabling) /* do not allow "cancel" to set the remember checkbox */
-			return;
-		config.setRememberMobilePasswordPersistent(enabled);
-		if (!enabled) { /* clear remembered info */
-			config.setDefaultMobileNumberPersistent(null);
-			config.setDefaultMobilePasswordOverlay(null);
-		}
-	}
-
-	public void getCredentialsFromUserTo(@Nonnull UsernameAndPassword credentials, @Nullable String errorMessage) throws UserCancelledException {
-		Display.getDefault().syncCall(() -> {
-			MobileBKUEnterNumberComposite ui = this.getMobileBKUEnterNumberComposite();
-
-			if (!ui.userAck) { // We need number and password => show UI!
-				
-				if (errorMessage != null)
-					ui.setErrorMessage(errorMessage);
-				else
-					ui.setErrorMessage(Messages.getString("mobileBKU.aTrustDisclaimer"));
-
-				if ((ui.getMobileNumber() == null) || ui.getMobileNumber().isEmpty()) {
-					// set possible phone number
-					ui.setMobileNumber(credentials.username);
-				}
-
-				ui.setRememberPassword(getStateMachine().configProvider.getRememberMobilePassword());
-
-				ui.enableButton();
-				getStateMachine().display(ui);
-
-				Display display = getStateMachine().getMainShell().getDisplay();
-				while (!ui.userAck && !ui.userCancel) {
-					if (!display.readAndDispatch()) {
-						display.sleep();
-					}
-				}
-			}
-
-			updateRememberPasswordSetting(ui.isRememberPassword(), !ui.userCancel);
-
-			if (ui.userCancel) {
-				ui.userCancel = false;
-				throw new UserCancelledException();
-			}
-
-			// user hit ok
-			ui.userAck = false;
-
-			// get number and password from UI
-			credentials.username = ui.getMobileNumber();
-			credentials.password = ui.getMobilePassword();
-
-			// show waiting composite
-			getStateMachine().display(this.getWaitingComposite());
-
-			return true; /* dummy return for lambda type deduction */
-		});
-	}
-
-	public static class SMSTanResult {
-		public static enum ResultType { TO_FIDO2, SMSTAN };
-		public final @Nonnull ResultType type;
-		public final @CheckForNull String smsTan;
-
-		private SMSTanResult(@Nullable String smsTan) { this.type = ResultType.SMSTAN; this.smsTan = smsTan; }
-		private SMSTanResult(@Nonnull ResultType type) { this.type = type; this.smsTan = null; }
-	}
-
-	public @Nonnull SMSTanResult getSMSTanFromUser(final @Nonnull String referenceValue, final @Nullable URI signatureDataURI, final boolean showFido2, final @Nullable String errorMessage) throws UserCancelledException {
-		return ISNOTNULL(Display.getDefault().syncCall(() -> {
-			MobileBKUEnterTANComposite tan = getMobileBKUEnterTANComposite();
-			
-			tan.reset();
-			tan.setRefVal(referenceValue);
-			tan.setSignatureDataURI(signatureDataURI);
-			tan.setErrorMessage(errorMessage);
-			tan.setFIDO2Enabled(showFido2);
-			getStateMachine().display(tan);
-
-			Display display = getStateMachine().getMainShell().getDisplay();
-			while (!tan.isDone()) {
-				if (!display.readAndDispatch()) {
-					display.sleep();
-				}
-			}
-			getStateMachine().display(getWaitingComposite());
-
-			if (tan.isUserCancel())
-				throw new UserCancelledException();
-			
-			if (tan.isUserFido2())
-				return new SMSTanResult(SMSTanResult.ResultType.TO_FIDO2);
-			
-			return new SMSTanResult(tan.getTan());
-		}));
-	}
-
-	/**
-	 * start showing the QR code at the indicated URI
-	 * this method will return immediately */
-	public void showQRCode(final @Nonnull String referenceValue, @Nonnull URI qrCodeURI, @Nullable URI signatureDataURI, final boolean showSmsTan, final boolean showFido2, final @Nullable String errorMessage) {
-		byte[] qrCode;
-		try (final CloseableHttpClient httpClient = HttpClients.createDefault()) {
-			try (final CloseableHttpResponse response = httpClient.execute(new HttpGet(qrCodeURI))) {
-				qrCode = EntityUtils.toByteArray(response.getEntity());
-			}
-		} catch (IOException e) {
-			log.warn("Failed to load QR code.");
-			qrCode = null;
-		}
-		
-		final byte[] qrCodeCopy = qrCode; /* because java is silly */
-		Display.getDefault().syncExec(() -> {
-			MobileBKUQRComposite qr = getMobileBKUQRComposite();
-			qr.reset();
-
-			qr.setRefVal(referenceValue);
-			qr.setSignatureDataURI(signatureDataURI);
-			qr.setErrorMessage(errorMessage);
-			qr.setQR(qrCodeCopy);
-			qr.setSMSEnabled(showSmsTan);
-			qr.setFIDO2Enabled(showFido2);
-			getStateMachine().display(qr);
-		});
-	}
-
-	public enum QRResult {
-		/* the user has pressed the FIDO2 button */
-		TO_FIDO2,
-		/* the user has pressed the SMS button */
-		TO_SMS,
-		/* signalQRScanned has been called; this indicates that we should refresh the page */
-		UPDATE
-	};
-
-	public @Nonnull QRResult waitForQRCodeResult() throws UserCancelledException {
-		return ISNOTNULL(Display.getDefault().syncCall(() -> {
-			MobileBKUQRComposite qr = getMobileBKUQRComposite();
-
-			Display display = getStateMachine().getMainShell().getDisplay();
-			while (!qr.isDone()) {
-				if (!display.readAndDispatch()) {
-					display.sleep();
-				}
-			}
-
-			getStateMachine().display(this.getWaitingComposite());
-
-			if (qr.wasCancelClicked()) {
-				clearRememberedPassword();
-				throw new UserCancelledException();
-			}
-
-			if (qr.wasSMSClicked())
-				return QRResult.TO_SMS;
-			
-			if (qr.wasFIDO2Clicked())
-				return QRResult.TO_FIDO2;
-
-			return QRResult.UPDATE;
-		}));
-	}
-
-	/**
-	 * indicate that the long polling operation completed
-	 * (any ongoing waitForQRCodeResult call will then return)
-	 */
-	public void signalQRScanned() {
-		getMobileBKUQRComposite().signalPollingDone();
-	}
-
-	/**
-	 * start showing the "waiting for app" screen
-	 * this method will return immediately */
-	public void showWaitingForAppOpen(final @Nonnull String referenceValue, @Nullable URI signatureDataURI, final boolean showSmsTan, final boolean showFido2) {
-		Display.getDefault().syncExec(() -> {
-			WaitingForAppComposite wfa = getWaitingForAppComposite();
-			wfa.reset();
-
-			// TODO composite does not currently support: refval, signature data
-			wfa.setSMSEnabled(showSmsTan);
-			wfa.setFIDO2Enabled(showFido2);
-			getStateMachine().display(wfa);
-		});
-	}
-
-	public enum AppOpenResult {
-		/* the user has pressed the FIDO2 button */
-		TO_FIDO2,
-		/* the user has pressed the SMS button */
-		TO_SMS,
-		/* signalAppOpened has been called; this indicates that we should refresh the page */
-		UPDATE
-	};
-
-	public @Nonnull AppOpenResult waitForAppOpen() throws UserCancelledException {
-		return ISNOTNULL(Display.getDefault().syncCall(() -> {
-			WaitingForAppComposite wfa = getWaitingForAppComposite();
-
-			Display display = wfa.getDisplay();
-			while (!wfa.isDone()) {
-				if (!display.readAndDispatch())
-					display.sleep();
-			}
-
-			getStateMachine().display(this.getWaitingComposite());
-
-			if (wfa.wasCancelClicked()) {
-				clearRememberedPassword();
-				throw new UserCancelledException();
-			}
-
-			if (wfa.wasSMSClicked())
-				return AppOpenResult.TO_SMS;
-			
-			if (wfa.wasFIDO2Clicked())
-				return AppOpenResult.TO_FIDO2;
-
-			return AppOpenResult.UPDATE;
-		}));
-	}
-
-	/**
-	 * indicate that the long polling operation completed
-	 * (any ongoing waitForAppOpen call will then return)
-	 */
-	public void signalAppOpened() {
-		getWaitingForAppComposite().signalPollingDone();
-	}
-
-	public void showWaitingForAppBiometry(final @Nonnull String referenceValue, @Nullable URI signatureDataURI, final boolean showSmsTan, final boolean showFido2) {
-		Display.getDefault().syncExec(() -> {
-			MobileBKUFingerprintComposite bio = getMobileBKUFingerprintComposite();
-			bio.reset();
-
-			bio.setRefVal(referenceValue);
-			bio.signatureDataURI = signatureDataURI;
-			bio.setErrorMessage(null); // TODO
-			bio.setSMSEnabled(showSmsTan);
-			bio.setFIDO2Enabled(showFido2);
-			getStateMachine().display(bio);
-		});
-	}
-
-	// TODO can we maybe deduplicate the various waiting screens' logic?
-
-	public enum AppBiometryResult {
-		/* the user has pressed the FIDO2 button */
-		TO_FIDO2,
-		/* the user has pressed the SMS button */
-		TO_SMS,
-		/* signalAppBiometryDone has been called; this indicates that we should refresh the page */
-		UPDATE
-	};
-
-	public @Nonnull AppBiometryResult waitForAppBiometry() throws UserCancelledException {
-		return ISNOTNULL(Display.getDefault().syncCall(() -> {
-			MobileBKUFingerprintComposite bio = getMobileBKUFingerprintComposite();
-
-			Display display = bio.getDisplay();
-			while (!bio.isDone()) {
-				if (!display.readAndDispatch())
-					display.sleep();
-			}
-
-			getStateMachine().display(this.getWaitingComposite());
-
-			if (bio.wasCancelClicked()) {
-				clearRememberedPassword();
-				throw new UserCancelledException();
-			}
-
-			if (bio.wasSMSClicked())
-				return AppBiometryResult.TO_SMS;
-			
-			if (bio.wasFIDO2Clicked())
-				return AppBiometryResult.TO_FIDO2;
-
-			return AppBiometryResult.UPDATE;
-		}));
-	}
-
-	public void signalAppBiometryDone() {
-		getMobileBKUFingerprintComposite().signalPollingDone();
-	}
-
-	public static class FIDO2Result {
-		public static enum ResultType { TO_SMS, CREDENTIAL };
-		public final @Nonnull ResultType type;
-		public final @Nullable PublicKeyCredential<AuthenticatorAssertionResponse> credential;
-
-		private FIDO2Result(@Nonnull ResultType type) { this.type = type; this.credential = null; }
-		private FIDO2Result(@Nonnull PublicKeyCredential<AuthenticatorAssertionResponse> cred) { this.type = ResultType.CREDENTIAL; this.credential = cred; }
-	}
-
-	/**
-	 * prompts user for fido2 auth and blocks until result is available
-	 * @param fido2Options JSON data from A-Trust
-	 * @return
-	 * @throws UserCancelledException
-	 */
-	public @Nonnull FIDO2Result promptUserForFIDO2Auth(final @Nonnull String fido2Options, @Nullable URI signatureDataURI, final boolean showSmsTan) throws UserCancelledException {
-		return ISNOTNULL(Display.getDefault().syncCall(() -> {
-			MobileBKUFido2Composite fido2 = getMobileBKUFido2Composite();
-			fido2.initialize(fido2Options);
-			fido2.setSMSEnabled(showSmsTan);
-			fido2.setSignatureDataURI(signatureDataURI);
-			
-			getStateMachine().display(fido2);
-
-			Display display = fido2.getDisplay();
-			while (!fido2.isDone()) {
-				if (!display.readAndDispatch())
-					display.sleep();
-			}
-
-			getStateMachine().display(this.getWaitingComposite());
-
-			if (fido2.wasUserCancelClicked())
-				throw new UserCancelledException();
-			
-			if (fido2.wasUserSMSClicked())
-				return new FIDO2Result(FIDO2Result.ResultType.TO_SMS);
-			
-			return new FIDO2Result(ISNOTNULL(fido2.getResultingCredential()));
-		}));
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * at.asit.pdfover.gui.workflow.WorkflowState#update(at.asit.pdfover.gui
-	 * .workflow.Workflow)
-	 */
-	@Override
-	public void run() {
-		this.signingState = getStateMachine().status.signingState;
-
-		this.signingState.bkuConnector = new MobileBKUConnector(this);
-		this.signingState.useBase64Request = false;
-
-		if (this.threadException != null) {
-			displayError(this.threadException);
-			return;
-		}
-
-		getStateMachine().display(
-				this.getWaitingComposite());
-
-		this.setNextState(new SigningState(getStateMachine()));
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
-	 */
-	@Override
-	public void cleanUp() {
-		if (this.mobileBKUEnterNumberComposite != null)
-			this.mobileBKUEnterNumberComposite.dispose();
-		if (this.mobileBKUEnterTANComposite != null)
-			this.mobileBKUEnterTANComposite.dispose();
-		if (this.waitingComposite != null)
-			this.waitingComposite.dispose();
-		if (this.waitingForAppComposite != null)
-			this.waitingForAppComposite.dispose();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.workflow.states.State#setMainWindowBehavior()
-	 */
-	@Override
-	public void updateMainWindowBehavior() {
-		MainWindowBehavior behavior = getStateMachine().status.behavior;
-		behavior.reset();
-		behavior.setActive(Buttons.OPEN, true);
-		behavior.setActive(Buttons.POSITION, true);
-		behavior.setActive(Buttons.SIGN, true);
-		behavior.setEnabled(Buttons.OPEN, true);
-		behavior.setEnabled(Buttons.POSITION, true);
-		//behavior.setEnabled(Buttons.SIGN, true);
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getName();
-	}
-
-	/**
-	 * invoke state machine update in main thread
-	 */
-	public void invokeUpdate() {
-		getStateMachine().invokeUpdate();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java
deleted file mode 100644
index 12b16da7..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.List;
-
-import at.gv.egiz.pdfas.lib.impl.pdfbox2.placeholder.SignatureFieldsAndPlaceHolderExtractor;
-
-import org.apache.pdfbox.pdmodel.PDDocument;
-
-//Imports
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.MessageBox;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.MainWindow.Buttons;
-import at.asit.pdfover.gui.bku.LocalBKUConnector;
-import at.asit.pdfover.gui.MainWindowBehavior;
-import at.asit.pdfover.gui.PlaceholderSelectionGui;
-import at.asit.pdfover.gui.composites.DataSourceSelectComposite;
-import at.asit.pdfover.gui.utils.SWTUtils;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.commons.Profile;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.Status;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.signer.SignaturePosition;
-import at.gv.egiz.pdfas.lib.impl.placeholder.SignaturePlaceholderData;
-
-
-
-import org.apache.commons.configuration.PropertiesConfiguration;
-import org.apache.commons.configuration.PropertiesConfigurationLayout;
-
-
-/**
- * Selects the data source for the signature process.
- */
-public class OpenState extends State {
-
-	/**
-	 * @param stateMachine
-	 */
-	public OpenState(StateMachine stateMachine) {
-		super(stateMachine);
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(OpenState.class);
-	private static final String advancedConfig = Constants.CONFIG_DIRECTORY + File.separator + "/cfg/advancedconfig.properties";
-
-	private DataSourceSelectComposite selectionComposite = null;
-
-	private DataSourceSelectComposite getSelectionComposite() {
-		if (this.selectionComposite == null) {
-			this.selectionComposite =
-					getStateMachine().createComposite(DataSourceSelectComposite.class, SWT.RESIZE, this);
-		}
-		return this.selectionComposite;
-	}
-
-	@Override
-	public void run() {
-		ConfigurationManager config = getStateMachine().configProvider;
-		Status status = getStateMachine().status;
-		if (!(status.getPreviousState() instanceof PrepareConfigurationState)
-				&& !(status.getPreviousState() instanceof OpenState)) {
-			status.bku = config.getDefaultBKU();
-			status.document = null;
-			status.signaturePosition = ((config.getSignatureProfile() == Profile.INVISIBLE) || config.getAutoPositionSignature()) ? (new SignaturePosition()) : null;
-
-			/* ensure that files get closed */
-			status.getPreviousState().cleanUp();
-		}
-
-		/* force static initialization and start polling */
-		LocalBKUConnector.IsAvailable();
-
-		if (status.document == null) {
-			DataSourceSelectComposite selection = this.getSelectionComposite();
-
-			getStateMachine().display(selection);
-			selection.layout();
-
-			status.document = selection.getSelected();
-
-			if (status.document == null) {
-				// Not selected yet
-				return;
-			}
-		}
-		log.debug("Got Datasource: " + getStateMachine().status.document.getAbsolutePath());
-
-		// scan for signature placeholders
-		// - see if we want to scan for placeholders in the settings
-		if (config.getEnablePlaceholderUsage()) {
-			try (PDDocument pddocument = PDDocument.load(getStateMachine().status.document)) {
-				// - scan for placeholders
-				boolean useSignatureFields = config.getUseSignatureFields();
-				boolean useMarker = config.getUseMarker();
-				log.debug("Placeholder usage enabled. Signature fields: {}, QR Markers: {}", useSignatureFields, useMarker);
-				//first check the signature fields placeholder
-				if (useSignatureFields) {
-
-					List<String> fields = SignatureFieldsAndPlaceHolderExtractor.findEmptySignatureFields(pddocument);
-
-					if (fields.size() > 0) {
-						while (true)
-						{
-							// create a dialog with ok and cancel buttons and a question
-							// icon
-							MessageBox dialog = new MessageBox(getStateMachine().getMainShell(),
-									SWT.ICON_QUESTION | SWT.YES | SWT.NO | SWT.CANCEL);
-							SWTUtils.setLocalizedText(dialog, "dataSourceSelection.usePlaceholderTitle");
-							dialog.setMessage(Messages.getString("dataSourceSelection.usePlaceholderText"));
-
-							// open dialog and await user selection
-							int result = dialog.open();
-							if (result == SWT.YES) {
-
-								if (fields.size() == 1) {
-									addPlaceholderSelectionToConfig(fields.get(0));
-									this.setNextState(new BKUSelectionState(getStateMachine()));
-									return;
-
-								} else if (fields.size() > 1) {
-
-									PlaceholderSelectionGui gui = new PlaceholderSelectionGui(
-											getStateMachine().getMainShell(), 65570, "text",
-											"select the fields", fields);
-									int res = gui.open();
-									if (res != -1) {
-										getStateMachine().status.searchForPlacehoderSignature = true;
-										addPlaceholderSelectionToConfig(fields.get(res));
-										this.setNextState(new BKUSelectionState(getStateMachine()));
-									}
-									else
-										continue;
-								}
-
-							} else if (result == SWT.NO) {
-								getStateMachine().status.searchForPlacehoderSignature = false;
-							} else {
-								status.document = null;
-								return;
-							}
-							break;
-						}
-					}
-					// second check if qr code placeholder search is enabled
-				} else if (useMarker) {
-
-					SignaturePlaceholderData signaturePlaceholderData = SignatureFieldsAndPlaceHolderExtractor.getNextUnusedSignaturePlaceHolder(pddocument);
-
-					if (null != signaturePlaceholderData) {
-
-						// create a dialog with ok and cancel buttons and a question icon
-						MessageBox dialog = new MessageBox(getStateMachine().getMainShell(),
-								SWT.ICON_QUESTION | SWT.YES | SWT.NO | SWT.CANCEL);
-						SWTUtils.setLocalizedText(dialog, "dataSourceSelection.usePlaceholderTitle");
-						dialog.setMessage(Messages.getString("dataSourceSelection.usePlaceholderText"));
-
-						// open dialog and await user selection
-						int result = dialog.open();
-						if (result == SWT.YES) {
-
-							// if the user chooses to use the signature placeholder
-							// - fill the position information so that we skip to
-							// the
-							// next stages without breaking stuff
-							status.signaturePosition = new SignaturePosition(
-									signaturePlaceholderData.getTablePos().getPosX(),
-									signaturePlaceholderData.getTablePos().getPosY(),
-									signaturePlaceholderData.getTablePos().getPage());
-
-							getStateMachine().status.searchForPlacehoderSignature = true;
-
-						} else if (result == SWT.NO) {
-							getStateMachine().status.searchForPlacehoderSignature = false;
-						} else {
-							status.document = null;
-							return;
-						}
-						// TODO: why does this use a different logic (via PositioningState) than the signature placeholders?
-					}
-
-				} else {
-					// Do nothing
-				}
-
-			} catch (IOException e) {
-				// fail silently. In case we got here no dialog has been shown.
-				// Just
-				// proceed with the usual process.
-			}
-		}
-
-		this.setNextState(new PositioningState(getStateMachine()));
-	}
-
-	/**
-	 * The selected placeholder is added to the configuration file
-	 * @param selection
-	 */
-	private void addPlaceholderSelectionToConfig(String selection) {
-		try {
-	        PropertiesConfiguration config = new PropertiesConfiguration();
-	        PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout(config);
-	        layout.load(new InputStreamReader(new FileInputStream(advancedConfig)));
-
-	        config.setProperty(Constants.SIGNATURE_FIELD_NAME_CONF, selection);
-	        layout.save(new FileWriter(advancedConfig, false));
-
-		} catch (Exception e) {
-			log.error("Failed to add placeholder selection to config", e);
-		}
-
-	}
-
-	/**
-	 * Open the input document selection dialog
-	 */
-	public void openFileDialog() {
-		if (this.selectionComposite != null)
-			this.selectionComposite.openFileDialog();
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
-	 */
-	@Override
-	public void cleanUp() {
-		if (this.selectionComposite != null)
-			this.selectionComposite.dispose();
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#setMainWindowBehavior()
-	 */
-	@Override
-	public void updateMainWindowBehavior() {
-		MainWindowBehavior behavior = getStateMachine().status.behavior;
-		behavior.reset();
-		behavior.setEnabled(Buttons.CONFIG, true);
-		behavior.setEnabled(Buttons.OPEN, true);
-		behavior.setActive(Buttons.OPEN, true);
-	}
-
-	@Override
-	public String toString()  {
-		return this.getClass().getName();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java
deleted file mode 100644
index 308b7d5a..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-//Imports
-import java.io.File;
-
-import org.eclipse.swt.SWT;
-
-import at.asit.pdfover.gui.MainWindow.Buttons;
-import at.asit.pdfover.gui.MainWindowBehavior;
-import at.asit.pdfover.gui.composites.OutputComposite;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.Status;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-
-/**
- * Produces the output of the signature process. (save file, open file)
- */
-public class OutputState extends State {
-
-	private OutputComposite outputComposite = null;
-
-	/**
-	 * @param stateMachine
-	 */
-	public OutputState(StateMachine stateMachine) {
-		super(stateMachine);
-	}
-
-	private OutputComposite getOutputComposite() {
-		if (this.outputComposite == null) {
-			this.outputComposite = getStateMachine()
-					.createComposite(OutputComposite.class, SWT.RESIZE, this);
-
-			ConfigurationManager config = getStateMachine().configProvider;
-			Status status = getStateMachine().status;
-
-			File tmpDir = new File(Constants.CONFIG_DIRECTORY + File.separator + "tmp");
-
-			if(!tmpDir.exists()) {
-				tmpDir.mkdir();
-			}
-
-			this.outputComposite.setOutputDir(config.getDefaultOutputFolder());
-			this.outputComposite.setSaveFilePostFix(config.getSaveFilePostFix());
-			this.outputComposite.setTempDir(tmpDir.getAbsolutePath());
-			this.outputComposite.setInputFile(status.document);
-
-			this.outputComposite.setSignedDocument(status.signResult.getSignedDocument());
-
-			// Save signed document
-			this.outputComposite.saveDocument();
-
-			if (config.getSkipFinish() && this.outputComposite.getSaveSuccessful()) {
-				getStateMachine().exit();
-			}
-		}
-
-		return this.outputComposite;
-	}
-
-	@Override
-	public void run() {
-		Status status = getStateMachine().status;
-
-		if (status.signResult == null) {
-			ErrorDialog error = new ErrorDialog(getStateMachine().getMainShell(),
-					Messages.getString("error.Signatur"), BUTTONS.RETRY_CANCEL);
-			if(error.open() == SWT.RETRY) {
-				this.setNextState(new PrepareSigningState(getStateMachine()));
-			} else {
-				this.setNextState(new BKUSelectionState(getStateMachine()));
-			}
-			return;
-		}
-
-		OutputComposite outputComposite = this.getOutputComposite();
-
-		// Display dialog
-		getStateMachine().display(outputComposite);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
-	 */
-	@Override
-	public void cleanUp() {
-
-		getStateMachine().status.signResult = null;
-
-		if (this.outputComposite != null)
-			this.outputComposite.dispose();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.workflow.states.State#setMainWindowBehavior()
-	 */
-	@Override
-	public void updateMainWindowBehavior() {
-		MainWindowBehavior behavior = getStateMachine().status.behavior;
-		behavior.reset();
-		behavior.setEnabled(Buttons.CONFIG, true);
-		behavior.setEnabled(Buttons.OPEN, true);
-		behavior.setEnabled(Buttons.POSITION, true);
-		behavior.setEnabled(Buttons.SIGN, true);
-		behavior.setActive(Buttons.OPEN, true);
-		behavior.setActive(Buttons.POSITION, true);
-		behavior.setActive(Buttons.SIGN, true);
-		behavior.setActive(Buttons.FINAL, true);
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getName();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java
deleted file mode 100644
index b56fb6d7..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-//Imports
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
-import org.eclipse.swt.SWT;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.MainWindow.Buttons;
-import at.asit.pdfover.gui.MainWindowBehavior;
-import at.asit.pdfover.gui.composites.PositioningComposite;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.Status;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.signer.Emblem;
-import at.asit.pdfover.signer.SignaturePosition;
-import at.asit.pdfover.signer.pdfas.PdfAs4SignatureParameter;
-import at.asit.pdfover.signer.pdfas.PdfAs4SignaturePlaceholder;
-
-/**
- * Decides where to position the signature block
- */
-public class PositioningState extends State {
-
-	/**
-	 * @param stateMachine
-	 */
-	public PositioningState(StateMachine stateMachine) {
-		super(stateMachine);
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	private static final Logger log = LoggerFactory.getLogger(PositioningState.class);
-
-	private PositioningComposite positionComposite = null;
-
-	private SignaturePosition previousPosition = null;
-
-
-	private File loadedDocumentPath = null;
-	private PDDocument document = null;
-
-	private void closePDFDocument() {
-
-		if (this.document != null)
-		{
-			try { this.document.close(); } catch (IOException e) { log.warn("Failed to close PDF", e); }
-			this.document = null;
-		}
-		this.loadedDocumentPath = null;
-	}
-
-	private void openPDFDocument() throws IOException {
-		closePDFDocument();
-		File documentPath = getStateMachine().status.document;
-		PDDocument pdf = null;
-		try
-		{
-			pdf = PDDocument.load(documentPath);
-			if (pdf.getNumberOfPages() > 0)
-				pdf.getPage(0);
-			else
-				throw new IOException();
-		}
-		catch (InvalidPasswordException e) {
-			throw new IOException(Messages.getString("error.PDFPwdProtected"), e);
-		}
-		catch (IOException e) {
-			throw new IOException(Messages.getString("error.MayNotBeAPDF"), e);
-		}
-		this.document = pdf;
-		this.loadedDocumentPath = documentPath;
-	}
-
-	private PositioningComposite getPositioningComposite(PDDocument document) {
-		StateMachine stateMachine = getStateMachine();
-		if (this.positionComposite == null) {
-			this.positionComposite =
-					stateMachine.createComposite(PositioningComposite.class, SWT.RESIZE, this);
-			log.debug("Displaying " +  stateMachine.status.document);
-			this.positionComposite.displayDocument(document);
-		}
-
-		ConfigurationManager config = stateMachine.configProvider;
-
-		PdfAs4SignatureParameter param = new PdfAs4SignatureParameter();
-		param.signatureProfile = config.getSignatureProfile();
-
-		String emblemPath = config.getDefaultEmblemPath();
-		if (emblemPath != null && !emblemPath.trim().isEmpty())
-			param.emblem = new Emblem(emblemPath);
-		if (config.getSignatureNote() != null && !config.getSignatureNote().isEmpty())
-			param.signatureNote = config.getSignatureNote();
-
-		param.signatureLanguage = config.getSignatureLocale().getLanguage();
-		param.enablePDFACompat = config.getSignaturePdfACompat();
-		param.targetLogoSize = Math.min(120.0, config.getLogoOnlyTargetSize()); // TODO WORKAROUND FOR #117
-
-		PdfAs4SignaturePlaceholder.For(param, (p) -> {
-			if (p.hasImage())
-				this.positionComposite.setPlaceholder(p.getAWTImage());
-		});
-
-		if (this.previousPosition != null && !this.previousPosition.useAutoPositioning())
-		{
-			this.positionComposite.setPosition(
-					this.previousPosition.getX(),
-					this.previousPosition.getY(),
-					this.previousPosition.getPage());
-		}
-
-		return this.positionComposite;
-	}
-
-	@Override
-	public void run() {
-		Status status = getStateMachine().status;
-		if (!(status.getPreviousState() instanceof PositioningState) &&
-			!(status.getPreviousState() instanceof OpenState))
-		{
-			this.previousPosition = status.signaturePosition;
-			status.signaturePosition = null;
-		}
-
-		if ((this.document == null) ||
-				(this.loadedDocumentPath != getStateMachine().status.document)) {
-			log.debug("Checking PDF document for encryption");
-			try {
-				openPDFDocument();
-			} catch (IOException e) {
-				this.positionComposite = null;
-				log.error("Failed to display PDF document", e);
-				String message = e.getLocalizedMessage();
-				if (message == null)
-					message = Messages.getString("error.IOError");
-				ErrorDialog dialog = new ErrorDialog(
-						getStateMachine().getMainShell(),
-						message, BUTTONS.RETRY_CANCEL);
-				if(dialog.open() == SWT.RETRY) {
-					run();
-				} else {
-					setNextState(new OpenState(getStateMachine()));
-				}
-				return;
-			}
-		}
-
-		if (status.signaturePosition == null) {
-			PositioningComposite position = null;
-			try {
-				position = this.getPositioningComposite(this.document);
-			} catch(Exception ex) {
-				log.error("Failed to create composite (probably a mac...)", ex);
-				ErrorDialog dialog = new ErrorDialog(
-						getStateMachine().getMainShell(),
-						Messages.getString("error.PositioningNotPossible"), BUTTONS.OK);
-				dialog.open();
-				status.signaturePosition = new SignaturePosition();
-				this.setNextState(new BKUSelectionState(getStateMachine()));
-				return;
-			}
-
-			getStateMachine().display(position);
-
-			status.signaturePosition = position.getPosition();
-
-			if(status.signaturePosition != null) {
-				this.setNextState(new BKUSelectionState(getStateMachine()));
-			}
-
-			this.positionComposite.requestFocus();
-		} else {
-			this.setNextState(new BKUSelectionState(getStateMachine()));
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
-	 */
-	@Override
-	public void cleanUp() {
-		if (this.positionComposite != null)
-			this.positionComposite.dispose();
-		closePDFDocument();
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#setMainWindowBehavior()
-	 */
-	@Override
-	public void updateMainWindowBehavior() {
-		MainWindowBehavior behavior = getStateMachine().status.behavior;
-		behavior.reset();
-		behavior.setEnabled(Buttons.CONFIG, true);
-		behavior.setEnabled(Buttons.OPEN, true);
-		behavior.setActive(Buttons.OPEN, true);
-		behavior.setActive(Buttons.POSITION, true);
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getName();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareConfigurationState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareConfigurationState.java
deleted file mode 100644
index 87693c19..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareConfigurationState.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-//Imports
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-
-import org.eclipse.swt.SWT;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.commons.Constants;
-import at.asit.pdfover.gui.cliarguments.*;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.gui.exceptions.InitializationException;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.utils.UpdateCheckManager;
-import at.asit.pdfover.gui.utils.VersionComparator;
-import at.asit.pdfover.gui.utils.Zipper;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.Status;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.signer.SignaturePosition;
-
-/**
- * Starting state of workflow proccess
- *
- * Reads configuration, command arguments and initializes configured variables
- */
-public class PrepareConfigurationState extends State {
-
-	/** SLF4J Logger instance **/
-	static final Logger log = LoggerFactory.getLogger(PrepareConfigurationState.class);
-
-	private ArgumentHandler handler;
-
-	private ArgumentHandler configFileHandler;
-
-	/**
-	 * @param stateMachine
-	 */
-	public PrepareConfigurationState(StateMachine stateMachine) {
-		super(stateMachine);
-		this.handler = new ArgumentHandler(getStateMachine());
-		this.handler.addCLIArgument(HelpArgument.class);
-		this.handler.addCLIArgument(InputDocumentArgument.class);
-		this.handler.addCLIArgument(OutputFolderArgument.class);
-		this.handler.addCLIArgument(BKUArgument.class);
-		this.handler.addCLIArgument(PhoneNumberArgument.class);
-		this.handler.addCLIArgument(PasswordArgument.class);
-		this.handler.addCLIArgument(KeystoreFileArgument.class);
-		this.handler.addCLIArgument(KeystoreTypeArgument.class);
-		this.handler.addCLIArgument(KeystoreStorePassArgument.class);
-		this.handler.addCLIArgument(KeystoreAliasArgument.class);
-		this.handler.addCLIArgument(KeystoreKeyPassArgument.class);
-		this.handler.addCLIArgument(ProxyHostArgument.class);
-		this.handler.addCLIArgument(ProxyPortArgument.class);
-		this.handler.addCLIArgument(ProxyUserArgument.class);
-		this.handler.addCLIArgument(ProxyPassArgument.class);
-		this.handler.addCLIArgument(EmblemArgument.class);
-		this.handler.addCLIArgument(AutomaticPositioningArgument.class);
-		this.handler.addCLIArgument(SkipFinishArgument.class);
-		// adding config file argument to this handler so it appears in help
-		this.handler.addCLIArgument(ConfigFileArgument.class);
-		this.handler.addCLIArgument(InvisibleProfile.class);
-
-		this.configFileHandler = new ArgumentHandler(getStateMachine());
-		this.configFileHandler.addCLIArgument(ConfigFileArgument.class);
-	}
-
-	private void initializeFromConfigurationFile() throws InitializationException {
-		try {
-			getStateMachine().configProvider.loadFromDisk();
-		} catch (IOException ex) {
-			throw new InitializationException("Failed to read configuration from config file", ex);
-		}
-	}
-
-	private void initializeFromArguments(String[] args, ArgumentHandler handler) throws InitializationException {
-		handler.handleArguments(args);
-
-		if (handler.doesRequireExit()) {
-			getStateMachine().exit();
-		}
-	}
-
-	private void ensurePdfOverConfigExists() throws InitializationException {
-		try {
-			File pdfOverConfig = new File(Constants.CONFIG_DIRECTORY + File.separator + Constants.DEFAULT_CONFIG_FILENAME);
-			if (!pdfOverConfig.exists())
-				pdfOverConfig.createNewFile();
-		} catch (Exception e) {
-			log.error("Failed to create PDF-Over config file", e);
-			throw new InitializationException("Failed to create PDF-Over config file", e);
-		}
-	}
-
-	private void unzipPdfAsConfig(File configDir) throws InitializationException {
-		InputStream is = getClass().getResourceAsStream(Constants.RES_CFG_ZIP);
-
-		try {
-			Zipper.unzip(is, configDir.getAbsolutePath());
-		} catch (IOException e) {
-			log.error(
-					"Failed to create local configuration directory!", e);
-			throw new InitializationException(
-					"Failed to create local configuration directory!",
-					e);
-		}
-	}
-
-	private static void updateVersionFile(File configDir) throws InitializationException {
-		File versionFile = new File(configDir, Constants.CONFIG_VERSION_FILENAME);
-		try {
-			BufferedWriter versionWriter = new BufferedWriter(new FileWriter(versionFile));
-			String version = Constants.APP_VERSION == null ? "Unknown" : Constants.APP_VERSION;
-			versionWriter.write(version);
-			versionWriter.close();
-		} catch (IOException e) {
-			log.error(
-					"Failed to create configuration version file!", e);
-			throw new InitializationException(
-					"Failed to create configuration version file!",
-					e);
-		}
-	}
-
-	private void createConfiguration(File configDir) throws InitializationException {
-		boolean allOK = false;
-
-		log.info("Creating configuration directory");
-		if (!configDir.exists()) {
-			configDir.mkdir();
-		}
-
-		try {
-			ensurePdfOverConfigExists();
-			unzipPdfAsConfig(configDir);
-			updateVersionFile(configDir);
-
-			allOK = true;
-		} finally {
-			if (!allOK) {
-				configDir.delete();
-			}
-		}
-	}
-
-	/**
-	 * @return The first valid (not empty, non comment) line of the version file
-	 *         or null if version file cannot be read or does not contain
-	 *         such a line.
-	 */
-	private static String getVersion(File versionFile) {
-		if (versionFile.exists() && versionFile.canRead()) {
-			BufferedReader versionReader = null;
-			try {
-				versionReader = new BufferedReader(new FileReader(versionFile));
-				String version;
-				while ((version = versionReader.readLine()) != null) {
-					version = version.trim();
-					if (version.length() > 0 && !version.startsWith("#")) {
-						log.trace("configuration version from " + versionFile
-								+ ": " + version);
-						return version;
-					}
-				}
-			} catch (IOException ex) {
-				log.error("failed to read configuration version from "
-						+ versionFile, ex);
-			} finally {
-				try {
-					if (versionReader != null)
-						versionReader.close();
-				} catch (IOException ex) {
-					// ignore
-				}
-			}
-		}
-		log.debug("unknown configuration version");
-		return null;
-	}
-
-	/**
-	 * Backup old configuration, create new
-	 * @param configDir
-	 * @throws InitializationException
-	 */
-	private void backupAndCreatePdfAsConfiguration(File configDir) throws InitializationException {
-		try {
-			File backup = File.createTempFile(Constants.PDF_AS_CONFIG_BACKUP_FILENAME, ".zip");
-			OutputStream os = new FileOutputStream(backup);
-			Zipper.zip(configDir + File.separator + "cfg", os, true);
-			os.close();
-			unzipPdfAsConfig(configDir);
-			File b = new File(configDir, Constants.PDF_AS_CONFIG_BACKUP_FILENAME + ".zip");
-			int i = 1;
-			while (b.exists()) {
-				b = new File(configDir, Constants.PDF_AS_CONFIG_BACKUP_FILENAME + i++ + ".zip");
-			}
-			backup.renameTo(b);
-			updateVersionFile(configDir);
-		} catch (FileNotFoundException e) {
-			log.error("Backup file not found", e);
-			throw new InitializationException("Backup file not found", e);
-		} catch (IOException e) {
-			log.error("Error creating configuration backup", e);
-			throw new InitializationException("Error creating configuration backup", e);
-		}
-	}
-
-	@Override
-	public void run() {
-		// Read config file
-		try {
-			StateMachine stateMachine = getStateMachine();
-			ConfigurationManager config = stateMachine.configProvider;
-			File configDir = new File(Constants.CONFIG_DIRECTORY);
-			File configFile = new File(configDir, Constants.DEFAULT_CONFIG_FILENAME);
-			if (!configDir.exists() || !configFile.exists()) {
-				log.debug("Creating configuration file");
-				createConfiguration(configDir);
-			} else {
-				log.debug("Configuration directory exists!");
-				// Check PDF-AS config version
-				File versionFile = new File(configDir, Constants.CONFIG_VERSION_FILENAME);
-				String configVersion = getVersion(versionFile);
-				if (configVersion == null || VersionComparator.before(configVersion, Constants.MIN_PDF_AS_CONFIG_VERSION))
-					backupAndCreatePdfAsConfiguration(configDir);
-			}
-
-
-			// Read cli arguments for config file location first
-			try {
-				initializeFromArguments(stateMachine.cmdLineArgs, this.configFileHandler);
-			} catch (InitializationException e) {
-				log.error("Error in cmd line arguments: ", e);
-				ErrorDialog error = new ErrorDialog(stateMachine.getMainShell(),
-						Messages.getString("error.CmdLineArgs") + "\n" +
-						e.getMessage(),
-						BUTTONS.OK);
-				error.open();
-				stateMachine.exit();
-			}
-
-			// initialize from config file
-			initializeFromConfigurationFile();
-
-			// Read cli arguments
-			try {
-				initializeFromArguments(stateMachine.cmdLineArgs, this.handler);
-			} catch (InitializationException e) {
-				log.error("Error in cmd line arguments: ", e);
-				ErrorDialog error;
-
-				if (e.getCause() instanceof FileNotFoundException) {
-					error = new ErrorDialog(stateMachine.getMainShell(),
-						String.format(
-								Messages.getString("error.FileNotExist"),
-								e.getCause().getMessage()),
-						BUTTONS.OK);
-				} else {
-					error = new ErrorDialog(stateMachine.getMainShell(),
-							Messages.getString("error.CmdLineArgs") + "\n" +
-							e.getMessage(),
-							BUTTONS.OK);
-				}
-				error.open();
-				stateMachine.exit();
-			}
-
-			// Check for updates
-			if (config.getUpdateCheck())
-				UpdateCheckManager.checkNow(stateMachine.getMainShell());
-
-			// Create PDF Signer
-			Status status = stateMachine.status;
-			status.bku = getStateMachine().configProvider.getDefaultBKU();
-			status.signaturePosition = getStateMachine().configProvider.getAutoPositionSignature() ? (new SignaturePosition()) : null;
-
-			setNextState(new OpenState(stateMachine));
-
-		} catch (Exception e) {
-			log.error("Failed to initialize: ", e);
-			ErrorDialog error = new ErrorDialog(
-				getStateMachine().getMainShell(),
-				Messages.getString("error.Initialization"),
-				BUTTONS.YES_NO
-			);
-			// error.setException(e);
-			// setNextState(error);
-			int selection = error.open();
-			if (selection == SWT.YES)
-				ConfigurationManager.factoryResetPersistentConfig();
-
-			getStateMachine().exit();
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
-	 */
-	@Override
-	public void cleanUp() {
-		// No composite - no cleanup necessary
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see at.asit.pdfover.gui.workflow.states.State#setMainWindowBehavior()
-	 */
-	@Override
-	public void updateMainWindowBehavior() {
-		// no behavior necessary yet
-	}
-
-	@Override
-	public String toString() {
-		return getClass().getName();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java
deleted file mode 100644
index 1669f2f8..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-//Imports
-import java.net.Authenticator;
-import java.net.PasswordAuthentication;
-
-import org.eclipse.swt.SWT;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.MainWindow.Buttons;
-import at.asit.pdfover.gui.MainWindowBehavior;
-import at.asit.pdfover.gui.composites.WaitingComposite;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.Status;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-import at.asit.pdfover.signer.Emblem;
-import at.asit.pdfover.signer.PDFFileDocumentSource;
-import at.asit.pdfover.signer.pdfas.PdfAs4SignatureParameter;
-import at.asit.pdfover.signer.pdfas.PdfAs4Signer;
-import at.asit.pdfover.signer.pdfas.PdfAs4SigningState;
-
-/**
- * User waiting state, wait for PDF Signator library to prepare document for
- * signing.
- */
-public class PrepareSigningState extends State {
-
-	/**
-	 * @param stateMachine
-	 */
-	public PrepareSigningState(StateMachine stateMachine) {
-		super(stateMachine);
-	}
-
-	private final class PrepareDocumentThread implements Runnable {
-
-		private PrepareSigningState state;
-
-		/**
-		 * Default constructor
-		 *
-		 * @param state
-		 */
-		public PrepareDocumentThread(PrepareSigningState state) {
-			this.state = state;
-		}
-
-		@Override
-		public void run() {
-			try {
-
-				Status status = this.state.getStateMachine().status;
-
-				ConfigurationManager configuration = this.state.getStateMachine().configProvider;
-
-				// SET PROXY HOST and PORT settings
-				final String proxyHost = configuration.getProxyHost();
-				final int proxyPort = configuration.getProxyPort();
-				final String proxyUser = configuration.getProxyUser();
-				final String proxyPass = configuration.getProxyPass();
-
-				if (proxyHost != null && !proxyHost.isEmpty()) {
-					log.debug("Setting proxy host to " + proxyHost);
-					System.setProperty("http.proxyHost", proxyHost);
-					System.setProperty("https.proxyHost", proxyHost);
-				}
-
-				if (proxyPort > 0 && proxyPort <= 0xFFFF) {
-					String port = Integer.toString(proxyPort);
-					log.debug("Setting proxy port to " + port);
-					System.setProperty("http.proxyPort", port);
-					System.setProperty("https.proxyPort", port);
-				}
-
-				if (proxyUser != null && !proxyUser.isEmpty()) {
-					log.debug("Setting proxy username to " + proxyUser);
-					System.setProperty("http.proxyUser", proxyUser);
-					System.setProperty("https.proxyUser", proxyUser);
-				}
-
-				if (proxyPass != null) {
-					log.debug("Setting proxy password");
-					System.setProperty("http.proxyPassword", proxyPass);
-					System.setProperty("https.proxyPassword", proxyPass);
-				}
-
-				if (proxyUser != null && !proxyUser.isEmpty() &&
-					proxyPass != null && !proxyPass.isEmpty()) {
-					log.debug("Enabling proxy authentication");
-					Authenticator.setDefault(new Authenticator() {
-						/* (non-Javadoc)
-						 * @see java.net.Authenticator#getPasswordAuthentication()
-						 */
-						@Override
-						protected PasswordAuthentication getPasswordAuthentication() {
-							if (getRequestorType() == RequestorType.PROXY) {
-								if (getRequestingHost().equalsIgnoreCase(proxyHost) &&
-									(getRequestingPort() == proxyPort)) {
-									return new PasswordAuthentication(proxyUser,
-											proxyPass.toCharArray());
-								}
-							}
-							return super.getPasswordAuthentication();
-						}
-					});
-				}
-
-				if (this.state.signatureParameter == null) {
-					this.state.signatureParameter = new PdfAs4SignatureParameter();
-				}
-
-				this.state.signatureParameter.inputDocument = new PDFFileDocumentSource(status.document);
-				this.state.signatureParameter.signatureDevice = status.bku;
-				if (status.signaturePosition != null) {
-					this.state.signatureParameter.signaturePosition = status.signaturePosition;
-				}
-
-				if (configuration.getDefaultEmblemPath() != null && !configuration.getDefaultEmblemPath().isEmpty()) {
-					this.state.signatureParameter.emblem = new Emblem(configuration.getDefaultEmblemPath());
-				}
-
-				if (configuration.getSignatureNote() != null && !configuration.getSignatureNote().isEmpty()) {
-					this.state.signatureParameter.signatureNote = configuration.getSignatureNote();
-				}
-
-				this.state.signatureParameter.searchForPlaceholderSignatures = getStateMachine().status.searchForPlacehoderSignature;
-				this.state.signatureParameter.signatureLanguage = configuration.getSignatureLocale().getLanguage();
-				this.state.signatureParameter.enablePDFACompat = configuration.getSignaturePdfACompat();
-				this.state.signatureParameter.signatureProfile = configuration.getSignatureProfile();
-				this.state.signatureParameter.targetLogoSize = configuration.getLogoOnlyTargetSize();
-
-				this.state.signingState = PdfAs4Signer.prepare(this.state.signatureParameter);
-
-			} catch (Exception e) {
-				log.error("PrepareDocumentThread: ", e);
-				this.state.threadException = e;
-			} finally {
-				this.state.updateStateMachine();
-			}
-		}
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(PrepareSigningState.class);
-
-	PdfAs4SignatureParameter signatureParameter;
-
-	private WaitingComposite waitingComposite = null;
-
-	private WaitingComposite getSelectionComposite() {
-		if (this.waitingComposite == null) {
-			this.waitingComposite = getStateMachine()
-					.createComposite(WaitingComposite.class, SWT.RESIZE, this);
-		}
-
-		return this.waitingComposite;
-	}
-
-	PdfAs4SigningState signingState = null;
-
-	Exception threadException = null;
-
-	@Override
-	public void run() {
-		WaitingComposite waiting = this.getSelectionComposite();
-
-		getStateMachine().display(waiting);
-
-		Status status = getStateMachine().status;
-
-		if (this.signatureParameter == null) {
-			this.signatureParameter = new PdfAs4SignatureParameter();
-		}
-
-		if (this.signingState == null && this.threadException == null) {
-			Thread t = new Thread(new PrepareDocumentThread(this));
-			t.start();
-			return;
-		}
-
-		if (this.threadException != null) {
-			ErrorDialog error = new ErrorDialog(getStateMachine()
-					.getMainShell(),
-					Messages.getString("error.PrepareDocument"),
-					BUTTONS.RETRY_CANCEL);
-			this.threadException = null;
-			if (error.open() == SWT.RETRY) {
-				run();
-			} else {
-				this.setNextState(new BKUSelectionState(getStateMachine()));
-			}
-			return;
-		}
-
-		// We got the Request set it into status and move on to next state ...
-		status.signingState = this.signingState;
-
-		switch (status.bku)
-		{
-			case LOCAL:
-				this.setNextState(new LocalBKUState(getStateMachine()));
-				break;
-			case MOBILE:
-				this.setNextState(new MobileBKUState(getStateMachine()));
-				break;
-			case KS:
-				this.setNextState(new KSState(getStateMachine()));
-				break;
-			default:
-				log.error("Invalid selected BKU Value \"{}\" in PrepareSigningState!", status.bku.name());
-				this.setNextState(new BKUSelectionState(getStateMachine()));
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
-	 */
-	@Override
-	public void cleanUp() {
-		if (this.waitingComposite != null)
-			this.waitingComposite.dispose();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#setMainWindowBehavior()
-	 */
-	@Override
-	public void updateMainWindowBehavior() {
-		MainWindowBehavior behavior = getStateMachine().status.behavior;
-		behavior.reset();
-		behavior.setActive(Buttons.OPEN, true);
-		behavior.setActive(Buttons.POSITION, true);
-		behavior.setActive(Buttons.SIGN, true);
-	}
-
-	@Override
-	public String toString() {
-		return this.getClass().getName();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/SigningState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/SigningState.java
deleted file mode 100644
index cf4d6d37..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/SigningState.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-//Imports
-import java.net.ConnectException;
-
-import org.eclipse.swt.SWT;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asit.pdfover.gui.MainWindowBehavior;
-import at.asit.pdfover.gui.MainWindow.Buttons;
-import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
-import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.commons.Messages;
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.Status;
-import at.asit.pdfover.signer.SignatureException;
-import at.asit.pdfover.signer.UserCancelledException;
-import at.asit.pdfover.signer.pdfas.PdfAs4Signer;
-
-/**
- * Logical state for signing process, usually show BKU Dialog during this state.
- */
-public class SigningState extends State {
-
-	/**
-	 *
-	 */
-	private final class FinishSignThread implements Runnable {
-
-		private SigningState state;
-
-		/**
-		 * @param signingState
-		 */
-		public FinishSignThread(SigningState signingState) {
-			this.state = signingState;
-		}
-
-		@Override
-		public void run() {
-			try {
-				Status status = this.state.getStateMachine().status;
-				status.signResult = PdfAs4Signer.sign(status.signingState);
-			} catch(Exception e) {
-				this.state.threadException = e;
-			} finally {
-				this.state.updateStateMachine();
-			}
-		}
-	}
-
-	/**
-	 * @param stateMachine
-	 */
-	public SigningState(StateMachine stateMachine) {
-		super(stateMachine);
-	}
-
-	/**
-	 * SLF4J Logger instance
-	 **/
-	static final Logger log = LoggerFactory.getLogger(SigningState.class);
-
-	Exception threadException = null;
-
-	@Override
-	public void run() {
-		Status status = getStateMachine().status;
-
-		if(status.signResult == null &&
-			this.threadException == null) {
-			Thread t = new Thread(new FinishSignThread(this));
-			t.start();
-			return;
-		}
-
-		if(this.threadException != null) {
-			String message = Messages.getString("error.Signatur");
-			if (this.threadException instanceof SignatureException) {
-				Throwable cause = this.threadException;
-				while (cause.getCause() != null)
-					cause = cause.getCause();
-				if (cause instanceof ConnectException)
-					message += ": " + cause.getMessage();
-				if (cause instanceof IllegalStateException) {
-					// TODO legacy hack
-					this.threadException = new UserCancelledException();
-				}
-			}
-			if (this.threadException instanceof UserCancelledException) {
-				// don't display error, clear remembered password and go back to BKU Selection
-				if (this.getConfig().getRememberMobilePassword())
-					this.getConfig().setDefaultMobilePasswordOverlay(null);
-				this.setNextState(new BKUSelectionState(getStateMachine()));
-				return;
-			}
-
-			// if we have gotten to this point, this is an actual exception
-			log.error("FinishSignThread: ", this.threadException);
-
-			ErrorDialog error = new ErrorDialog(getStateMachine().getMainShell(),
-					message, BUTTONS.RETRY_CANCEL);
-			this.threadException = null;
-			if(error.open() == SWT.RETRY) {
-				this.setNextState(new PrepareSigningState(getStateMachine()));
-			} else {
-				this.setNextState(new BKUSelectionState(getStateMachine()));
-			}
-			return;
-		}
-
-		this.setNextState(new OutputState(getStateMachine()));
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
-	 */
-	@Override
-	public void cleanUp() {
-		// No composite - no cleanup necessary
-	}
-
-	/* (non-Javadoc)
-	 * @see at.asit.pdfover.gui.workflow.states.State#setMainWindowBehavior()
-	 */
-	@Override
-	public void updateMainWindowBehavior() {
-		MainWindowBehavior behavior = getStateMachine().status.behavior;
-		behavior.reset();
-		behavior.setActive(Buttons.OPEN, true);
-		behavior.setActive(Buttons.POSITION, true);
-		behavior.setActive(Buttons.SIGN, true);
-		//behavior.setEnabled(Buttons.OPEN, true);
-		//behavior.setEnabled(Buttons.POSITION, true);
-		//behavior.setEnabled(Buttons.SIGN, true);
-	}
-
-	@Override
-	public String toString()  {
-		return this.getClass().getName();
-	}
-}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/State.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/State.java
deleted file mode 100644
index c039f21a..00000000
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/State.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://joinup.ec.europa.eu/software/page/eupl
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- */
-package at.asit.pdfover.gui.workflow.states;
-
-//Imports
-import at.asit.pdfover.gui.workflow.StateMachine;
-import at.asit.pdfover.gui.workflow.config.ConfigurationManager;
-
-/**
- * Base state class
- */
-public abstract class State {
-
-	/**
-	 * The StateMachine
-	 */
-	private StateMachine stateMachine;
-
-	private State nextState = null;
-
-	/**
-	 * Default Workflow State constructor
-	 * @param stateMachine the State Machine
-	 */
-	public State(StateMachine stateMachine) {
-		this.stateMachine = stateMachine;
-		this.nextState = this;
-	}
-
-	public ConfigurationManager getConfig() { return this.stateMachine.configProvider; }
-
-	/**
-	 * Gets the next logical state or null if this their is no state transition
-	 * @return the next state (or null)
-	 */
-	public State nextState() {
-		return this.nextState;
-	}
-
-	/**
-	 * Sets the next logical state
-	 * @param state
-	 */
-	protected void setNextState(State state) {
-		this.nextState = state;
-	}
-
-	/**
-	 * Perform main logic for this state
-	 */
-	public abstract void run();
-
-	/**
-	 * Perform status cleanup
-	 */
-	public abstract void cleanUp();
-
-	/**
-	 * Update the state machine
-	 */
-	public void updateStateMachine()
-	{
-		this.stateMachine.invokeUpdate();
-	}
-
-	/**
-	 * Get the state machine
-	 * @return the StateMachine
-	 */
-	protected StateMachine getStateMachine()
-	{
-		return this.stateMachine;
-	}
-
-	/**
-	 * Update the main window behavior of this state if necessary
-	 * Should update this.stateMachine.status.getBehavior()
-	 */
-	public abstract void updateMainWindowBehavior();
-}
-- 
cgit v1.2.3