diff --git a/pom.xml b/pom.xml
index 3467b1a..3151c18 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
 
     <groupId>openk.pta.de</groupId>
     <artifactId>portal</artifactId>
-    <version>1.0.1</version>
+    <version>1.0.2</version>
     <packaging>war</packaging>
 
     <properties>
diff --git a/src/main/asciidoc/interfaceDocumentation/auth_n_auth_interfaceDocumentation.adoc b/src/main/asciidoc/interfaceDocumentation/auth_n_auth_interfaceDocumentation.adoc
index d72f38e..8db2339 100644
--- a/src/main/asciidoc/interfaceDocumentation/auth_n_auth_interfaceDocumentation.adoc
+++ b/src/main/asciidoc/interfaceDocumentation/auth_n_auth_interfaceDocumentation.adoc
@@ -348,5 +348,44 @@
 
 *Remarks*:
 
+=== Get health state
+This service returns the health state of this module.
+
+*URL:* /healthcheck/pretty=true
+
+*Method:* GET
+
+
+
+*Request-Headers*:
+
+* Authorization – none
+
+
+*Produces*: application/json
+
+*Response*:
+
+If the module is healthy then...
+[source,json]
+----
+{"Keycloak present":{"healthy":true}}
+----
+
+If the module is *not* healthy...
+[source,json]
+----
+{
+    "Keycloak present":
+    {
+        "healthy":false,
+        "message":"<Error message>"
+    }
+}
+----
+
+
+*Remarks*:
+
 
 
diff --git a/src/main/java/org/eclipse/openk/portal/auth2/model/KeyCloakUser.java b/src/main/java/org/eclipse/openk/portal/auth2/model/KeyCloakUser.java
index 4b4d853..d33c9b2 100644
--- a/src/main/java/org/eclipse/openk/portal/auth2/model/KeyCloakUser.java
+++ b/src/main/java/org/eclipse/openk/portal/auth2/model/KeyCloakUser.java
@@ -39,13 +39,8 @@
     public String getUsername() { return username; }
     public void setUsername(String username) { this.username = username; }
 
-    public boolean getEnabled() { return enabled; }
-    public void setEnabled(boolean enabled) { this.enabled = enabled; }
-
-    public boolean getTotp() { return totp; }
     public void setTotp(boolean totp) { this.totp = totp; }
 
-    public boolean getEmailVerified() { return emailVerified; }
     public void setEmailVerified(boolean emailVerified) { this.emailVerified = emailVerified; }
 
     public String getFirstName() { return firstName; }
diff --git a/src/main/java/org/eclipse/openk/portal/auth2/util/JwtHelper.java b/src/main/java/org/eclipse/openk/portal/auth2/util/JwtHelper.java
index be182d5..404045d 100644
--- a/src/main/java/org/eclipse/openk/portal/auth2/util/JwtHelper.java
+++ b/src/main/java/org/eclipse/openk/portal/auth2/util/JwtHelper.java
@@ -28,7 +28,6 @@
 import java.lang.reflect.Type;
 import java.net.HttpURLConnection;
 import java.net.URL;
-import java.util.Base64;
 import java.util.List;
 import org.apache.log4j.Logger;
 import org.eclipse.openk.portal.common.BackendConfig;
@@ -45,11 +44,20 @@
 
   public static JwtToken login(String user, String password) throws PortalInternalServerError {
     String token = sendPost(BackendConfig.getInstance().getAuthServerUrl() + "auth/realms/" +
-            BackendConfig.getInstance().getKeycloakRealm() + "/protocol/openid-connect/token",
-        "username=" + user + "&password=" + password + "&client_id=" + BackendConfig.getInstance().getKeycloakClient() + "&grant_type=password");
+                    BackendConfig.getInstance().getKeycloakRealm() + "/protocol/openid-connect/token",
+            "username=" + user + "&password=" + password + "&client_id="
+                    + BackendConfig.getInstance().getKeycloakClient() + "&grant_type=password");
     return getJwtTokenFromJson(token);
   }
 
+  public static boolean serviceAvailable() throws PortalInternalServerError {
+    String jsonRet = sendGet(BackendConfig.getInstance().getAuthServerUrl() + "auth/realms/" +
+                    BackendConfig.getInstance().getKeycloakRealm(), "", null);
+
+    return jsonRet != null ? jsonRet.contains("realm") && jsonRet.contains(BackendConfig.getInstance().getKeycloakRealm())
+                           : false;
+  }
+
   public static List<KeyCloakUser> getUsers(JwtToken jwtToken, int maxUsers) throws PortalInternalServerError {
     String users = sendGet(BackendConfig.getInstance().getAuthServerUrl() + "auth/admin/realms/" + BackendConfig.getInstance().getKeycloakRealm() + "/users?max="+maxUsers,
         MediaType.APPLICATION_JSON, jwtToken.getAccessToken());
diff --git a/src/main/java/org/eclipse/openk/portal/controller/BackendController.java b/src/main/java/org/eclipse/openk/portal/controller/BackendController.java
index e46a4c5..caf8388 100644
--- a/src/main/java/org/eclipse/openk/portal/controller/BackendController.java
+++ b/src/main/java/org/eclipse/openk/portal/controller/BackendController.java
@@ -16,10 +16,8 @@
 import org.eclipse.openk.portal.auth2.model.JwtToken;
 import org.eclipse.openk.portal.auth2.model.KeyCloakUser;
 import org.eclipse.openk.portal.auth2.util.JwtHelper;
-import org.eclipse.openk.portal.common.BackendConfig;
 import org.eclipse.openk.portal.common.JsonGeneratorBase;
 import org.eclipse.openk.portal.exceptions.PortalException;
-import org.eclipse.openk.portal.exceptions.PortalInternalServerError;
 import org.eclipse.openk.portal.exceptions.PortalUnauthorized;
 import org.eclipse.openk.portal.viewmodel.LoginCredentials;
 import org.eclipse.openk.portal.viewmodel.UserCache;
diff --git a/src/main/java/org/eclipse/openk/portal/controller/ControllerImplementations.java b/src/main/java/org/eclipse/openk/portal/controller/ControllerImplementations.java
index c343d29..8d3fb8e 100644
--- a/src/main/java/org/eclipse/openk/portal/controller/ControllerImplementations.java
+++ b/src/main/java/org/eclipse/openk/portal/controller/ControllerImplementations.java
@@ -29,8 +29,6 @@
 
     public static class GetUsers extends BackendInvokable {
 
-        public GetUsers() {}
-
         @Override
         public Response invoke() throws PortalException {
             List<KeyCloakUser> keyCloakUserList = UserCache.getInstance().getKeyCloakUsers();
diff --git a/src/main/java/org/eclipse/openk/portal/health/base/HealthCheck.java b/src/main/java/org/eclipse/openk/portal/health/base/HealthCheck.java
new file mode 100644
index 0000000..f6bc66c
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/portal/health/base/HealthCheck.java
@@ -0,0 +1,17 @@
+/*
+ ******************************************************************************
+ * Copyright © 2017-2018 PTA GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ *
+ *     http://www.eclipse.org/legal/epl-v10.html
+ *
+ ******************************************************************************
+ */
+package org.eclipse.openk.portal.health.base;
+
+public abstract class HealthCheck {
+
+    protected abstract Result check() throws Exception; // NOSONAR
+}
diff --git a/src/main/java/org/eclipse/openk/portal/health/base/HealthChecker.java b/src/main/java/org/eclipse/openk/portal/health/base/HealthChecker.java
new file mode 100644
index 0000000..34ebd90
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/portal/health/base/HealthChecker.java
@@ -0,0 +1,47 @@
+/*
+ ******************************************************************************
+ * Copyright © 2017-2018 PTA GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ *
+ *     http://www.eclipse.org/legal/epl-v10.html
+ *
+ ******************************************************************************
+*/
+package org.eclipse.openk.portal.health.base;
+
+import org.apache.log4j.Logger;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+public class HealthChecker {
+    private static final Logger logger = Logger.getLogger(HealthChecker.class);
+
+    private List<HealthCheck> registeredHealthChecks = new LinkedList<>();
+    private Map<HealthCheck, String> namingMap = new HashMap<>();
+
+    public void register( String title, HealthCheck hc ) {
+        namingMap.put(hc, title);
+        registeredHealthChecks.add(hc);
+    }
+
+    public List<NamedHealthCheckResult> performHealthChecks() {
+        List<NamedHealthCheckResult> hcList = new LinkedList<>();
+        for( HealthCheck hc : registeredHealthChecks) {
+            try {
+                hcList.add(new NamedHealthCheckResult(namingMap.get(hc), hc.check()));
+
+            } catch (Throwable t) { // NOSONAR  we definately want to catch everything here!!!
+                logger.error("Error during healthcheck", t);
+                hcList.add(new NamedHealthCheckResult(namingMap.get(hc),
+                        Result.unhealthy("Exception during test: "+t+" -> See Log!")));
+            }
+        }
+        return hcList;
+    }
+
+}
diff --git a/src/main/java/org/eclipse/openk/portal/health/base/NamedHealthCheckResult.java b/src/main/java/org/eclipse/openk/portal/health/base/NamedHealthCheckResult.java
new file mode 100644
index 0000000..9726cb9
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/portal/health/base/NamedHealthCheckResult.java
@@ -0,0 +1,53 @@
+/*
+ ******************************************************************************
+ * Copyright © 2017-2018 PTA GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ *
+ *     http://www.eclipse.org/legal/epl-v10.html
+ *
+ ******************************************************************************
+ */
+package org.eclipse.openk.portal.health.base;
+
+import com.google.gson.GsonBuilder;
+
+import java.util.List;
+
+public class NamedHealthCheckResult {
+    private String name;
+    private Result result;
+
+    public NamedHealthCheckResult( String name, Result result ) {
+        this.name = name;
+        this.result = result;
+    }
+
+    public String toJson() {
+        StringBuffer buffer = new StringBuffer(); // NOSONAR - _fd we don't a new dependency because of this
+        buffer.append("\""+name+"\":");
+        buffer.append(new GsonBuilder().disableHtmlEscaping().create().toJson(result));
+        return buffer.toString();
+    }
+
+    public static String toJson(List<NamedHealthCheckResult> resultArray ) {
+        StringBuilder builder = new StringBuilder();
+        builder.append('{');
+        for( int i=0; i < resultArray.size(); i++ ) {
+            builder.append(resultArray.get(i).toJson());
+            if( i+1 < resultArray.size() ) {
+                builder.append(',');
+            }
+        }
+        return builder.append('}').toString();
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Result getResult() {
+        return result;
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/portal/health/base/Result.java b/src/main/java/org/eclipse/openk/portal/health/base/Result.java
new file mode 100644
index 0000000..6ff7de7
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/portal/health/base/Result.java
@@ -0,0 +1,41 @@
+/*
+ ******************************************************************************
+ * Copyright © 2017-2018 PTA GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ *
+ *     http://www.eclipse.org/legal/epl-v10.html
+ *
+ ******************************************************************************
+ */
+package org.eclipse.openk.portal.health.base;
+
+
+public class Result {
+    private boolean healthy;
+    private String message;
+
+    private Result() {}
+
+    public static Result healthy() {
+        Result res = new Result();
+        res.healthy = true;
+        return res;
+    }
+
+    public static Result unhealthy(String message) {
+        Result res = new Result();
+        res.healthy = false;
+        res.message = message;
+        return res;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public boolean isHealthy() {
+        return healthy;
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/portal/health/impl/KeyCloakPresentHealthCheck.java b/src/main/java/org/eclipse/openk/portal/health/impl/KeyCloakPresentHealthCheck.java
new file mode 100644
index 0000000..80a7b52
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/portal/health/impl/KeyCloakPresentHealthCheck.java
@@ -0,0 +1,37 @@
+/*
+ ******************************************************************************
+ * Copyright © 2017-2018 PTA GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ *
+ *     http://www.eclipse.org/legal/epl-v10.html
+ *
+ ******************************************************************************
+ */
+package org.eclipse.openk.portal.health.impl;
+
+import org.eclipse.openk.portal.auth2.util.JwtHelper;
+import org.eclipse.openk.portal.common.BackendConfig;
+import org.eclipse.openk.portal.exceptions.PortalInternalServerError;
+import org.eclipse.openk.portal.health.base.HealthCheck;
+import org.eclipse.openk.portal.health.base.Result;
+
+public class KeyCloakPresentHealthCheck extends HealthCheck {
+
+    protected boolean checkit() throws PortalInternalServerError {
+        return JwtHelper.serviceAvailable();
+    }
+
+    @Override
+    protected Result check() throws Exception {
+        if( checkit() ) {
+            return Result.healthy();
+        }
+        else {
+            BackendConfig gc = BackendConfig.getInstance();
+            String msg = gc.getAuthServerUrl() + "/" + gc.getKeycloakRealm();
+            return Result.unhealthy("KeyCloak-Service not available: "+msg);
+        }
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/portal/rest/BackendRestService.java b/src/main/java/org/eclipse/openk/portal/rest/BackendRestService.java
index 532349d..79ce8e8 100644
--- a/src/main/java/org/eclipse/openk/portal/rest/BackendRestService.java
+++ b/src/main/java/org/eclipse/openk/portal/rest/BackendRestService.java
@@ -11,7 +11,8 @@
 */
 package org.eclipse.openk.portal.rest;
 
-import javax.ws.rs.PathParam;
+import javax.ws.rs.*;
+
 import org.apache.log4j.Logger;
 import org.eclipse.openk.portal.auth2.model.JwtToken;
 import org.eclipse.openk.portal.common.Globals;
@@ -24,14 +25,11 @@
 import org.eclipse.openk.portal.exceptions.PortalException;
 import org.eclipse.openk.portal.exceptions.PortalExceptionMapper;
 import org.eclipse.openk.portal.exceptions.PortalUnauthorized;
+import org.eclipse.openk.portal.health.base.HealthChecker;
+import org.eclipse.openk.portal.health.base.NamedHealthCheckResult;
+import org.eclipse.openk.portal.health.impl.KeyCloakPresentHealthCheck;
 import org.eclipse.openk.portal.viewmodel.VersionInfo;
 
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
@@ -137,6 +135,23 @@
         return invoke(accessToken, false, new ControllerImplementations.GetUsers());
     }
 
+    @GET
+    @Path("/healthcheck")
+    @Produces("application/json")
+    public Response getHealthCheck(@FormParam(value = "pretty") boolean yn) {
+        HealthChecker hc = new HealthChecker();
+        hc.register("Keycloak present", new KeyCloakPresentHealthCheck());
+
+        String returnJson = NamedHealthCheckResult.toJson(hc.performHealthChecks());
+
+        try {
+            return ResponseBuilderWrapper.INSTANCE.buildOKResponse(returnJson);
+        } catch (PortalException e) {
+            logger.error("unexpected error", e);
+            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
+        }
+    }
+
     private boolean isBackdoor( String sessionId ) {
         // backdoor is only available when the version(POM) contains "DEVELOP" or "SNAPSHOT"
         return DEVELOP_MODE && LET_ME_IN.equals(sessionId);
diff --git a/src/main/resources/moduleConfigDevServer.json b/src/main/resources/moduleConfigDevServer.json
index 9ee6421..4c5eef2 100644
--- a/src/main/resources/moduleConfigDevServer.json
+++ b/src/main/resources/moduleConfigDevServer.json
@@ -45,5 +45,14 @@
     "link": "http://172.18.22.160:8880/plannedGridMeasures",
     "pictureLink": "https://www.openkonsequenz.de//components/com_flexicontent/librairies/phpthumb/phpThumb.php?src=/medien/cache/main_image/l_ok_module5.jpg",
     "requiredRole": "planned-policies-access"
+  },
+  {
+    "name": "Geplante Maßnahmen (Web)",
+    "cols": 1,
+    "rows": 1,
+    "color": "#ffffff",
+    "link": "http://87.128.212.254:8880/plannedGridMeasures",
+    "pictureLink": "https://www.openkonsequenz.de//components/com_flexicontent/librairies/phpthumb/phpThumb.php?src=/medien/cache/main_image/l_ok_module5.jpg",
+    "requiredRole": "planned-policies-access"
   }
 ]
diff --git a/src/test/java/org/eclipse/openk/portal/common/BackendConfigTest.java b/src/test/java/org/eclipse/openk/portal/common/BackendConfigTest.java
index 6b53881..4efadc9 100644
--- a/src/test/java/org/eclipse/openk/portal/common/BackendConfigTest.java
+++ b/src/test/java/org/eclipse/openk/portal/common/BackendConfigTest.java
@@ -20,15 +20,15 @@
     @Test
     public void testConfig() {
         BackendConfig bc = BackendConfig.getInstance();
-        assertEquals( (int)bc.getInternalSessionLengthMillis(), 3600000 );
-        assertEquals( (int)bc.getReloadUsersInSec(), 300 );
-        assertEquals( bc.getAuthServerUrl(), "http://entjava002:8080/");
-        assertEquals( bc.getKeycloakRealm(), "elogbook");
-        assertEquals( bc.getKeycloakClient(),"elogbook-backend");
-        assertEquals( bc.getKeycloakAdmin(), "admin");
-        assertEquals( bc.getKeycloakPW(), "nimda");
-        assertEquals( BackendConfig.getConfigFileName(), "backendConfigDevLocal.json");
+        assertEquals( 3600000, (int)bc.getInternalSessionLengthMillis() );
+        assertEquals( 300 , (int)bc.getReloadUsersInSec());
+        assertEquals( "http://entjava002:8080/", bc.getAuthServerUrl() );
+        assertEquals( "elogbook", bc.getKeycloakRealm());
+        assertEquals( "elogbook-backend", bc.getKeycloakClient());
+        assertEquals( "admin", bc.getKeycloakAdmin() );
+        assertEquals( "nimda", bc.getKeycloakPW() );
+        assertEquals( "backendConfigDevLocal.json", BackendConfig.getConfigFileName() );
         BackendConfig.setConfigFileName("backendConfigProduction.json");
-        assertEquals( BackendConfig.getConfigFileName(), "backendConfigProduction.json");
+        assertEquals( "backendConfigProduction.json", BackendConfig.getConfigFileName() );
     }
 }
diff --git a/src/test/java/org/eclipse/openk/portal/common/util/ResourceLoaderBaseTest.java b/src/test/java/org/eclipse/openk/portal/common/util/ResourceLoaderBaseTest.java
index f53ff8c..9d888ef 100644
--- a/src/test/java/org/eclipse/openk/portal/common/util/ResourceLoaderBaseTest.java
+++ b/src/test/java/org/eclipse/openk/portal/common/util/ResourceLoaderBaseTest.java
@@ -21,6 +21,6 @@
     public void testloadStringFromResourceError() {
         ResourceLoaderBase rlb = new ResourceLoaderBase();
         String str = rlb.loadStringFromResource("UNKNOWN_FILE");
-        assertEquals(str, "");
+        assertEquals("", str);
     }
 }
diff --git a/src/test/java/org/eclipse/openk/portal/controller/BaseWebServiceTest.java b/src/test/java/org/eclipse/openk/portal/controller/BaseWebServiceTest.java
index 8f0cea6..10a17dc 100644
--- a/src/test/java/org/eclipse/openk/portal/controller/BaseWebServiceTest.java
+++ b/src/test/java/org/eclipse/openk/portal/controller/BaseWebServiceTest.java
@@ -83,7 +83,7 @@
 
 		ti.exceptionToThrow = new PortalBadRequest();
 		Response ret = tws.invoke("ssess", false, ti);
-		Assert.assertEquals(ret.getStatus(), Globals.HTTPSTATUS_BAD_REQUEST);
+		Assert.assertEquals(Globals.HTTPSTATUS_BAD_REQUEST, ret.getStatus());
 	}
 
 	@Test
@@ -93,7 +93,7 @@
 
 		ti.throwRuntime = true;
 		Response ret = tws.invoke("ssess",  false, ti);
-		assertEquals(ret.getStatus(), Globals.HTTPSTATUS_INTERNAL_SERVER_ERROR);
+		assertEquals(Globals.HTTPSTATUS_INTERNAL_SERVER_ERROR, ret.getStatus());
 	}
 
 	@Test
@@ -102,7 +102,7 @@
 		TestInvokable ti = new TestInvokable();
 		tws.throwUnauthException = true;
 		Response ret = tws.invoke("ssess",  false, ti);
-		assertEquals(ret.getStatus(), Globals.HTTPSTATUS_UNAUTHORIZED);
+		assertEquals(Globals.HTTPSTATUS_UNAUTHORIZED, ret.getStatus());
 	}
 
 	@Test
@@ -252,8 +252,8 @@
 
 		Response ret = tws.invoke("ssess",  false, ti);
 		assertTrue(ti.isInvoked);
-		assertEquals(tws.sessionId, "ssess");
-		assertEquals(ret.getStatus(), 666);
+		assertEquals("ssess", tws.sessionId);
+		assertEquals(666, ret.getStatus() );
 
 	}
 
diff --git a/src/test/java/org/eclipse/openk/portal/controller/ResponseBuilderWrapperTest.java b/src/test/java/org/eclipse/openk/portal/controller/ResponseBuilderWrapperTest.java
index 03906d6..a64e04e 100644
--- a/src/test/java/org/eclipse/openk/portal/controller/ResponseBuilderWrapperTest.java
+++ b/src/test/java/org/eclipse/openk/portal/controller/ResponseBuilderWrapperTest.java
@@ -27,16 +27,16 @@
         String json = "{ 'ret' : 'OK' }";
         Response.ResponseBuilder rb = ResponseBuilderWrapper.INSTANCE.getResponseBuilder( json );
         Response resp = rb.build();
-        assertEquals(resp.getStatus(), Globals.HTTPSTATUS_OK );
+        assertEquals(Globals.HTTPSTATUS_OK, resp.getStatus());
     }
 
     @Test
     public void testBuildOkResponse() throws PortalException {
         String json = "{ 'test' : 'Value' }";
         Response resp = ResponseBuilderWrapper.INSTANCE.buildOKResponse( json );
-        assertEquals( resp.getStatus(), Globals.HTTPSTATUS_OK );
+        assertEquals( Globals.HTTPSTATUS_OK, resp.getStatus());
 
         resp = ResponseBuilderWrapper.INSTANCE.buildOKResponse(json, "ssess");
-        assertEquals( resp.getStatus(), Globals.HTTPSTATUS_OK);
+        assertEquals( Globals.HTTPSTATUS_OK, resp.getStatus());
     }
 }
diff --git a/src/test/java/org/eclipse/openk/portal/controller/TokenManagerTest.java b/src/test/java/org/eclipse/openk/portal/controller/TokenManagerTest.java
index 00bff61..1c31de2 100644
--- a/src/test/java/org/eclipse/openk/portal/controller/TokenManagerTest.java
+++ b/src/test/java/org/eclipse/openk/portal/controller/TokenManagerTest.java
@@ -54,7 +54,7 @@
 
         HashMap<String, TokenManager.SessionItem> regMap = Whitebox.getInternalState(sessione, "registry");
 
-        assertEquals(regMap.size(), 3);
+        assertEquals(3, regMap.size());
         assertTrue(regMap.containsKey("HUGO1"));
         assertTrue(regMap.containsKey(specialToken.getAccessToken()));
         assertTrue(regMap.containsKey("HUGO3"));
@@ -77,14 +77,14 @@
         assertEquals( sit1.getSessionCreationTime()+200, sit1.getSessionLastAccessTime());
         sit1.setUser(null);
         assertNull(sit1.getUser());
-        assertEquals(sit1.getSessionId(), "HUGO1");
+        assertEquals("HUGO1", sit1.getSessionId() );
         sit1.setCookieToken("CaptainCookie");
-        assertEquals(sit1.getCookieToken(), "CaptainCookie");
+        assertEquals("CaptainCookie", sit1.getCookieToken());
 
         TokenManager.getInstance().logout("HUGO1");
-        assertEquals(regMap.size(), 2);
+        assertEquals(2, regMap.size());
         TokenManager.getInstance().logout( "FAKE");
-        assertEquals(regMap.size(), 2);
+        assertEquals(2, regMap.size());
 
 
         // session out of time
diff --git a/src/test/java/org/eclipse/openk/portal/exceptions/PortalExceptionsTest.java b/src/test/java/org/eclipse/openk/portal/exceptions/PortalExceptionsTest.java
index ef2b754..5cdf190 100644
--- a/src/test/java/org/eclipse/openk/portal/exceptions/PortalExceptionsTest.java
+++ b/src/test/java/org/eclipse/openk/portal/exceptions/PortalExceptionsTest.java
@@ -20,11 +20,11 @@
 
     @Test
     public void testConstructors() {
-        assertEquals(new PortalBadRequest().getHttpStatus(), Globals.HTTPSTATUS_BAD_REQUEST);
-        assertEquals(new PortalForbidden().getHttpStatus(), Globals.HTTPSTATUS_FORBIDDEN);
-        assertEquals(new PortalInternalServerError(null, null).getHttpStatus(), Globals.HTTPSTATUS_INTERNAL_SERVER_ERROR);
-        assertEquals(new PortalNotFound().getHttpStatus(), Globals.HTTPSTATUS_NOT_FOUND);
-        assertEquals(new PortalUnauthorized().getHttpStatus(), Globals.HTTPSTATUS_UNAUTHORIZED);
+        assertEquals(Globals.HTTPSTATUS_BAD_REQUEST, new PortalBadRequest().getHttpStatus() );
+        assertEquals(Globals.HTTPSTATUS_FORBIDDEN, new PortalForbidden().getHttpStatus());
+        assertEquals(Globals.HTTPSTATUS_INTERNAL_SERVER_ERROR, new PortalInternalServerError(null, null).getHttpStatus());
+        assertEquals(Globals.HTTPSTATUS_NOT_FOUND, new PortalNotFound().getHttpStatus());
+        assertEquals(Globals.HTTPSTATUS_UNAUTHORIZED, new PortalUnauthorized().getHttpStatus());
     }
 
 
diff --git a/src/test/java/org/eclipse/openk/portal/health/base/HealthCheckerTest.java b/src/test/java/org/eclipse/openk/portal/health/base/HealthCheckerTest.java
new file mode 100644
index 0000000..87aed26
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/portal/health/base/HealthCheckerTest.java
@@ -0,0 +1,93 @@
+/*
+ ******************************************************************************
+ * Copyright © 2018 PTA GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ *
+ *     http://www.eclipse.org/legal/epl-v10.html
+ *
+ ******************************************************************************
+*/
+package org.eclipse.openk.portal.health.base;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.List;
+
+import static junit.framework.TestCase.assertTrue;
+import static org.junit.Assert.*;
+
+public class HealthCheckerTest {
+    public boolean hc1Called;
+    public boolean hc2Called;
+    public boolean hc3Called;
+
+    @Before
+    public void init() {
+        hc1Called = false;
+        hc2Called = false;
+        hc3Called = false;
+    }
+
+    @Test
+    public void test_ok() {
+        HealthCheck hc1 = new HealthCheck() {
+
+            @Override
+            protected Result check() throws Exception {
+                hc1Called = true;
+                return Result.healthy();
+            }
+        };
+
+        HealthCheck hc2 = new HealthCheck() {
+            @Override
+            protected Result check() throws Exception {
+                hc2Called = true;
+                return Result.unhealthy("because of...");
+            }
+        };
+
+        HealthChecker theChecker = new HealthChecker();
+        theChecker.register("firstTest", hc1 );
+        theChecker.register( "secondTest", hc2 );
+
+        List<NamedHealthCheckResult> retList = theChecker.performHealthChecks();
+
+        assertEquals( 2, retList.size() );
+        assertTrue( hc1Called );
+        assertTrue( hc2Called );
+        assertNull( retList.get(0).getResult().getMessage());
+        assertNotNull( retList.get(1).getResult().getMessage());
+        assertEquals( "firstTest", retList.get(0).getName());
+        assertEquals( "secondTest", retList.get(1).getName());
+        assertTrue( retList.get(0).getResult().isHealthy());
+        assertFalse( retList.get(1).getResult().isHealthy());
+    }
+
+    @Test
+    public void test_nok() {
+        HealthCheck hc1 = new HealthCheck() {
+
+            @Override
+            protected Result check() throws Exception {
+                hc3Called = true;
+                throw new Exception("Error in healthCheck");
+            }
+        };
+
+
+        HealthChecker theChecker = new HealthChecker();
+        theChecker.register("errorTest", hc1 );
+
+        List<NamedHealthCheckResult> retList = theChecker.performHealthChecks();
+
+        assertEquals( 1, retList.size() );
+        assertTrue( hc3Called );
+        assertNotNull( retList.get(0).getResult().getMessage());
+        assertFalse( retList.get(0).getResult().isHealthy());
+
+    }
+}
diff --git a/src/test/java/org/eclipse/openk/portal/health/base/NamedHealthCheckResultTest.java b/src/test/java/org/eclipse/openk/portal/health/base/NamedHealthCheckResultTest.java
new file mode 100644
index 0000000..0fdd4e7
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/portal/health/base/NamedHealthCheckResultTest.java
@@ -0,0 +1,25 @@
+package org.eclipse.openk.portal.health.base;
+
+import org.junit.Test;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+public class NamedHealthCheckResultTest {
+    @Test
+    public void testAll() {
+        NamedHealthCheckResult h1 = new NamedHealthCheckResult("Uno", Result.healthy());
+        NamedHealthCheckResult h2 = new NamedHealthCheckResult("Due", Result.unhealthy("Darum"));
+
+        assertEquals("\"Uno\":{\"healthy\":true}", h1.toJson());
+        assertEquals("\"Due\":{\"healthy\":false,\"message\":\"Darum\"}", h2.toJson());
+
+        List<NamedHealthCheckResult> lista = new LinkedList<>();
+        lista.add(h1);
+        lista.add(h2);
+        assertEquals( "{\"Uno\":{\"healthy\":true},\"Due\":{\"healthy\":false,\"message\":\"Darum\"}}",
+                NamedHealthCheckResult.toJson(lista));
+    }
+}
diff --git a/src/test/java/org/eclipse/openk/portal/health/base/ResultTest.java b/src/test/java/org/eclipse/openk/portal/health/base/ResultTest.java
new file mode 100644
index 0000000..9379922
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/portal/health/base/ResultTest.java
@@ -0,0 +1,20 @@
+package org.eclipse.openk.portal.health.base;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ResultTest {
+
+    @Test
+    public void testAll() {
+        Result res1 = Result.healthy();
+        Result res2 = Result.unhealthy("Msg");
+
+        assertTrue(res1.isHealthy());
+        assertFalse(res2.isHealthy());
+        assertNull(res1.getMessage());
+        assertNotNull(res2.getMessage());
+
+    }
+}
diff --git a/src/test/java/org/eclipse/openk/portal/health/impl/KeyCloakPresentHealthCheckTest.java b/src/test/java/org/eclipse/openk/portal/health/impl/KeyCloakPresentHealthCheckTest.java
new file mode 100644
index 0000000..1727b6a
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/portal/health/impl/KeyCloakPresentHealthCheckTest.java
@@ -0,0 +1,37 @@
+package org.eclipse.openk.portal.health.impl;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.powermock.reflect.Whitebox;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class KeyCloakPresentHealthCheckTest {
+    private KeyCloakPresentHealthCheck hc;
+
+    @Before
+    public void init() {
+        hc = new KeyCloakPresentHealthCheck() {
+            public boolean checkit;
+
+            @Override
+            protected boolean checkit() {
+                return checkit;
+            }
+        };
+    }
+
+    @Test
+    public void testOk() throws Exception {
+        Whitebox.setInternalState(hc, "checkit", true);
+        assertTrue(hc.check().isHealthy());
+    }
+
+    @Test
+    public void testNok() throws Exception {
+        Whitebox.setInternalState(hc, "checkit", false);
+        assertFalse(hc.check().isHealthy());
+    }
+
+}
diff --git a/src/test/java/org/eclipse/openk/portal/viewmodel/ErrorReturnTest.java b/src/test/java/org/eclipse/openk/portal/viewmodel/ErrorReturnTest.java
index 09bee1f..b4ba312 100644
--- a/src/test/java/org/eclipse/openk/portal/viewmodel/ErrorReturnTest.java
+++ b/src/test/java/org/eclipse/openk/portal/viewmodel/ErrorReturnTest.java
@@ -28,7 +28,7 @@
 		String json = super.loadStringFromResource("testErrorReturn.json");
 		ErrorReturn errRet = getGson().fromJson(json, ErrorReturn.class);
 		assertFalse(errRet.getErrorText().isEmpty());
-		assertEquals(errRet.getErrorCode(), 999);
+		assertEquals(999, errRet.getErrorCode());
 	}
 
 	@Test
diff --git a/src/test/java/org/eclipse/openk/portal/viewmodel/GeneralReturnItemTest.java b/src/test/java/org/eclipse/openk/portal/viewmodel/GeneralReturnItemTest.java
index 19516de..217cd7d 100644
--- a/src/test/java/org/eclipse/openk/portal/viewmodel/GeneralReturnItemTest.java
+++ b/src/test/java/org/eclipse/openk/portal/viewmodel/GeneralReturnItemTest.java
@@ -27,7 +27,7 @@
 	public void TestStructureAgainstJson() {
 		String json = super.loadStringFromResource("testGeneralReturnItem.json");
 		GeneralReturnItem gRRet = JsonGeneratorBase.getGson().fromJson(json, GeneralReturnItem.class);
-		assertEquals(gRRet.getRet(), "It works!");
+		assertEquals("It works!", gRRet.getRet());
 	}
 
 	@Test
diff --git a/src/test/java/org/eclipse/openk/portal/viewmodel/LoginCredentialsTest.java b/src/test/java/org/eclipse/openk/portal/viewmodel/LoginCredentialsTest.java
index 46d132a..d6ad438 100644
--- a/src/test/java/org/eclipse/openk/portal/viewmodel/LoginCredentialsTest.java
+++ b/src/test/java/org/eclipse/openk/portal/viewmodel/LoginCredentialsTest.java
@@ -24,8 +24,8 @@
 	public void testStructureAgainstJson() {
 		String json = super.loadStringFromResource("testLoginCredentials.json");
 		LoginCredentials lc = JsonGeneratorBase.getGson().fromJson(json, LoginCredentials.class);
-		assertEquals(lc.getUserName(), "Carlo");
-		assertEquals(lc.getPassword(), "Cottura");
+		assertEquals("Carlo", lc.getUserName() );
+		assertEquals("Cottura", lc.getPassword());
 	}
 
 	@Test
diff --git a/src/test/java/org/eclipse/openk/portal/viewmodel/UserModuleTest.java b/src/test/java/org/eclipse/openk/portal/viewmodel/UserModuleTest.java
index ea6b126..ead9bd4 100644
--- a/src/test/java/org/eclipse/openk/portal/viewmodel/UserModuleTest.java
+++ b/src/test/java/org/eclipse/openk/portal/viewmodel/UserModuleTest.java
@@ -20,17 +20,17 @@
     @Test
     public void testModuleConfigProduction() {
         UserModule[] um = UserModule.getInstance();
-        assertEquals( um[0].getModuleName(), "Betriebstagebuch");
-        assertEquals( um[0].getColor(), "#ffffff");
-        assertEquals( (long)um[0].getCols(), 1);
-        assertEquals( (long)um[0].getRows(), 1);
-        assertEquals( um[0].getLink(), "http://localhost:4200/");
-        assertEquals( um[0].getPictureLink(), "https://www.openkonsequenz.de/medien/cache/main_image/m_logbuch_2443636.jpg");
-        assertEquals( um[0].getRequiredRole(), "elogbook-access");
+        assertEquals( "Betriebstagebuch", um[0].getModuleName() );
+        assertEquals( "#ffffff", um[0].getColor() );
+        assertEquals( 1, (long)um[0].getCols() );
+        assertEquals( 1, (long)um[0].getRows() );
+        assertEquals( "http://localhost:4200/", um[0].getLink() );
+        assertEquals( "https://www.openkonsequenz.de/medien/cache/main_image/m_logbuch_2443636.jpg", um[0].getPictureLink() );
+        assertEquals( "elogbook-access", um[0].getRequiredRole() );
 
-        assertEquals( UserModule.getConfigFileName(), "moduleConfigDevLocal.json");
+        assertEquals( "moduleConfigDevLocal.json", UserModule.getConfigFileName());
         UserModule.setConfigFileName("moduleConfigDevLocal.json");
-        assertEquals( UserModule.getConfigFileName(), "moduleConfigDevLocal.json");
+        assertEquals( "moduleConfigDevLocal.json", UserModule.getConfigFileName() );
     }
 
 }
