diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e705fa8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+.git
+.idea/**/*.xml
+.settings
+.classpath
+target
+/.idea/compiler.xml
+/.idea/*.xml
+/.idea/modules.xml
+/.idea/vcs.xml
+/bin/
+.iml
+.project
+.classpath
+/elogbook.iml
+/.idea
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..34312ef
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,56 @@
+FROM myserver:withproxy
+#linux 16.04
+MAINTAINER Dimitris
+
+WORKDIR /
+### PORTAL #### 
+WORKDIR portal
+RUN git clone  http://172.18.22.160:8880/gitblit-1.8.0/r/oK/Portal/Backend.git && cd Backend && git checkout DEVELOP_BE 
+WORKDIR Backend
+RUN rm -f -r ./target/portal && rm -f -r ./target/portal.war
+RUN mvn install -DskipTests
+RUN mv ./target/portal.war /opt/tomcat/webapps/portal.war
+
+WORKDIR /
+### PORTAL FE ####
+WORKDIR portal
+RUN git clone  http://172.18.22.160:8880/gitblit-1.8.0/r/oK/Portal/Frontend.git  && cd Frontend && git checkout DEVELOP_FE
+WORKDIR Frontend
+RUN npm install
+RUN ng build --prod
+RUN mv ./dist/ /opt/tomcat/webapps/Frontend/
+
+WORKDIR /
+### DIAGNOSIS APP ####
+WORKDIR microservices
+RUN git clone http://172.18.22.160:8880/gitblit-1.8.0/r/Dropwizard/Microservices/mics-diagnosis-app.git && cd mics-diagnosis-app && git checkout DEVELOP_FE
+WORKDIR mics-diagnosis-app
+RUN npm install
+RUN ng build --prod
+RUN mv ./dist/ /opt/tomcat/webapps/mics-diagnosis-app/
+
+WORKDIR /
+### HOME SERVICE #### 
+WORKDIR microservices
+RUN git clone http://172.18.22.160:8880/gitblit-1.8.0/r/Dropwizard/Microservices/mics-home-service.git && cd mics-home-service && git checkout DEVELOP_BE 
+WORKDIR mics-home-service
+RUN rm -f -r ./target/mics-home-service && rm -f -r ./target/mics-home-service.war
+RUN mvn install -DskipTests
+RUN mv ./target/mics-home-service.war /opt/tomcat/webapps/mics-home-service.war
+
+WORKDIR /
+### PLGM FRONTEND ####
+WORKDIR gridmeasures
+RUN git clone http://172.18.22.160:8880/gitblit-1.8.0/r/oK/PlannedGridMeasures/Frontend.git   && cd Frontend && git checkout DEVELOP_FE
+WORKDIR Frontend
+RUN npm install
+RUN ng build --prod
+RUN mv ./dist/ /opt/tomcat/webapps/GridMeasuresFrontend/
+
+WORKDIR /
+
+CMD ["/opt/tomcat/bin/catalina.sh", "run"]
+
+EXPOSE 8080
+
+
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..e68728c
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,18 @@
+node {
+
+    stage('Clone repository') {
+        /* Let's make sure we have the repository cloned to our workspace */
+
+        checkout scm
+    }
+
+    stage('Build image') {
+        /* This builds the actual image; synonymous to
+         * docker build on the command line */
+		sh 'docker build --no-cache --rm -t myserver_home:jenkinsversion .'
+    }
+	
+	stage('Refresh containers') {
+		bat 'start cmd.exe /c C:\\Jenkinshelper\\refresh_docker.bat'
+	}
+}
\ No newline at end of file
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..11ecb79
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,198 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation
+   distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+    i) changes to the Program, and
+   ii) additions to the Program;
+
+   where such changes and/or additions to the Program originate from and are
+   distributed by that particular Contributor. A Contribution 'originates' from
+   a Contributor if it was added to the Program by such Contributor itself or
+   anyone acting on such Contributor's behalf. Contributions do not include
+   additions to the Program which: (i) are separate modules of software
+   distributed in conjunction with the Program under their own license
+   agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+  a) Subject to the terms of this Agreement, each Contributor hereby grants
+     Recipient a non-exclusive, worldwide, royalty-free copyright license to
+     reproduce, prepare derivative works of, publicly display, publicly perform,
+     distribute and sublicense the Contribution of such Contributor, if any, and
+     such derivative works, in source code and object code form.
+  b) Subject to the terms of this Agreement, each Contributor hereby grants
+     Recipient a non-exclusive, worldwide, royalty-free patent license under
+     Licensed Patents to make, use, sell, offer to sell, import and otherwise
+     transfer the Contribution of such Contributor, if any, in source code and
+     object code form. This patent license shall apply to the combination of the
+     Contribution and the Program if, at the time the Contribution is added by
+     the Contributor, such addition of the Contribution causes such combination
+     to be covered by the Licensed Patents. The patent license shall not apply
+     to any other combinations which include the Contribution. No hardware per
+     se is licensed hereunder.
+  c) Recipient understands that although each Contributor grants the licenses to
+     its Contributions set forth herein, no assurances are provided by any
+     Contributor that the Program does not infringe the patent or other
+     intellectual property rights of any other entity. Each Contributor
+     disclaims any liability to Recipient for claims brought by any other entity
+     based on infringement of intellectual property rights or otherwise. As a
+     condition to exercising the rights and licenses granted hereunder, each
+     Recipient hereby assumes sole responsibility to secure any other
+     intellectual property rights needed, if any. For example, if a third party
+     patent license is required to allow Recipient to distribute the Program, it
+     is Recipient's responsibility to acquire that license before distributing
+     the Program.
+  d) Each Contributor represents that to its knowledge it has sufficient
+     copyright rights in its Contribution, if any, to grant the copyright
+     license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its
+own license agreement, provided that:
+
+  a) it complies with the terms and conditions of this Agreement; and
+  b) its license agreement:
+      i) effectively disclaims on behalf of all Contributors all warranties and
+         conditions, express and implied, including warranties or conditions of
+         title and non-infringement, and implied warranties or conditions of
+         merchantability and fitness for a particular purpose;
+     ii) effectively excludes on behalf of all Contributors all liability for
+         damages, including direct, indirect, special, incidental and
+         consequential damages, such as lost profits;
+    iii) states that any provisions which differ from this Agreement are offered
+         by that Contributor alone and not by any other party; and
+     iv) states that source code for the Program is available from such
+         Contributor, and informs licensees how to obtain it in a reasonable
+         manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+  a) it must be made available under this Agreement; and
+  b) a copy of this Agreement must be included with each copy of the Program.
+     Contributors may not remove or alter any copyright notices contained within
+     the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if
+any, in a manner that reasonably allows subsequent Recipients to identify the
+originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore, if
+a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and other legal
+actions brought by a third party against the Indemnified Contributor to the
+extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to
+control, and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may participate in
+any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If that
+Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such
+Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a court
+requires any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its exercise of
+rights under this Agreement , including but not limited to the risks and costs
+of program errors, compliance with applicable laws, damage to or loss of data,
+programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable
+law, it shall not affect the validity or enforceability of the remainder of the
+terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such
+provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+(excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted under
+Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue and
+survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to time.
+No one other than the Agreement Steward has the right to modify this Agreement.
+The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation
+may assign the responsibility to serve as the Agreement Steward to a suitable
+separate entity. Each new version of the Agreement will be given a
+distinguishing version number. The Program (including Contributions) may always
+be distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to distribute the Program (including its Contributions)
+under the new version. Except as expressly stated in Sections 2(a) and 2(b)
+above, Recipient receives no rights or licenses to the intellectual property of
+any Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted under
+this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial in
+any resulting litigation.
diff --git a/mics.homeService_Test.txt b/mics.homeService_Test.txt
deleted file mode 100644
index e69de29..0000000
--- a/mics.homeService_Test.txt
+++ /dev/null
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..abaa5cf
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,331 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.eclipse.openk</groupId>
+    <artifactId>mics-home-service</artifactId>
+    <version>1.0.1</version>
+    <packaging>war</packaging>
+
+    <properties>
+        <gson.version>2.8.5</gson.version>
+        <log4j.version>1.2.17</log4j.version>
+        <commons-io.version>2.5</commons-io.version>
+        <junit.version>4.12</junit.version>
+        <easymock.version>3.4</easymock.version>
+        <powermock-api-easymock.version>1.6.6</powermock-api-easymock.version>
+        <powermock-module-junit4.version>1.7.3</powermock-module-junit4.version>
+        <servlet-api>3.1.0</servlet-api>
+        <jacoco-maven-plugin.version>0.7.9</jacoco-maven-plugin.version>
+        <sonar-maven-plugin.version>3.0.2</sonar-maven-plugin.version>
+        <swagger-maven-plugin-version>3.1.6</swagger-maven-plugin-version>
+        <swagger-jersey2-jaxrs>1.5.12</swagger-jersey2-jaxrs>
+        <httpclient-version>4.5.5</httpclient-version>
+        <jaxrs-ri-version>2.22.1</jaxrs-ri-version>
+        <jackson-annotations-version>2.5.4</jackson-annotations-version>
+        <maven-compiler-plugin-version>3.1</maven-compiler-plugin-version>
+        <maven-jar-plugin-version>3.0.2</maven-jar-plugin-version>
+        <maven-war-plugin-version>2.1</maven-war-plugin-version>
+        <maven-project-info-reports-plugin-version>2.7</maven-project-info-reports-plugin-version>
+        <asciidoctor-maven-plugin-version>1.5.3</asciidoctor-maven-plugin-version>
+        <asciidoctorj-pdf-version>1.5.0-alpha.11</asciidoctorj-pdf-version>
+        <jruby-complete-version>1.7.21</jruby-complete-version>
+        <asciidoctorj-version>1.5.4</asciidoctorj-version>
+        <asciidoctorj-diagram-version>1.5.4.1</asciidoctorj-diagram-version>
+
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.test.skip>false</maven.test.skip>
+        <skip.asciidoc>false</skip.asciidoc>
+    </properties>
+    <dependencies>
+
+
+        <dependency>
+            <groupId>org.glassfish.jersey.bundles</groupId>
+            <artifactId>jaxrs-ri</artifactId>
+            <version>${jaxrs-ri-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>${httpclient-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>${servlet-api}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>${gson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>${log4j.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.sun.jmx</groupId>
+                    <artifactId>jmxri</artifactId>
+                </exclusion>
+
+                <exclusion>
+                    <groupId>com.sun.jdmk</groupId>
+                    <artifactId>jmxtools</artifactId>
+                </exclusion>
+
+                <exclusion>
+                    <groupId>javax.jms</groupId>
+                    <artifactId>jms</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>${commons-io.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.easymock</groupId>
+            <artifactId>easymock</artifactId>
+            <version>${easymock.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-api-easymock</artifactId>
+            <version>${powermock-api-easymock.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-module-junit4</artifactId>
+            <version>${powermock-module-junit4.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jacoco</groupId>
+            <artifactId>jacoco-maven-plugin</artifactId>
+            <version>${jacoco-maven-plugin.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+            <version>${jackson-annotations-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-jersey2-jaxrs</artifactId>
+            <version>${swagger-jersey2-jaxrs}</version>
+            <scope>compile</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.google.code.findbugs</groupId>
+                    <artifactId>annotations</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin-version}</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>${maven-jar-plugin-version}</version>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>${maven-war-plugin-version}</version>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-project-info-reports-plugin</artifactId>
+                <version>${maven-project-info-reports-plugin-version}</version>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>sonar-maven-plugin</artifactId>
+                <version>${sonar-maven-plugin.version}</version>
+            </plugin>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <version>${jacoco-maven-plugin.version}</version>
+                <configuration>
+                    <skip>${maven.test.skip}</skip>
+                    <output>file</output>
+                    <append>true</append>
+                    <excludes>
+                        <exclude>**/Globals.*</exclude>
+                        <exclude>**/dao/**/*Dao*.java</exclude>
+                        <exclude>**/controller/BackendController.java</exclude>
+                    </excludes>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>jacoco-initialize</id>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>jacoco-site</id>
+                        <phase>verify</phase>
+                        <goals>
+                            <goal>report</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.asciidoctor</groupId>
+                <artifactId>asciidoctor-maven-plugin</artifactId>
+                <version>${asciidoctor-maven-plugin-version}</version>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.asciidoctor</groupId>
+                        <artifactId>asciidoctorj-pdf</artifactId>
+                        <version>${asciidoctorj-pdf-version}</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.jruby</groupId>
+                        <artifactId>jruby-complete</artifactId>
+                        <version>${jruby-complete-version}</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.asciidoctor</groupId>
+                        <artifactId>asciidoctorj</artifactId>
+                        <version>${asciidoctorj-version}</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.asciidoctor</groupId>
+                        <artifactId>asciidoctorj-diagram</artifactId>
+                        <version>${asciidoctorj-diagram-version}</version>
+                    </dependency>
+                </dependencies>
+                <configuration>
+                    <sourceDirectory>src/main/asciidoc</sourceDirectory>
+                    <requires>
+                        <require>asciidoctor-diagram</require>
+                    </requires>
+                    <attributes>
+                        <imagesoutdir>${project.build.directory}/generated-docs/images</imagesoutdir>
+                        <imagesDir>${project.build.directory}/generated-docs/images</imagesDir>
+                    </attributes>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>output-html</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>process-asciidoc</goal>
+                        </goals>
+                        <configuration>
+                            <skip>${skip.asciidoc}</skip>
+                            <imagesDir>${project.build.directory}/generated-docs/images</imagesDir>
+                            <requires>
+                                <require>asciidoctor-diagram</require>
+                            </requires>
+                            <sourceHighlighter>coderay</sourceHighlighter>
+                            <backend>html</backend>
+                            <doctype>book</doctype>
+                            <imagesDir>./images</imagesDir>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>com.github.kongchen</groupId>
+                <artifactId>swagger-maven-plugin</artifactId>
+                <version>${swagger-maven-plugin-version}</version>
+                <configuration>
+                    <skipSwaggerGeneration>false</skipSwaggerGeneration>
+                    <apiSources>
+                        <apiSource>
+                            <springmvc>false</springmvc>
+                            <locations>
+                                <location>org.eclipse.openk.mics.home</location>
+                            </locations>
+                            <schemes>
+                                <shema>http</shema>
+                            </schemes>
+                            <host>localhost:8080</host>
+                            <basePath>/mics/home</basePath>
+                            <info>
+                                <title>micsHomeService@openK - Backend REST-Service documentation</title>
+                                <version>v1</version>
+                                <description>This documentation contains the description of all used REST services.</description>
+                                <termsOfService>
+                                    .
+                                </termsOfService>
+                                <contact>
+                                    <email>nn@pta.de</email>
+                                    <name></name>
+                                </contact>
+                                <license>
+                                    <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
+                                    <name>Apache 2.0</name>
+                                </license>
+                            </info>
+                            <outputFormats>yaml</outputFormats>
+                            <templatePath>${basedir}/templates/strapdown.html.hbs</templatePath>
+                            <outputPath>target/generated-docs/swaggerInterfaceDocumentation.html</outputPath>
+                            <swaggerDirectory>target/generated-docs/</swaggerDirectory>
+                            <securityDefinitions>
+                                <securityDefinition>
+                                    <json>/securityDefinitions.json</json>
+                                </securityDefinition>
+                            </securityDefinitions>
+                        </apiSource>
+                    </apiSources>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+
+</project>
diff --git a/sonar-project.properties b/sonar-project.properties
new file mode 100644
index 0000000..5f15f9b
--- /dev/null
+++ b/sonar-project.properties
@@ -0,0 +1,16 @@
+# must be unique in a given SonarQube instance
+sonar.projectKey=openk.pta.de:plannedGridMeasures-home-service-BE
+# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
+sonar.projectName=plannedGridMeasures-home-service-BE
+sonar.projectVersion=0.0.1_Snapshot
+ 
+sonar.sourceEncoding=UTF-8
+sonar.sources=src/main
+sonar.language=java
+sonar.exclusions=**/common/Globals.java,**/rest/*.java,**/LoggerUtil.java,**/dao/*.java,**/dao/interfaces/*.java,**/controller/BackendController*.java,**/auth2/**/*.java,**/communication/RestServiceWrapper.java,**/controller/BackendController.java
+sonar.binaries=target/classes
+sonar.cpd.exclusions=**/model/*.java,**/api/*.java
+sonar.tests=src/test
+sonar.java.coveragePlugin=jacoco
+sonar.junit.reportPaths=target/surefire-reports
+sonar.jacoco.reportPath=target/jacoco.exec
diff --git a/src/main/asciidoc/architectureDocumentation/mics.home_architectureDocumentation.adoc b/src/main/asciidoc/architectureDocumentation/mics.home_architectureDocumentation.adoc
new file mode 100644
index 0000000..351776d
--- /dev/null
+++ b/src/main/asciidoc/architectureDocumentation/mics.home_architectureDocumentation.adoc
@@ -0,0 +1,272 @@
+﻿////
+******************************************************************************
+* 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
+*
+******************************************************************************
+////
+openKonsequenz - Architecture of the module "mics.home@openK"
+============================================================
+:Author: Frank Dietrich
+:Email: frank.dietrich@pta.de
+:Date: 2017-07-12
+:Revision: 1
+:icons:
+:source-highlighter: highlightjs
+:highlightjs-theme: solarized_dark
+
+This documentation bases on ARC42-Template (v7.0):
+
+*About arc42*
+
+arc42, the Template for documentation of software and system architecture.
+
+By Dr. Gernot Starke, Dr. Peter Hruschka and contributors.
+
+Template Revision: 7.0 EN (based on asciidoc), January 2017
+
+© We acknowledge that this document uses material from the arc 42 architecture template, http://www.arc42.de.
+Created by Dr. Peter Hruschka & Dr. Gernot Starke.
+
+<<<
+
+== Introduction and Goals
+
+=== Requirements Overview
+
+TODO
+
+=== Quality Goals
+
+The eLogbook represents a user module that bases on the architecture platform of openKONSEQUENZ. The main quality
+goals of the platform are:
+
+* *Flexibility* The reference platform shall grant that different systems and modules from different vendors/developers can interact and interoperate, and may be exchanged or recombined.
+* *Availability* All platform modules that are running on the platform can only be as available as the platform same for user modules that are based on platform modules.
+* *Maintainability* (and testability as part of maintainability)  The platform and its platform modules shall be used longer than 15 years.
+* *Integration performance* New implemented functionality of oK own modules and external modules shall be included fast / automatically.
+* *Security* The platform and its modules need to underly security-by-design
+
+The main quality goals of the user module eLogbook are:
+
+* *Functionality* The user module must fulfil the functional requirements mentioned in the section before
+* *Integration performance* The user module must be easy integratable in different production environments. * Modifiability (and testability as part of modifiability) Good documentation (i.e. code and architecture documentation) makes code changes easier and automatic tests facilitate rigorous verification. * Ergonomics The web interface must be realized according to oK-GUI-Styleguide.
+
+The following documents contain the quality goals in detail:
+
+* "Architecture Committee Handbook" v1.2 from 14-09-2016
+* "Quality Committee Handbook" v1.1 from 18-08-2016
+
+The architecture is based on the AC-Handbook. The
+quality demands are described in the QC-Handbook.
+Both specifications were fully complied with in the project, so that a high quality is given.
+
+The code quality regarding static code analysis and unit test code coverage on the backend side is ensured by the
+use of *sonarqube*. The rule set and the qualtity gate are defined by the default, the so called "sonar way".
+
+
+=== Stakeholders
+
+.Stakeholders
+[options="header,footer"]
+|=========================================================
+|Role/Name|Contact|Expectations
+|=========================================================
+
+== Architecture Constraints
+
+The main architecture constraints are:
+
+* *Public License* The module must be available under the “Eclipse Public License 1.0”.
+* *Availability* The source code of the module must be accessible to any interested person/company. Therefore the project is published at https://projects.eclipse.org/projects/technology.elogbook
+* *Standardization* The module must use standardized data structures (CIM) [if available] and the reference platform.
+
+=== Technical Constraints
+
+The following technical constraints are given:
+
+.Technical Contraints
+[options="header,footer"]
+|========================================================
+|Component|Constraints
+|Basis components of the reference platform|
+- Application Server Tomcat
+- JPA EclipseLink
+- Database PostgreSQL
+
+|Enterprise Service Bus|
+* ESB Talend
+* Communication via RESTful Webservices
+
+|Programming Language Frontend
+a|* Angular
+* Bootstrap
+* jQuery
+* REST/JSON Interfaces
+
+|GUI design
+a|* According to oK-GUI-Styleguide
+
+|Java QA environment|Sonarqube 5.6.6
+
+|Programming Language
+a|* Backend: Java 1.8
+* Frontend: Angular 4.0.0 (Javascript, Typescript, HTML5, CSS3)
+
+|IDE
+a|* Not restricted (Eclipse, IntelliJ, Microsoft Developer Studio, Microsoft Visual Code ...)
+
+|Build system
+a|* Backend: Maven
+* Frontend: NodeJS + Angular/cli
+
+|Libraries, Frameworks,Components
+a|* Used Libraries/Frameworks have to be compatible to the Eclipse Public License
+|Architecture Documentation|* According ARC42-Template
+|========================================================
+
+
+=== Technical Dependencies
+
+== System Scope and Context
+
+=== Business Context
+
+
+
+=== Technical Context
+
+The following aspects have to be taken into account for external communication of the module eLogbook:
+
+* As interface-technology RESTful web services are used.
+* Each external interface (interfaces between modules or external systems) has to be documented.
+* Dependencies of modules to services realized by other modules have to be specified and documented explicitly.
+* When CIM is not appropriate (like access management), other standards in their respective domain shall be taken into account first to avoid proprietary and inaccurate interfaces. The interface has also be documented in the overall openKONSEQUENZ interface profile and it should use REST & XML.
+
+The interfaces of the module eLogbook are described in the documentation *"elogbook_interfaceDocumentation"*.
+ 
+=== Solution Strategy
+
+== Building Block View
+
+=== Whitebox Overall System
+
+
+
+
+
+== Runtime View
+
+
+== Deployment View
+
+
+=== Deployment of the application components
+
+==== Deployment of the frontend
+
+==== Deployment of the backend
+
+
+==== Configuration of the system
+
+
+===== Configuration of the webserver
+
+There exists the file *context.xml* in the "conf" subdirectory (*<TOMCAT>/conf*) of the target apache tomcat installation.
+Add the following parameter and resource in order to access the correct backend configuration and to
+gain access to the database:
+
+.context.xml
+[source,xml]
+----
+[...]
+    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
+
+    <!--Manager pathname=""/>
+
+
+    <Parameter name="environment" override="false" value="Development"/-->
+
+    <Parameter name=""OK_MICS_HOME_ENVIRONMENT" override="false" value="Production"/>
+
+
+    <!-- Uncomment this to enable Comet connection tacking (provides events
+         on session expiration as well as webapp lifecycle) -->
+[...]
+----
+
+
+===== Configuration of the backend
+
+After the backend war file has been deployed and unpacked inside of the *<TOMCAT>/webapps* folder there are different
+ backend config files to be found in the folder *<TOMCAT>/webapps/elogbook/WEB-INF/classes*
+
+* backendConfigCustom.json
+* backendConfigDevLocal.json
+* backendConfigDevServer.json
+* backendConfigProduction.json
+
+The active configuration is chosen by parameter *OK_MICS_HOME_ENVIRONMENT* (see context.xml above).
+Possible values are:
+
+* *Custom* (for backendConfigCustom.json)
+* *DevLocal* (for backendConfigDevLocal.json)
+* *DevServer* (for backendConfigDevServer.json)
+* *Production* (for backendConfigProduction.json)
+
+After choosing an environment the corresponding json file has to be configured:
+
+.backendConfigXXX.json
+[source,json]
+----
+{
+  "micsDistributionCluster" : "elogbook.openK",
+  "micsCentralURL" : "http://localhost:9010/mics/central"
+}
+
+----
+* *micsDistributionCluster* - TODO
+* *micsCentralURL* - TODO
+
+
+
+=== CI- and CD-Components
+
+==== GIT-Repository
+
+
+=== Continuous Deployment
+
+
+== Design Decisions
+
+All architecture decisions based on the Architecture Committee Handbook. There are no deviations.
+
+== Risks and Technical Debts
+
+(Currently there aren't any known issues)
+
+<<<
+
+== Glossary
+
+.Abbreviations and glossary terms
+[options="header,footer"]
+|========================================================
+|Short|Long|German|Description
+|AC|Architecture Committee|Architektur-Komittee|Gives Framework and Constraints according to architecture for oK projects.
+|CNCU|Central Network Control Unit||
+|DAO|Data Access Objects||
+|DSO|Distribution System Operator|Verteilnetz-betreiber (VNB)|Manages the distribution network for energy, gas or water.
+|EPL|Eclipse Public License||Underlying license model for Eclipse projects like elogbook@openK
+|ESB|Enterprise Service Bus||Central instance for exchange of data to overcome point-to-point connections.
+|oK|openKONSEQUENZ|openKONSEQUENZ|Name of the consortium of DSOs
+|QC|Quality Committee|Qualitätskomitee|Gives framework and constraints according to quality for oK projects.
+|SCADA|Supervisory Control and Data Acquisition|Netzleitsystem|System, that allows DSOs view/control actual parameters of their power grid.
+|========================================================
+
diff --git a/src/main/asciidoc/howto/mics.home_howtoBuild.adoc b/src/main/asciidoc/howto/mics.home_howtoBuild.adoc
new file mode 100644
index 0000000..593a91d
--- /dev/null
+++ b/src/main/asciidoc/howto/mics.home_howtoBuild.adoc
@@ -0,0 +1,100 @@
+////
+******************************************************************************
+* 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
+*
+******************************************************************************
+////
+= openKonsequenz - How to build the module "mics.home@openK"
+:Date: 2017-11-17
+:Revision: 1
+:icons:
+:source-highlighter: highlightjs
+:highlightjs-theme: solarized_dark
+
+<<<
+
+IMPORTANT: Please be sure that you have first *Portal (Auth n Auth)* installed and configured!
+
+== Requirements
+* Apache Tomcat 8.0.30
+* Node.js 6.10.0
+* Angular-CLI
+* Graphviz
+
+== How to build the Backend
+To build the backend you need to have installed Apache Maven and Java (look at `/deploy/`*get_started.txt*).
+
+=== Install and Configure Apache Tomcat
+Tomcat is an open-source Java Servlet Container and provides a "pure Java" HTTP web server environment in which Java code can run.
+
+* Download Tomcat version 8.0.30 from https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.30/bin/
+and extract it (apache-tomcat-8-0-30.zip).
+* Place the extracted folder on your C drive.
+* Configure Tomcat:
+** Configure the *context.xml* file. Copy the *<Resource … >* block from the project file `deploy/conf/`*context.xml*
+and paste it in the `<tomcat>/conf/`*context.xml* in the *<Context>* block.
+
+ <Parameter name="OK_MICS_HOME_ENVIRONMENT" override="false" value="DevLocal"/>
+
+** Dont forget to save it.
+
+
+TIP: For more informations check *Deployment View* Chapter in *http://87.128.212.254:8880/elogbookFE_ADoc/elogbook_architectureDocumentation.html[elogbook_architectureDocumentation]*.
+
+** Tomcat also needs the database driver to be placed in `<tomcat>/lib`. Find it in the project file `deploy/lib/`*postgresql-xxx.jar*.
+
+
+=== Install Graphviz
+Graphviz is open source graph visualization software. You need this software because of auto-generated graphics in the documentations.
+
+* Download and install Graphviz from http://www.graphviz.org/Download_windows.php
+* If not, set the PATH variable
+
+ Name of variable: GRAPHVIZ_DOT
+ Value of variable: <GRAPHVIZ_DIR>\bin\dot.exe
+
+
+== How to build the Frontend
+
+=== Install Node.js
+
+Node.js is an open-source, cross-platform JavaScript run-time environment for executing JavaScript (also Typescript which is a strongly typed form of JavaScript) code server-side.
+
+* Download Node.js 6.10.0 from https://nodejs.org/download/release/v6.10.0/ by clicking on a xxx.msi image for windows.
+* Run the downloaded Node.js .msi Installer - including accepting the license, selecting the destination, and authenticating for the install.
+This requires Administrator privileges, and you may need to authenticate
+* To ensure Node.js has been installed, run the following in your terminal - you should get something like v6.10.0
+
+[source,command]
+----
+    $ node -v
+----
+{blank}
+
+=== Update the npm Angular-CLI client
+This package manager comes bundled with Node.js and its good to have the latest version.
+
+* Open a command line and navigate to the root folder of the frontend project
+* Run the following commands (the version is defined in the package.json file):
+
+[source,command]
+----
+    $ npm install --save-dev @angular/cli
+----
+{blank}
+
+[source,command]
+----
+    $ npm install
+----
+{blank}
+
+TIP: Next Step -> Read the *mics.home_howtoRun* file!
+
+
+
diff --git a/src/main/asciidoc/howto/mics.home_howtoRun.adoc b/src/main/asciidoc/howto/mics.home_howtoRun.adoc
new file mode 100644
index 0000000..a18cd49
--- /dev/null
+++ b/src/main/asciidoc/howto/mics.home_howtoRun.adoc
@@ -0,0 +1,82 @@
+////
+******************************************************************************
+* 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
+*
+******************************************************************************
+////
+= openKonsequenz - How to run the module "mics.home@openK"
+:Date: 2017-11-17
+:Revision: 1
+:icons:
+:source-highlighter: highlightjs
+:highlightjs-theme: solarized_dark
+
+<<<
+
+IMPORTANT: Please be sure that you have first *Portal (Auth n Auth)* installed and configured!
+
+== Requirements
+* Browser (Chrome or IE11 suggested)
+
+== Prerequisites
+
+* *To see this application running you have to run Portal application too.* The reason is the authentication, which happened in the Portal login phase.
+
+* A developing and administrating software for databases
+
+
+== How to run the Backend
+To run the backend you need to have installed and configured Apache Tomcat (look at *mics.home_howtoBuild*).
+
+=== Set up and start Apache Tomcat
+Tomcat needs the Web Application Archive (war) file, which is produced by building the maven project, to run the application.
+
+* Copy the *mics-home-app.war* file from the project file `/target` in the `<tomcat>/webapps` file. If there is a folder named *betriebstagebuch*, delete it before.
+* Navigate to `C:\apache-tomcat-8.0.30\bin` and start Tomcat by clicking on *startup.bat*.
+* Tomcat's default port is *8080*.
+
+[source,text]
+----
+If 8080 port is already in use, you have to change tomcat's port as follows:
+- Go to <tomcat>/conf folder
+- Open server.xml file and search for "Connector port"
+- Replace "8080" by your port number (for example 8181)
+- Restart tomcat server (in the same folder which startup.bat is located, you can also find a shutdown.bat file).
+----
+{blank}
+
+IMPORTANT: If you change the port number you have also adapt the port in the
+frontend project: File "<Frontend-Path>/proxy.conf.json"
+
+== How to run the Frontend
+To run the frontend project you need to have installed and updated Node.js and npm Angular-CLI.
+
+=== Compile the Frontend
+
+To compile say Angular-CLI to start.
+
+* Open a command line and navigate to the root folder of the frontend project
+* Run the command
+
+[source,command]
+----
+   $  npm start
+----
+{blank}
+
+* Open a browser and type:
+
+[source,http]
+----
+    http://localhost:4200
+----
+{blank}
+
+
+
+
diff --git a/src/main/asciidoc/images/icons/caution.png b/src/main/asciidoc/images/icons/caution.png
new file mode 100644
index 0000000..9a8c515
--- /dev/null
+++ b/src/main/asciidoc/images/icons/caution.png
Binary files differ
diff --git a/src/main/asciidoc/images/icons/important.png b/src/main/asciidoc/images/icons/important.png
new file mode 100644
index 0000000..be685cc
--- /dev/null
+++ b/src/main/asciidoc/images/icons/important.png
Binary files differ
diff --git a/src/main/asciidoc/images/icons/note.png b/src/main/asciidoc/images/icons/note.png
new file mode 100644
index 0000000..7c1f3e2
--- /dev/null
+++ b/src/main/asciidoc/images/icons/note.png
Binary files differ
diff --git a/src/main/asciidoc/images/icons/tip.png b/src/main/asciidoc/images/icons/tip.png
new file mode 100644
index 0000000..f087c73
--- /dev/null
+++ b/src/main/asciidoc/images/icons/tip.png
Binary files differ
diff --git a/src/main/asciidoc/images/icons/warning.png b/src/main/asciidoc/images/icons/warning.png
new file mode 100644
index 0000000..d41edb9
--- /dev/null
+++ b/src/main/asciidoc/images/icons/warning.png
Binary files differ
diff --git a/src/main/asciidoc/interfaceDocumentation/elogbook_interfaceDocumentation.adoc b/src/main/asciidoc/interfaceDocumentation/elogbook_interfaceDocumentation.adoc
new file mode 100644
index 0000000..e0913bc
--- /dev/null
+++ b/src/main/asciidoc/interfaceDocumentation/elogbook_interfaceDocumentation.adoc
@@ -0,0 +1,2022 @@
+﻿////
+******************************************************************************
+* 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
+*
+******************************************************************************
+////
+eLogbook@openK - Backend REST-Service documentation
+===================================================
+:Author: Frank Dietrich
+:Email: frank.dietrich@pta.de
+:Date: 2017-07-12
+:Revision: 1
+:icons:
+:source-highlighter: highlightjs
+:highlightjs-theme: solarized_dark
+
+
+== Base-URL
+[source,text]
+----
+http://<host>:<port>/<name-of-war>/rest/beservice
+----
+{blank}
+
+== Common Features
+All services may return the following http status codes:
+
+.Http-Status-Codes
+[options="header,footer"]
+|=========================================================
+|Code|Description|Usage within the application
+|200|OK|-
+|400|Bad Request|The structure of the request (for example a JSON within a post request) is not correct
+|401|Unauthorized|Login-credentials are wrong or there is an invalid session token
+|404|Not found|A resource cannot be found (for example trying to get an entity with an invalid id)
+|423|Locked|A resource is locked, because another user has blocked it
+|500|Internal Server Error|An unexpected error occurred
+|=========================================================
+
+If there is a special service behavior regarding the returned http status code, then it will be explained within the service description.
+
+== Protection
+There are two components that are involved, for the authentication of the services:
+
+ . HTTP-Header-Parameter: Authorization
+
+The “login”-services provides both tokens, when called with valid user-credentials. The client of the service has to pass over a valid Authorization, which belongs to Cookie. Other the protected services will come back with a 401-Unauthorized HTTP-Status code.
+
+The protection of a service can be
+
+* None  (The service is unprotected)
+* Normal (The service is available for all logged in users)
+* High (The service is only available for administrators)
+
+The backend server itself determines the secure level of the session. All services that have a
+protection which is not “None” need to provide “Authorization” and “COOKIESESSION-TOKEN”!
+
+== General Services
+=== Receive Version Information
+This service returns the current version of the backend implementation and the version of the database structure.
+
+*URL:* /versionInfo
+
+*Method:* GET
+
+*Request-Headers*:
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+{
+    "dbVersion": "0.1.1_Snapshot",
+    "backendVersion": "0.1.1-Snapshot"
+}
+----
+{blank}
+
+*Protection*: none
+
+*Remarks*:
+
+=== Login
+This service receives login credentials in order to perform the authentication. If the login succeeds,
+it provides the session-token and a session cookie, used for accessing other services later on.
+
+*URL:* /login
+
+*Method:* POST
+
+*Request-Headers*:
+
+* Authorization (Optional) – Existing JWT token
+
+*Request-Body*:
+[source,json]
+----
+{
+  "userName": "Mustermann",
+  "password": "clearpassword"
+}
+----
+{blank}
+
+*Produces*: application/json
+
+*Response-Headers*:
+
+* Authorization - JWT token
+* COOKIESESSION-TOKEN - session cookie
+
+*Response*:
+[source,json]
+----
+{
+    "id": 1,
+    "selected": false,
+    "username": "Mustermann",
+    "name": "Max Mustermann",
+    "specialUser": false
+}
+----
+{blank}
+
+*Protection*: none
+
+*Remarks*: The response headers are only returned when the login was successful.
+
+
+=== Logout
+This services kills the server session belonging to the the given session token.
+
+*URL:* /logout
+
+*Method:* POST
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Observer Control
+This service checks if the authenticated session user is an observer(he has no responsibilities).
+
+*URL:* /isObserver
+
+*Method:* GET
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+{
+    true
+}
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+== Master Data Services
+
+=== Receive Notification Statuses
+This service returns an array of available notification statuses.
+
+*URL:* /notificationStatuses
+
+*Method:* GET
+
+*Request-Headers*:
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+    {
+        "id": 1,
+        "name": "offen"
+    },
+    {
+        "id": 2,
+        "name": "in Arbeit"
+    },
+    {
+        "id": 3,
+        "name": "erledigt"
+    },
+    {
+        "id": 4,
+        "name": "geschlossen"
+    }
+]
+----
+{blank}
+
+*Protection*: none
+
+*Remarks*:
+
+=== Receive Branches
+This service returns an array of available notification statuses.
+
+*URL:* /branches
+
+*Method:* GET
+
+*Request-Headers*:
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+    {
+        "id": 1,
+        "name": "S",
+        "description": "Strom"
+
+    },
+    {
+        "id": 2,
+        "name": "G",
+        "description": "Gas"
+
+    },
+     ...
+]
+----
+{blank}
+
+*Protection*: none
+
+*Remarks*:
+
+=== Receive GridTerritories
+This service returns an array of available grid territories.
+
+*URL:* /gridTerritories
+
+*Method:* GET
+
+*Request-Headers*:
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+    {
+        "id": 1,
+        "name": "MA",
+        "description": "Mannheim",
+        "fk_ref_master": 1
+
+    },
+    {
+        "id": 2,
+        "name": "OF",
+        "description": "Offenbach",
+        "fk_ref_master": 1
+
+    },
+    ...
+]
+----
+{blank}
+
+*Protection*: none
+
+*Remarks*:
+
+== Application Services
+=== Receive Responsibilities
+This service returns the responsibilities for the authenticated session user.
+
+*URL:* /currentResponsibilities
+
+*Method:* GET
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+    {
+        "gridTerritoryDescription": "Mannheim",
+        "responsibilityList": [
+            {
+                "id": 1,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "S",
+                "isActive": true
+            },
+            {
+                "id": 2,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "G",
+                "isActive": true
+            }
+        ]
+    },
+    {
+        "gridTerritoryDescription": "Offenbach",
+        "responsibilityList": [
+            {
+                "id": 4,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "G",
+                "isActive": true
+            }
+        ]
+    }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Receive Planned Responsibilities
+This service returns the planned responsibilities for the authenticated session user.
+
+*URL:* /plannedResponsibilities
+
+*Method:* GET
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+    {
+        "gridTerritoryDescription": "Mannheim",
+        "responsibilityList": [
+            {
+                "id": 1,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "S",
+                "isActive": true
+            },
+            {
+                "id": 2,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "G",
+                "isActive": true
+            }
+        ]
+    },
+    {
+        "gridTerritoryDescription": "Offenbach",
+        "responsibilityList": [
+            {
+                "id": 4,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "G",
+                "isActive": true
+            }
+        ]
+    }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Receive All Responsibilities
+This service returns all the responsibilities.
+
+*URL:* /allResponsibilities
+
+*Method:* GET
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+    {
+        "gridTerritoryDescription": "Offenbach",
+        "responsibilityList": [
+            {
+                "id": 5,
+                "responsibleUser": "hugo",
+                "branchName": "F",
+                "isActive": true
+            },
+            {
+                "id": 4,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "otto",
+                "branchName": "G",
+                "isActive": true
+            },
+            {
+                "id": 7,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "otto",
+                "branchName": "S",
+                "isActive": true
+            },
+            {
+                "id": 8,
+                "responsibleUser": "hugo",
+                "branchName": "W",
+                "isActive": true
+            }
+        ]
+    },
+    {
+        "gridTerritoryDescription": "Mannheim",
+        "responsibilityList": [
+            {
+                "id": 1,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "hugo",
+                "branchName": "S",
+                "isActive": true
+            },
+            {
+                "id": 3,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "otto",
+                "branchName": "F",
+                "isActive": true
+            },
+            {
+                "id": 6,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "hugo",
+                "branchName": "W",
+                "isActive": true
+            },
+            {
+                "id": 2,
+                "responsibleUser": "hugo",
+                "branchName": "G",
+                "isActive": true
+            }
+        ]
+    }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Receive Historical Responsibilities
+This service returns the responsibility history of a specific-given version.
+
+*URL:* /historicalResponsibilities/{transactionId}
+
+*Method:* GET
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+    {
+        "id": 2,
+        "responsibleUser": "hugo",
+        "formerResponsibleUser": "max",
+        "transferDate": "2017-08-04T08:53:27.502Z",
+        "transactionId": 1,
+        "createDate": "2017-06-19T12:34:35.881Z",
+        "createUser": "admin",
+        "modDate": "2017-08-04T08:53:27.502Z",
+        "modUser": "hugo",
+        "refGridTerritory": {
+            "id": 1,
+            "fkRefMaster": 1,
+            "description": "Mannheim",
+            "name": "MA"
+        },
+        "refBranch": {
+            "id": 3,
+            "name": "F",
+            "description": "Fernwärme"
+        }
+    },
+    {
+        "id": 3,
+        "responsibleUser": "hugo",
+        "formerResponsibleUser": "admin",
+        "transferDate": "2017-08-04T08:53:27.502Z",
+        "transactionId": 1,
+        "createDate": "2017-06-19T11:14:38.525Z",
+        "createUser": "Otto",
+        "modDate": "2017-08-04T08:53:27.502Z",
+        "modUser": "hugo",
+        "refGridTerritory": {
+            "id": 2,
+            "fkRefMaster": 2,
+            "description": "Offenbach",
+            "name": "OF"
+        },
+        "refBranch": {
+            "id": 3,
+            "name": "F",
+            "description": "Fernwärme"
+        }
+    },
+    {
+        "id": 4,
+        "responsibleUser": "hugo",
+        "formerResponsibleUser": "admin",
+        "transferDate": "2017-08-04T08:53:27.502Z",
+        "transactionId": 1,
+        "createDate": "2017-06-19T11:14:38.532Z",
+        "createUser": "Otto",
+        "modDate": "2017-08-04T08:53:27.502Z",
+        "modUser": "hugo",
+        "refGridTerritory": {
+            "id": 1,
+            "fkRefMaster": 1,
+            "description": "Mannheim",
+            "name": "MA"
+        },
+        "refBranch": {
+            "id": 4,
+            "name": "W",
+            "description": "Wasser"
+        }
+    },
+    {
+        "id": 5,
+        "responsibleUser": "hugo",
+        "formerResponsibleUser": "otto",
+        "transferDate": "2017-08-04T08:53:27.502Z",
+        "transactionId": 1,
+        "createDate": "2017-07-24T11:13:00.000Z",
+        "createUser": "admin",
+        "modDate": "2017-08-04T08:53:27.502Z",
+        "modUser": "hugo",
+        "refGridTerritory": {
+            "id": 2,
+            "fkRefMaster": 2,
+            "description": "Offenbach",
+            "name": "OF"
+        },
+        "refBranch": {
+            "id": 4,
+            "name": "W",
+            "description": "Wasser"
+        }
+    }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Create Notification
+This service creates a new notification in the database. It returns the same entity which the Ids and the version provided by the database.
+
+*URL:* /notifications/create
+
+*Method:* PUT
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Consumes*: application/json
+
+*Request*:
+[source,json]
+----
+{
+  "status": "offen",
+  "notificationText": null,
+  "freeText": "",
+  "freeTextExtended": "extended",
+  "responsibilityForwarding": "",
+  "responsibilityControlPoint": "Abteilung 4",
+  "reminderDate": null,
+  "futureDate": null,
+  "createdDate": "2017-03-09T15:27:17",
+  "expectedFinishDate": null,
+  "finishedDate": null,
+  "creator": "MasterAndCreator",
+  "modDate": "2017-03-09T15:27:17",
+  "modUser": "_fd",
+  "fkRefBranch": 1,
+  "fkRefNotificationStatus": 2,
+  "fkRefGridTerritories": 2
+}
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+{
+    "id": 27,
+    "incidentId": 18,
+    "version": 1,
+    "selected": false,
+    "status": "in Arbeit",
+    "notificationText": "Meldung X:Y",
+    "freeText": "",
+    "freeTextExtended": "extended",
+    "responsibilityForwarding": "",
+    "responsibilityControlPoint": "Abteilung 4",
+    "createdDate": "2017-03-09T15:27:17",
+    "creator": "MasterAndCreator",
+    "modDate": "2017-03-09T15:27:17",
+    "modUser": "_fd",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 2,
+	"fkRefGridTerritories": 1
+}
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Update Notification
+This service stores a modified notification by inserting a new version of it into the database.  It returns the same
+entity with a new version number and the user modifications.
+
+*URL:* /notifications/update
+
+*Method:* POST
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Consumes*: application/json
+
+*Request*:
+[source,json]
+----
+{
+    "id": 27,
+    "incidentId": 18,
+    "version": 1,
+    "selected": false,
+    "status": "in Arbeit",
+    "notificationText": "Meldung X:Y",
+    "freeText": " Meldung ergänzt um diesen Text ",
+    "freeTextExtended": "extended",
+    "responsibilityForwarding": "",
+    "responsibilityControlPoint": "Abteilung 4",
+    "createdDate": "2017-03-09T15:27:17",
+    "creator": "MasterAndCreator",
+    "modDate": "2017-03-09T15:27:17",
+    "modUser": "_fd",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 2
+}
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+{
+    "id": 31,
+    "incidentId": 18,
+    "version": 2,
+    "selected": false,
+    "status": "in Arbeit",
+    "notificationText": "Meldung X:Y",
+    "freeText": "Meldung ergänzt um diesen Text",
+    "freeTextExtended": "extended",
+    "responsibilityForwarding": "",
+    "responsibilityControlPoint": "Abteilung 4",
+    "createdDate": "2017-03-09T15:27:17",
+    "creator": "MasterAndCreator",
+    "modDate": "2017-03-09T15:27:17",
+    "modUser": "_fd",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 2
+}
+----
+{blank}
+
+*Throws*: BtbLocked (Http StatusCode: 423) : Is thrown if the notification status is locked and the service is called
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Get Notification
+This retrieves a notification from the database.
+
+*URL:* /notification/{id}
+
+*Method:* GET
+
+*Path-Parameter*: id
+
+* The primary key of the notification
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+{
+    "id": 27,
+    "incidentId": 18,
+    "version": 2,
+    "selected": false,
+    "status": "in Arbeit",
+    "notificationText": "Meldung X:Y",
+    "freeText": "Meldung ergänzt um diesen Text",
+    "freeTextExtended": "extended",
+    "responsibilityForwarding": "",
+    "responsibilityControlPoint": "Abteilung 4",
+    "createdDate": "2017-03-09T15:27:17",
+    "creator": "MasterAndCreator",
+    "modDate": "2017-03-09T15:27:17",
+    "modUser": "_fd",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 2
+}
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Get Notifications
+This service retrieves a list of notifications from the database. The selection is based on the given filter-object.
+With no filter value specified, the collection returned contains all active notifications. With filter value(s) set, only
+notifications matching the filter values are returned.
+
+The following list explains the available filter values:
+
+* The filter-values “dateFrom” and “dateTo” are compared against the “begin_date” of the notifications (closed interval).
+* The filter values in "responsibilityFilterList" are compared against the id of the notifications.
+* If the boolean filter value "historicalFlag" is "true" historical notifcations are returned.
+* If the boolean filter value is null or "false", active notifications are returned.
+* With historicalFlag set, the corresponding "shiftChangeTransactionId must also be set to obtain a valid result. In this
+case, other filter values do not make sense and are not evaluated.
+
+*URL:* /notifications/{listType}
+
+*Method:* POST
+
+*Path-Parameters*:
+
+* listType - The type of the list for which the data will be loaded: "PAST", "OPEN", "FUTURE"
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+
+*Consumes*: application/json
+
+*Request*:
+[source,json]
+----
+{
+  "dateFrom": "2017-03-09T15:27:17.666Z",
+  "dateTo": "2017-04-09T15:27:17.666Z",
+    "responsibilityFilterList": [
+                                    1, 6
+                                ]
+}
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+  {
+    "id": 1161,
+    "incidentId": 337,
+    "version": 10,
+    "selected": false,
+    "status": "in Arbeit",
+    "beginDate": "2017-05-24T07:11:00.000Z",
+    "notificationText": "UW4 Wartungsarbeiten LSA",
+    "freeText": "Hr. xxx vor Ort",
+    "freeTextExtended": "Hr.yyy ist auch vor Ort",
+    "responsibilityForwarding": "Müller",
+    "responsibilityControlPoint": "Administrator",
+    "expectedFinishDate": "2017-05-24T14:00:00.000Z",
+    "createUser": "admin",
+    "createDate": "2017-05-24T07:03:54.429Z",
+    "modDate": "2017-08-18T14:15:10.355Z",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 2,
+    "fkRefGridTerritory": 1,
+    "adminFlag": false
+  },
+  {
+    "id": 601,
+    "incidentId": 566,
+    "version": 8,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-06-17T11:37:00.000Z",
+    "notificationText": "FD #5",
+    "freeText": "fd",
+    "freeTextExtended": "",
+    "responsibilityControlPoint": "Administrator",
+    "expectedFinishDate": "2017-06-19T23:01:00.000Z",
+    "finishedDate": "2017-06-19T13:27:11.333Z",
+    "createUser": "admin",
+    "createDate": "2017-06-19T11:38:17.369Z",
+    "modDate": "2017-06-19T13:27:12.598Z",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 1,
+    "adminFlag": false
+  }
+]
+----
+{blank}
+
+*Request for historical notifications*:
+[source,json]
+----
+{
+ "historicalFlag": true,
+ "shiftChangeTransactionId": 33
+ }
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+  {
+    "id": 1191,
+    "incidentId": 750,
+    "version": 11,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-07-25T22:00:00.000Z",
+    "notificationText": "c--d ddddddd",
+    "responsibilityControlPoint": "Max Mustermann",
+    "expectedFinishDate": "2017-07-27T22:00:00.000Z",
+    "finishedDate": "2017-07-31T07:24:43.959Z",
+    "createUser": "admin",
+    "createDate": "2017-07-24T12:20:13.232Z",
+    "modDate": "2017-08-21T11:24:32.855Z",
+    "modUser": "max",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 2,
+    "adminFlag": false
+  },
+  {
+    "id": 994,
+    "incidentId": 825,
+    "version": 6,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-08-07T09:41:12.082Z",
+    "notificationText": "dddd",
+    "freeText": "53w5",
+    "freeTextExtended": "terterwrew",
+    "responsibilityControlPoint": "Administrator",
+    "finishedDate": "2017-08-08T10:19:36.001Z",
+    "createUser": "admin",
+    "createDate": "2017-08-07T09:41:55.048Z",
+    "modDate": "2017-08-08T10:19:37.454Z",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 2,
+    "adminFlag": false
+  }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+
+
+=== Get Notifications by Incident-ID
+This service retrieves a list of notifications from the database. All the returned
+notifications are all versions of the given incident-ID. The sort-order is version descending.
+
+
+*URL:* /notificationsByIncident/{incidentId}
+
+*Method:* GET
+
+*Path-Parameters*:
+
+* incidentId - The incident-ID of all the versions to be returned
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+  {
+    "id": 199,
+    "incidentId": 2,
+    "version": 3,
+    "selected": false,
+    "status": "offen",
+    "beginDate": "2017-05-14T12:30:00",
+    "notificationText": "sfg",
+    "freeText": "freetext11",
+    "freeTextExtended": "freetext_extended",
+    "reminderDate": "2017-05-19T18:05:00",
+    "createUser": "Creator",
+    "createDate": "2017-05-15T14:30:09",
+    "modDate": "2017-05-18T14:21:48",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 1
+  },
+  {
+    "id": 171,
+    "incidentId": 2,
+    "version": 2,
+    "selected": false,
+    "status": "offen",
+    "beginDate": "2017-05-14T12:30:00",
+    "notificationText": "sfg",
+    "freeText": "freetext11_old",
+    "freeTextExtended": "freetext_extended",
+    "reminderDate": "2017-05-19T18:05:00",
+    "createUser": "Creator",
+    "createDate": "2017-05-15T14:30:09",
+    "modDate": "2017-05-18T13:21:48",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 1
+  },
+  {
+    "id": 101,
+    "incidentId": 2,
+    "version": 1,
+    "selected": false,
+    "status": "offen",
+    "beginDate": "2017-05-14T12:30:00",
+    "notificationText": "sfg",
+    "freeText": "freetext11_old_older",
+    "freeTextExtended": "freetext_extended",
+    "reminderDate": "2017-05-19T18:05:00",
+    "createUser": "Creator",
+    "createDate": "2017-05-15T14:30:09",
+    "modDate": "2017-05-18T12:21:48",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 1
+  },
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+
+=== Get Notifications With Reminder
+This service retrieves a list of notifications from the database. The selection is based on the given filter-object.
+With no filter value specified, the collection returned contains all active open and in progress notifications. With filter value(s) set, only
+notifications matching the filter values are returned.
+
+The following list explains the available filter values:
+
+* The filter-value “reminderDate” is compared against the “reminder_date” of the notifications.
+* The filter values in "responsibilityFilterList" are compared against the id of the notifications.
+
+*URL:* /currentReminders
+
+*Method:* POST
+
+*Path-Parameter*: none
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Consumes*: application/json
+
+*Request*:
+[source,json]
+----
+{
+    "reminderDate":"2017-08-30T09:00:23.538Z",
+    "responsibilityFilterList":
+                                [
+                                    1, 2, 3
+                                ]
+}
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+     {
+          "id": 1218,
+          "incidentId": 572,
+          "version": 9,
+          "selected": false,
+          "status": "offen",
+          "beginDate": "2017-06-19T11:50:19.096Z",
+          "notificationText": "FD #9",
+          "freeText": "fd_",
+          "freeTextExtended": "",
+          "responsibilityControlPoint": "Administrator",
+          "reminderDate": "2017-08-22T22:00:00.000Z",
+          "createUser": "admin",
+          "createDate": "2017-06-19T11:50:37.391Z",
+          "modDate": "2017-08-25T08:57:51.890Z",
+          "modUser": "admin",
+          "fkRefBranch": 1,
+          "fkRefNotificationStatus": 1,
+          "fkRefGridTerritory": 1,
+          "adminFlag": false
+     },
+     {
+          "id": 1222,
+          "incidentId": 881,
+          "version": 3,
+          "selected": false,
+          "status": "offen",
+          "beginDate": "2017-08-07T14:48:46.873Z",
+          "notificationText": "ich bin eine anweisung mit dem admin flag",
+          "freeText": "sfas",
+          "freeTextExtended": "safas",
+          "responsibilityControlPoint": "Administrator",
+          "reminderDate": "2017-08-29T22:00:00.000Z",
+          "createUser": "admin",
+          "createDate": "2017-08-07T14:49:09.598Z",
+          "modDate": "2017-08-30T07:47:45.021Z",
+          "modUser": "admin",
+          "fkRefNotificationStatus": 1,
+          "adminFlag": true
+     }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+
+=== Get Historical Shift-Change List
+This service retrieves a list of documented shift changes (who transferred/took the shift including the timestamp)
+where the list can be narrowed by start date and end date.
+
+
+*URL:* /shiftChangeList
+
+*Method:* POST
+
+*Path-Parameters*: none
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Consumes*: application/json
+
+*Request*:
+[source,json]
+----
+{
+  "transferDateFrom": "2017-06-01T15:27:17.666Z",
+  "transferDateTo": "2017-08-09T15:27:17.666Z",
+}
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+{
+  "startDate": "2017-06-01T15:27:17.666Z",
+  "endDate": "2017-08-09T15:27:17.666Z",
+  "historicalResponsibilities": [
+    {
+      "id": 2,
+      "responsibleUser": "hugo",
+      "formerResponsibleUser": "max",
+      "transferDate": "2017-08-04T08:53:27.502Z",
+      "transactionId": 1,
+      "createDate": "2017-06-19T12:34:35.881Z",
+      "createUser": "admin",
+      "modDate": "2017-08-04T08:53:27.502Z",
+      "modUser": "hugo",
+      "refGridTerritory": {
+        "id": 1,
+        "fkRefMaster": 1,
+        "description": "Mannheim",
+        "name": "MA"
+      },
+      "refBranch": {
+        "id": 3,
+        "name": "F",
+        "description": "Fernwärme"
+      }
+    },
+    {
+      "id": 10,
+      "responsibleUser": "max",
+      "formerResponsibleUser": "admin",
+      "transferDate": "2017-08-08T13:50:10.862Z",
+      "transactionId": 3,
+      "createDate": "2017-06-19T12:34:35.881Z",
+      "createUser": "admin",
+      "modDate": "2017-08-08T13:50:10.861Z",
+      "modUser": "max",
+      "refGridTerritory": {
+        "id": 1,
+        "fkRefMaster": 1,
+        "description": "Mannheim",
+        "name": "MA"
+      },
+      "refBranch": {
+        "id": 3,
+        "name": "F",
+        "description": "Fernwärme"
+      }
+    },
+    {
+      "id": 11,
+      "responsibleUser": "max",
+      "formerResponsibleUser": "admin",
+      "transferDate": "2017-08-08T13:50:10.862Z",
+      "transactionId": 3,
+      "createDate": "2017-07-23T22:00:00.000Z",
+      "createUser": "max",
+      "modDate": "2017-08-08T13:50:10.861Z",
+      "modUser": "max",
+      "refGridTerritory": {
+        "id": 3,
+        "fkRefMaster": 3,
+        "description": "Darmstadt",
+        "name": "DA"
+      },
+      "refBranch": {
+        "id": 1,
+        "name": "S",
+        "description": "Strom"
+      }
+    }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Receive Users
+This service returns an array of all users.
+
+*URL:* /users
+
+*Method:* GET
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+    {
+        "id": 1,
+        "selected": false,
+        "username": "Mustermann",
+        "password": "Mustermann",
+        "name": "Max Mustermann",
+        "specialUser": false
+    },
+    {
+        "id": 2,
+        "selected": false,
+        "username": "admin",
+        "password": "admin",
+        "name": "Administrator",
+        "specialUser": true
+    },
+    {
+        "id": 3,
+        "selected": false,
+        "username": "Otto",
+        "password": "Otto",
+        "name": "Otto Normalverbraucher",
+        "specialUser": false
+    }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Plan Responsibility-Transfer
+This service prepares the responsibilities-transfer to another user. It returns an OK status
+in case of success. If the responsibilities of the current user have changed in the meantime, the updated data is returned.
+
+*URL:* /planResponsibilities
+
+*Method:* POST
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Consumes*: application/json
+
+*Request*:
+[source,json]
+----
+[
+    {
+        "gridTerritoryDescription": "Mannheim",
+        "responsibilityList": [
+            {
+                "id": 1,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "S",
+                "isActive": true
+            },
+            {
+                "id": 2,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "G",
+                "isActive": true
+            }
+        ]
+    },
+    {
+        "gridTerritoryDescription": "Offenbach",
+        "responsibilityList": [
+            {
+                "id": 4,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "G",
+                "isActive": true
+            }
+        ]
+    }
+]
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+{
+    "ret": "OK"
+}
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Confirm Responsibility-Transfer
+This service is used to confirm the planned responsibilities for the authenticated session user. It returns an OK status in case of success. If the
+responsibilities of the current user have changed in the meantime, the updated data is returned.
+
+*URL:* /confirmResponsibilities
+
+*Method:* POST
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Consumes*: application/json
+
+*Request*:
+[source,json]
+----
+[
+    {
+        "gridTerritoryDescription": "Mannheim",
+        "responsibilityList": [
+            {
+                "id": 1,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "S",
+                "isActive": true
+            },
+            {
+                "id": 2,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "G",
+                "isActive": true
+            }
+        ]
+    },
+    {
+        "gridTerritoryDescription": "Offenbach",
+        "responsibilityList": [
+            {
+                "id": 4,
+                "responsibleUser": "admin",
+                "newResponsibleUser": "Otto",
+                "branchName": "G",
+                "isActive": true
+            }
+        ]
+    }
+]
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+{
+    "ret": "OK"
+}
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Receive Assigned User Suggestions
+This service returns user suggestions for the 'Responsibility Forwarding' input field.
+
+*URL:* /assignedUserSuggestions
+
+*Method:* GET
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+    "Hermann Meister",
+    "Hugo Normalverbraucher",
+    "Max Mustermann",
+    "Michael Müller"
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Get SearchResults
+This service obtains a search filter with different search criteria. The service retrieves a list of those notifications from the database which match all search criteria. 
+
+The following search criteria are available to select/deselect:
+
+* Search string: Any string literal whose occurence will be searched in notification text, free text and extended free text column.
+  The input is case-insensitive.
+* Responsibility/forwarded to: Any string literal whose occurence will be searched in responsibility forwarding column.
+  The input is case-insensitive.
+* Branch: All branches or only one special branch can be included in search, default: ALL
+* Grid Territory: All grid territories or only one special grid territory can be included in search, default: ALL
+* Status: A checkbox for each status to be included into search, default: all checkboxes are selected
+* Fast search: If selected, only entries created or changed within the last two hundred days are included in search, default: selected
+
+*URL:* /getSearchResults
+
+*Method:* POST
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Consumes*: application/json
+
+*Request*:
+[source,json]
+----
+{
+"searchString": "TAriflichen",
+"responsibilityForwarding": "",
+"statusOpenSelection": true,
+"statusInWorkSelection": true,
+"statusDoneSelection": true,
+"statusClosedSelection": false,
+"fkRefBranch": 1,
+ "fkRefGridTerritory": 2,
+  "fastSearchSelected": true
+}
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+  {
+    "id": 1074,
+    "incidentId": 966,
+    "version": 28,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-08-08T08:25:26.920Z",
+    "notificationText": "Anweisung zur Einhaltung der Arbeitsschutzrichtlinien",
+    "freeText": "Änderung Bereich dazu!",
+    "freeTextExtended": "gilt nur für die tariflichen Mitarbeiter",
+    "responsibilityForwarding": "Hermann Meister",
+    "responsibilityControlPoint": "Administrator",
+    "createUser": "admin",
+    "createDate": "2017-08-08T08:26:03.140Z",
+    "modDate": "2017-08-09T17:02:08.049Z",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 2,
+    "adminFlag": false
+  },
+  {
+    "id": 1064,
+    "incidentId": 966,
+    "version": 19,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-08-08T08:25:26.920Z",
+    "notificationText": "Anweisung für alle tariflichen Mitarbeiter",
+    "freeText": "Änderung Bereich dazu!",
+    "freeTextExtended": "ddddddd",
+    "responsibilityForwarding": "Hermann Meister",
+    "responsibilityControlPoint": "Administrator",
+    "createUser": "admin",
+    "createDate": "2017-08-08T08:26:03.140Z",
+    "modDate": "2017-08-09T12:58:13.568Z",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 2,
+    "adminFlag": false
+  }
+]
+----
+{blank}
+
+*Request for historical notifications*:
+[source,json]
+----
+{
+ "historicalFlag": true,
+ "shiftChangeTransactionId": 33
+ }
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+  {
+    "id": 1191,
+    "incidentId": 750,
+    "version": 11,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-07-25T22:00:00.000Z",
+    "notificationText": "c--d ddddddd",
+    "responsibilityControlPoint": "Max Mustermann",
+    "expectedFinishDate": "2017-07-27T22:00:00.000Z",
+    "finishedDate": "2017-07-31T07:24:43.959Z",
+    "createUser": "admin",
+    "createDate": "2017-07-24T12:20:13.232Z",
+    "modDate": "2017-08-21T11:24:32.855Z",
+    "modUser": "max",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 2,
+    "adminFlag": false
+  },
+  {
+    "id": 994,
+    "incidentId": 825,
+    "version": 6,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-08-07T09:41:12.082Z",
+    "notificationText": "dddd",
+    "freeText": "53w5",
+    "freeTextExtended": "terterwrew",
+    "responsibilityControlPoint": "Administrator",
+    "finishedDate": "2017-08-08T10:19:36.001Z",
+    "createUser": "admin",
+    "createDate": "2017-08-07T09:41:55.048Z",
+    "modDate": "2017-08-08T10:19:37.454Z",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 2,
+    "adminFlag": false
+  }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Get Notifications
+This service retrieves a list of notifications from the database. The selection is based on the given filter-object.
+With no filter value specified, the collection returned contains all active notifications. With filter value(s) set, only
+notifications matching the filter values are returned.
+
+The following list explains the available filter values:
+
+* The filter-values “dateFrom” and “dateTo” are compared against the “begin_date” of the notifications (closed interval).
+* The filter values in "responsibilityFilterList" are compared against the id of the notifications.
+* If the boolean filter value "historicalFlag" is "true" historical notifcations are returned.
+* If the boolean filter value is null or "false", active notifications are returned.
+* With historicalFlag set, the corresponding "shiftChangeTransactionId must also be set to obtain a valid result. In this
+case, other filter values do not make sense and are not evaluated.
+
+*URL:* /notifications/{listType}
+
+*Method:* POST
+
+*Path-Parameters*:
+
+* listType - The type of the list for which the data will be loaded: "PAST", "OPEN", "FUTURE"
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Consumes*: application/json
+
+*Request*:
+[source,json]
+----
+{
+  "dateFrom": "2017-03-09T15:27:17.666Z",
+  "dateTo": "2017-04-09T15:27:17.666Z",
+    "responsibilityFilterList": [
+                                    1, 6
+                                ]
+}
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+  {
+    "id": 1161,
+    "incidentId": 337,
+    "version": 10,
+    "selected": false,
+    "status": "in Arbeit",
+    "beginDate": "2017-05-24T07:11:00.000Z",
+    "notificationText": "UW4 Wartungsarbeiten LSA",
+    "freeText": "Hr. xxx vor Ort",
+    "freeTextExtended": "Hr.yyy ist auch vor Ort",
+    "responsibilityForwarding": "Müller",
+    "responsibilityControlPoint": "Administrator",
+    "expectedFinishDate": "2017-05-24T14:00:00.000Z",
+    "createUser": "admin",
+    "createDate": "2017-05-24T07:03:54.429Z",
+    "modDate": "2017-08-18T14:15:10.355Z",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 2,
+    "fkRefGridTerritory": 1,
+    "adminFlag": false
+  },
+  {
+    "id": 601,
+    "incidentId": 566,
+    "version": 8,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-06-17T11:37:00.000Z",
+    "notificationText": "FD #5",
+    "freeText": "fd",
+    "freeTextExtended": "",
+    "responsibilityControlPoint": "Administrator",
+    "expectedFinishDate": "2017-06-19T23:01:00.000Z",
+    "finishedDate": "2017-06-19T13:27:11.333Z",
+    "createUser": "admin",
+    "createDate": "2017-06-19T11:38:17.369Z",
+    "modDate": "2017-06-19T13:27:12.598Z",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 1,
+    "adminFlag": false
+  }
+]
+----
+{blank}
+
+*Request for historical notifications*:
+[source,json]
+----
+{
+ "historicalFlag": true,
+ "shiftChangeTransactionId": 33
+ }
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+  {
+    "id": 1191,
+    "incidentId": 750,
+    "version": 11,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-07-25T22:00:00.000Z",
+    "notificationText": "c--d ddddddd",
+    "responsibilityControlPoint": "Max Mustermann",
+    "expectedFinishDate": "2017-07-27T22:00:00.000Z",
+    "finishedDate": "2017-07-31T07:24:43.959Z",
+    "createUser": "admin",
+    "createDate": "2017-07-24T12:20:13.232Z",
+    "modDate": "2017-08-21T11:24:32.855Z",
+    "modUser": "max",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 2,
+    "adminFlag": false
+  },
+  {
+    "id": 994,
+    "incidentId": 825,
+    "version": 6,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-08-07T09:41:12.082Z",
+    "notificationText": "dddd",
+    "freeText": "53w5",
+    "freeTextExtended": "terterwrew",
+    "responsibilityControlPoint": "Administrator",
+    "finishedDate": "2017-08-08T10:19:36.001Z",
+    "createUser": "admin",
+    "createDate": "2017-08-07T09:41:55.048Z",
+    "modDate": "2017-08-08T10:19:37.454Z",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 2,
+    "adminFlag": false
+  }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+
+
+=== Get Search Results
+This service obtains a search string combined with a limited number of search options in a search filter. The service retrieves those notifications from the database
+which fulfill the given search criteria within the search filter. 
+Each search string typed in is case-insensitive. The sort order of the result tuples is as follows: branch, incident id (descending), version (descending), grid territory, begin date. 
+
+The search filter obtained by the web service consists of the subsequent criteria:
+
+* search string: The string whose occurence is searched in notification text, free text and extended free text, default: null
+* responsibility/forwarded to: an (additional) search string to be searched in the field responsibility/forwarded, default: null
+* branch: Search in all branches or specify one concrete branch, default: all
+* grid territory: Search in all grid territories or specify one concrete grid territory, default: all
+* status: each defined status (open, in work, finished, closed) can be (de)selected, default: all status selected
+* fast search: if selected, only entries created or modified during the last two hundred days are considered in the search, default: selected
+
+*URL:* /searchResults
+
+*Method:* POST
+
+*Path-Parameters*:
+
+-
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Consumes*: application/json
+
+*Request*:
+[source,json]
+----
+{
+	"searchString": "TAriflichen",
+	"responsibilityForwarding": "",
+	"statusOpenSelection": true,
+	"statusInWorkSelection": true,
+	"statusDoneSelection": true,
+	"statusClosedSelection": false,
+	"fkRefBranch": 1,
+	"fkRefGridTerritory": 2,
+	"fastSearchSelected": true
+}
+----
+{blank}
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+  {
+    "id": 1074,
+    "incidentId": 966,
+    "version": 28,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-08-08T08:25:26.920Z",
+    "notificationText": "Anweisung zur Einhaltung der Arbeitsschutzrichtlinien",
+    "freeText": "Änderung Bereich dazu!",
+    "freeTextExtended": "gilt nur für die tariflichen Mitarbeiter",
+    "responsibilityForwarding": "Hermann Meister",
+    "responsibilityControlPoint": "Administrator",
+    "createUser": "admin",
+    "createDate": "2017-08-08T08:26:03.140Z",
+    "modDate": "2017-08-09T17:02:08.049Z",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 2,
+    "adminFlag": false
+  },
+  {
+    "id": 1064,
+    "incidentId": 966,
+    "version": 19,
+    "selected": false,
+    "status": "erledigt",
+    "beginDate": "2017-08-08T08:25:26.920Z",
+    "notificationText": "Anweisung für alle tariflichen Mitarbeiter",
+    "freeText": "Änderung Bereich dazu!",
+    "freeTextExtended": "ddddddd",
+    "responsibilityForwarding": "Hermann Meister",
+    "responsibilityControlPoint": "Administrator",
+    "createUser": "admin",
+    "createDate": "2017-08-08T08:26:03.140Z",
+    "modDate": "2017-08-09T12:58:13.568Z",
+    "modUser": "admin",
+    "fkRefBranch": 1,
+    "fkRefNotificationStatus": 3,
+    "fkRefGridTerritory": 2,
+    "adminFlag": false
+  }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+=== Get Import Files
+This service retrieves a list of files which are available for import. These files should be placed in the following path:
+[source,text]
+----
+C:/FilesToImport
+----
+{blank}
+
+
+It returns the following informations about the file:
+
+* Name
+* Creation date
+* Creator name
+* Size
+* Type
+
+*URL:* /getImportFiles
+
+*Method:* GET
+
+*Path-Parameter*:
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+[
+    {
+        "fileName": "test.csv",
+        "creationDate": "2017-09-25T12:00:01.635887Z",
+        "creator": "admin",
+        "type": "csv",
+        "size": 5600,
+    },
+    {
+        "fileName": "test_file.txt",
+        "creationDate": "2017-09-23T11:00:01.635887Z",
+        "creator": "max",
+        "type": "txt",
+        "size": 8000,
+    }
+]
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+
+=== Get The Content of a File
+This service retrieves the content of a file. The file should be a text file (.txt, .csv etc)
+and the informations will be retrieved from the 9th row. The file is defined like this
+
+[source,text]
+----
+                                                            PROTOKOLL_STROM
+                                              08.09.2017 10:10:51  -  08.09.2017 10:22:04
+
+Betriebsart: Prozessführung
+Modus      : Spalten-Filtern
+Verknüpfung: --------
+
+.............MG.........................................................................................................................
+20:19:51,425 MG Test text          Mannheim Gas
+ENDE
+
+08.09.2017 10:23:34
+----
+{blank}
+
+This file has to be placed in a configured path accessible by the elogbook backend server.
+
+It returns the following information which extracted from the file:
+
+* Territory name
+* Branch name
+* Description text
+
+*URL:* /importFile
+
+*Method:* GET
+
+*Path-Parameter*:
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+{
+    "branchName": "W",
+    "gridTerritoryName": "MA",
+    "notificationText": "This is a simple test text"
+}
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+
+=== Delete Imported File
+This service deletes a file for a given file name. If there is a file with this name it returns true and deletes
+this file. Else it returns false.
+
+*URL:* /deleteImportedFiles/{fileName}
+
+*Method:* DELETE
+
+*Path-Parameter*: fileName - The name of the file that will be deleted
+
+*Request-Headers*:
+
+* Authorization – Existing JWT token
+
+*Produces*: application/json
+
+*Response*:
+[source,json]
+----
+{
+    true
+}
+----
+{blank}
+
+*Protection*: normal
+
+*Remarks*:
+
+
diff --git a/src/main/java/org/eclipse/openk/mics/home/common/BackendConfig.java b/src/main/java/org/eclipse/openk/mics/home/common/BackendConfig.java
new file mode 100644
index 0000000..0b6d1ff
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/BackendConfig.java
@@ -0,0 +1,71 @@
+/**
+******************************************************************************
+* 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.mics.home.common;
+
+import org.eclipse.openk.mics.home.common.util.ResourceLoaderBase;
+
+public class BackendConfig {
+
+  private static String configFileName = "backendConfigDevLocal.json";
+
+  // properties of the configfile
+  private String micsCentralURL;
+  private String micsDistributionCluster;
+  private String micsHealthStateExtraPath;
+  private boolean micsCentralIsHttps;
+
+  private static BackendConfig instance;
+
+  private BackendConfig() {
+  }
+
+  public static synchronized BackendConfig getInstance() {
+    if (instance == null) {
+      String jsonConfig = loadJsonConfig();
+      instance = JsonGeneratorBase.getGson().fromJson(jsonConfig, BackendConfig.class);
+    }
+
+    return instance;
+  }
+
+  private static String loadJsonConfig() {
+    ResourceLoaderBase resourceLoaderBase = new ResourceLoaderBase();
+    return resourceLoaderBase.loadStringFromResource(configFileName);
+  }
+
+  public String getMicsCentralURL() {
+    return micsCentralURL;
+  }
+
+  public String getMicsDistributionCluster() {
+    return micsDistributionCluster;
+  }
+
+  public String getMicsHealthStateExtraPath() {
+    return micsHealthStateExtraPath;
+  }
+
+  public boolean isMicsCentralIsHttps() {
+    return micsCentralIsHttps;
+  }
+
+  public static String getConfigFileName() {
+    return configFileName;
+  }
+
+  public static void setConfigFileName(String configFileName) {
+    BackendConfig.configFileName = configFileName;
+  }
+}
+
+
diff --git a/src/main/java/org/eclipse/openk/mics/home/common/Globals.java b/src/main/java/org/eclipse/openk/mics/home/common/Globals.java
new file mode 100644
index 0000000..7825e3b
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/Globals.java
@@ -0,0 +1,20 @@
+/**
+******************************************************************************
+* 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.mics.home.common;
+
+
+public final class Globals {
+    public static final String HEADER_JSON_UTF8 = "application/json; charset=utf-8";
+
+    private Globals() {}
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/common/GsonUTCDateAdapter.java b/src/main/java/org/eclipse/openk/mics/home/common/GsonUTCDateAdapter.java
new file mode 100644
index 0000000..6d97eb8
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/GsonUTCDateAdapter.java
@@ -0,0 +1,52 @@
+/**
+******************************************************************************
+* 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.mics.home.common;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+import java.lang.reflect.Type;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+public class GsonUTCDateAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> {
+
+    private final DateFormat dateFormat;
+
+    public GsonUTCDateAdapter() {
+        dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);      //This is the format I need
+        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));                               //This is the key line which converts the date to UTC which cannot be accessed with the default serializer
+    }
+
+    @Override
+    public synchronized JsonElement serialize(Date date, Type type, JsonSerializationContext jsonSerializationContext) {
+        return new JsonPrimitive(dateFormat.format(date));
+    }
+
+    @Override
+    public synchronized Date deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) {
+        try {
+            return dateFormat.parse(jsonElement.getAsString());
+        } catch (ParseException e) {
+            throw new JsonParseException(e);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/org/eclipse/openk/mics/home/common/HttpStatusException.java b/src/main/java/org/eclipse/openk/mics/home/common/HttpStatusException.java
new file mode 100644
index 0000000..ebda9be
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/HttpStatusException.java
@@ -0,0 +1,25 @@
+/**
+******************************************************************************
+* 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.mics.home.common;
+
+public class HttpStatusException extends Exception {
+    private final int httpStatus;
+
+    public HttpStatusException( int httpStatus ) {
+        this.httpStatus = httpStatus;
+    }
+
+    public int getHttpStatus() {
+        return httpStatus;
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/common/InitBackendConfig.java b/src/main/java/org/eclipse/openk/mics/home/common/InitBackendConfig.java
new file mode 100644
index 0000000..a592581
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/InitBackendConfig.java
@@ -0,0 +1,57 @@
+/**
+******************************************************************************
+* 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.mics.home.common;
+
+import org.apache.log4j.Logger;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+
+public class InitBackendConfig extends HttpServlet {
+
+    private static final long serialVersionUID = -7882117179312471533L;
+
+    private static final Logger LOGGER = Logger.getLogger(InitBackendConfig.class.getName());
+
+    @Override
+    public void init() throws ServletException {
+        String environment = getServletContext().getInitParameter("OK_MICS_HOME_ENVIRONMENT");
+        setConfigFiles(environment);
+    }
+
+    private void setConfigFiles(String environment ) {
+        String env = (environment == null ? "Production": environment);
+
+        String backendConfigFile;
+
+        switch (env){
+            case "DevLocal":
+                backendConfigFile="backendConfigDevLocal.json";
+                break;
+            case "Docker":
+                backendConfigFile="backendConfigDocker.json";
+                break;
+            case "DevServer":
+                backendConfigFile="backendConfigDevServer.json";
+                break;
+            case "Custom":
+                backendConfigFile="backendConfigCustom.json";
+                break;
+            default:
+                backendConfigFile="backendConfigProduction.json";
+        }
+
+        BackendConfig.setConfigFileName(backendConfigFile);
+        LOGGER.info("Portal backendendenviroment is: " +environment+ ". Setting backendConfig accordingly to: "+ backendConfigFile);
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/common/JsonGeneratorBase.java b/src/main/java/org/eclipse/openk/mics/home/common/JsonGeneratorBase.java
new file mode 100644
index 0000000..ab6cb01
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/JsonGeneratorBase.java
@@ -0,0 +1,27 @@
+/**
+******************************************************************************
+* 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.mics.home.common;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import java.util.Date;
+
+public class JsonGeneratorBase {
+    private JsonGeneratorBase() {}
+    public static Gson getGson() {
+        return new GsonBuilder()
+                .registerTypeAdapter(Date.class, new GsonUTCDateAdapter())
+                .disableHtmlEscaping()
+                .create();
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/common/NotificationStatus.java b/src/main/java/org/eclipse/openk/mics/home/common/NotificationStatus.java
new file mode 100644
index 0000000..fcd4834
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/NotificationStatus.java
@@ -0,0 +1,30 @@
+/**
+******************************************************************************
+* 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.mics.home.common;
+
+public enum NotificationStatus {
+
+	UNKNOWN(0, "unknown"),
+	OPEN(1, "open"),
+	INPROGRESS(2, "inprogress"),
+	FINISHED(3, "finished"),
+	CLOSED(4, "closed");
+
+    public final int id;
+	public final String statusName;
+
+	NotificationStatus(int id, String name) {
+        this.id = id;
+        this.statusName = name;
+	}
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/common/util/JsonGeneratorBase.java b/src/main/java/org/eclipse/openk/mics/home/common/util/JsonGeneratorBase.java
new file mode 100644
index 0000000..b181d8a
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/util/JsonGeneratorBase.java
@@ -0,0 +1,29 @@
+/**
+******************************************************************************
+* 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.mics.home.common.util;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.eclipse.openk.mics.home.common.GsonUTCDateAdapter;
+
+import java.util.Date;
+
+public class JsonGeneratorBase {
+    private JsonGeneratorBase() {}
+    public static Gson getGson() {
+        return new GsonBuilder()
+                .registerTypeAdapter(Date.class, new GsonUTCDateAdapter())
+                .disableHtmlEscaping()
+                .create();
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/common/util/LoggerUtil.java b/src/main/java/org/eclipse/openk/mics/home/common/util/LoggerUtil.java
new file mode 100644
index 0000000..616726c
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/util/LoggerUtil.java
@@ -0,0 +1,83 @@
+/**
+******************************************************************************
+* 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.mics.home.common.util;
+
+import java.io.IOException;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.log4j.Appender;
+import org.apache.log4j.BasicConfigurator;
+import org.apache.log4j.Layout;
+import org.apache.log4j.Level;
+import org.apache.log4j.PatternLayout;
+import org.apache.log4j.net.SyslogAppender;
+import org.apache.log4j.spi.RootLogger;
+import org.apache.log4j.xml.DOMConfigurator;
+
+/**
+ * <b>LoggerConfig</b><br>
+ * Logging Implementierung
+ */
+public final class LoggerUtil extends HttpServlet {
+    /**
+     * serialVersionUID.
+     */
+    private static final long serialVersionUID = 1L;
+
+    /*
+     * (non-Javadoc)
+     * @see javax.servlet.GenericServlet#init()
+     */
+    @Override
+    public void init() {
+        final ServletContext context = getServletContext();
+
+        if (Boolean.valueOf(context.getInitParameter("param.syslog.use"))) {
+            // configure for syslog using parameters specified in configuration descriptor
+            BasicConfigurator.resetConfiguration();
+
+            final String level = context.getInitParameter("param.syslog.level");
+            RootLogger.getRootLogger().setLevel(Level.toLevel(level));
+
+            final String host = context.getInitParameter("param.syslog.host");
+            final String facility = context.getInitParameter("param.syslog.facility");
+            final Layout layout = new PatternLayout("[%d{yyyy.MM.dd HH:mm:ss}] [%p] [%c] %m%n");
+            final Appender syslogAppender = new SyslogAppender(layout, host,
+                    SyslogAppender.getFacility(facility));
+            BasicConfigurator.configure(syslogAppender);
+
+        } else {
+            // configure using parameters specified in xml file
+            final String prefix = context.getRealPath("/");
+            final String file = getInitParameter("log4j-init-file");
+
+            if (prefix != null && file != null) {
+                DOMConfigurator.configure(prefix + file);
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
+     * javax.servlet.http.HttpServletResponse)
+     */
+    @Override
+    protected void doGet(final HttpServletRequest req, final HttpServletResponse resp)
+            throws ServletException, IOException {
+        // Nothing done on purpose.
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/common/util/ResourceLoaderBase.java b/src/main/java/org/eclipse/openk/mics/home/common/util/ResourceLoaderBase.java
new file mode 100644
index 0000000..9ec0c82
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/util/ResourceLoaderBase.java
@@ -0,0 +1,37 @@
+/**
+******************************************************************************
+* 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.mics.home.common.util;
+
+import java.io.InputStream;
+import java.io.StringWriter;
+import org.apache.commons.io.IOUtils;
+
+public class ResourceLoaderBase {
+    private String stream2String(InputStream is) {
+        StringWriter writer = new StringWriter();
+        try {
+            IOUtils.copy(is, writer, "UTF-8");
+        } catch (Exception e) { // NOSONAR
+            return "";
+        }
+        return writer.toString();
+
+
+    }
+
+    public String loadStringFromResource(String filename) {
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        InputStream jsonstream = classLoader.getResourceAsStream(filename);
+        return stream2String(jsonstream);
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/communication/RestServiceWrapper.java b/src/main/java/org/eclipse/openk/mics/home/communication/RestServiceWrapper.java
new file mode 100644
index 0000000..249196b
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/communication/RestServiceWrapper.java
@@ -0,0 +1,130 @@
+/**
+******************************************************************************
+* 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.mics.home.communication;
+
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.http.util.EntityUtils;
+import org.eclipse.openk.mics.home.common.HttpStatusException;
+import org.apache.log4j.Logger;
+import org.eclipse.openk.mics.home.common.Globals;
+
+
+import javax.ws.rs.core.Response;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+public class RestServiceWrapper {
+    private static final Logger logger = Logger.getLogger(RestServiceWrapper.class.getName());
+    private String baseURL;
+    private boolean useHttps;
+
+    public RestServiceWrapper(String baseURL, boolean https) {
+        this.baseURL = baseURL;
+        this.useHttps = https;
+    }
+
+    public String performGetRequest(String restFunctionWithParams) throws HttpStatusException {
+        String completeRequest = restFunctionWithParams;
+        logger.debug("CompleteUrl: " + completeRequest);
+        // create HTTP Client
+        try (CloseableHttpClient httpClient = createHttpsClient() ) {
+            // create new Request with given URL
+            HttpGet getRequest = new HttpGet(completeRequest);
+            getRequest.addHeader("accept", Globals.HEADER_JSON_UTF8);
+
+            HttpResponse response;
+            // Execute request an catch response
+            response = httpClient.execute(getRequest);
+
+            return createJson(response);
+        } catch (IOException e) {
+            String errtext = "Communication to <" + completeRequest + "> failed!";
+            logger.warn(errtext, e);
+            throw new HttpStatusException(HttpStatus.SC_SERVICE_UNAVAILABLE);
+        }
+
+    }
+
+	public Response performPostRequestWithResponse(String restFunctionWithParams, String data) throws HttpStatusException {
+		String completeRequest = baseURL + "/" + restFunctionWithParams;
+
+		// create HTTP Client
+		CloseableHttpClient httpClient = createHttpsClient();
+
+		// create new Post Request with given URL
+		HttpPost postRequest = new HttpPost(completeRequest);
+
+		// add additional header to getRequest which accepts application/JSON data
+		postRequest.addHeader("accept", Globals.HEADER_JSON_UTF8);
+		postRequest.addHeader("Content-Type", Globals.HEADER_JSON_UTF8);
+
+		postRequest.setEntity(new StringEntity(data, StandardCharsets.UTF_8));
+
+		HttpResponse response;
+		// Execute request an catch response
+		try {
+			response = httpClient.execute(postRequest);
+		} catch (IOException e) {
+			String errtext = "Communication to <" + completeRequest + "> failed!";
+			logger.warn(errtext, e);
+            throw new HttpStatusException(HttpStatus.SC_SERVICE_UNAVAILABLE);
+		}
+        String ent = createJson(response);
+
+        Response.ResponseBuilder rb = Response.status(response.getStatusLine().getStatusCode());
+        if (ent != null) {
+            rb.entity(ent);
+        }
+        return rb.build();
+	}
+
+    private CloseableHttpClient createHttpsClient() throws HttpStatusException {
+        if (useHttps) {
+            try {
+                SSLContextBuilder builder = new SSLContextBuilder();
+                builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
+                SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(builder.build());
+
+                return HttpClients.custom().setSSLSocketFactory(sslsf).build();
+            } catch (Exception e) {
+                logger.error(e);
+                throw new HttpStatusException(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+            }
+        } else {
+            return HttpClientBuilder.create().build();
+        }
+    }
+    
+	private String createJson(HttpResponse response) throws HttpStatusException {
+		String retJson;
+		try {
+			retJson = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
+		} catch (IOException e) {
+			logger.error(e);
+			throw new HttpStatusException(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+		}
+
+		return retJson;
+	}
+
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/controller/BackendController.java b/src/main/java/org/eclipse/openk/mics/home/controller/BackendController.java
new file mode 100644
index 0000000..faf0cf8
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/controller/BackendController.java
@@ -0,0 +1,39 @@
+/**
+******************************************************************************
+* 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.mics.home.controller;
+
+import org.apache.log4j.Logger;
+import org.eclipse.openk.mics.home.viewmodel.VersionInfo;
+
+public class BackendController {
+	
+	private static final Logger LOGGER = Logger.getLogger(BackendController.class.getName());
+
+	public VersionInfo getVersionInfo() {
+		LOGGER.info("getVersionInfo is called");
+
+		try {
+			return getVersionInfoImpl(getClass().getPackage().getImplementationVersion());
+		} finally {
+			LOGGER.info("getVersionInfo is finished");
+		}
+	}
+
+	private VersionInfo getVersionInfoImpl(String pomVersion) {
+		VersionInfo vi = new VersionInfo();
+		vi.setBackendVersion(pomVersion);
+
+		return vi;
+	}
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/controller/CentralProxy.java b/src/main/java/org/eclipse/openk/mics/home/controller/CentralProxy.java
new file mode 100644
index 0000000..60853e4
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/controller/CentralProxy.java
@@ -0,0 +1,35 @@
+/**
+******************************************************************************
+* 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.mics.home.controller;
+
+import org.eclipse.openk.mics.home.common.HttpStatusException;
+import org.eclipse.openk.mics.home.communication.RestServiceWrapper;
+
+public class CentralProxy {
+    private final String url;
+    private final RestServiceWrapper restServiceWrapper;
+
+    public CentralProxy( String url ) {
+        this.url = url;
+        this.restServiceWrapper = new RestServiceWrapper( url, false );
+    }
+
+    public String getServerDistribution( String clusterName ) throws HttpStatusException {
+        return restServiceWrapper.performGetRequest(url + "/serviceDistribution/" + clusterName );
+    }
+
+    public String getHealthState( String healthStateExtraPath, String protocol, String host, String port ) throws HttpStatusException {
+        return restServiceWrapper.performGetRequest(protocol + "://" + host + ":" + port + "/" + healthStateExtraPath );
+    }
+
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/controller/ResponseBuilderWrapper.java b/src/main/java/org/eclipse/openk/mics/home/controller/ResponseBuilderWrapper.java
new file mode 100644
index 0000000..b13d6aa
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/controller/ResponseBuilderWrapper.java
@@ -0,0 +1,56 @@
+/**
+******************************************************************************
+* 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.mics.home.controller;
+
+import org.apache.commons.httpclient.HttpStatus;
+import org.eclipse.openk.mics.home.common.HttpStatusException;
+
+
+import javax.ws.rs.core.Response;
+import java.io.UnsupportedEncodingException;
+
+public enum ResponseBuilderWrapper {
+    INSTANCE;
+
+    public Response.ResponseBuilder getResponseBuilder( String json ) throws HttpStatusException {
+        return getResponseBuilder(jsonStringToBytes( json ));
+
+    }
+
+    private Response.ResponseBuilder getResponseBuilder(byte[] json) {
+        return Response.status(HttpStatus.SC_OK).entity(json)
+                .header("Content-Type", "application/json; charset=utf-8")
+                .header("X-XSS-Protection", "1; mode = block")
+                .header("X-DNS-Prefetch-Control", "off")
+                .header("X-Content-Type-Options", "nosniff")
+                .header("X-Frame-Options", "sameorigin")
+                .header("Strict-Transport-Security", "max-age=15768000; includeSubDomains")
+                .header("Cache-Control", "no-cache; no-store; must-revalidate")
+                .header("Pragma", "no-cache")
+                .header("Expires", "0")
+                .header("Access-Control-Allow-Origin", "*");
+    }
+
+    private byte[] jsonStringToBytes( String jsonString ) throws HttpStatusException {
+        try {
+            return jsonString.getBytes("UTF-8");
+        } catch (UnsupportedEncodingException e) { // NOSONAR
+
+            throw new HttpStatusException(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    public Response buildOKResponse(String jsonString) throws HttpStatusException {
+        return getResponseBuilder( jsonStringToBytes( jsonString)).build();
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/rest/BackendRestService.java b/src/main/java/org/eclipse/openk/mics/home/rest/BackendRestService.java
new file mode 100644
index 0000000..f9dcc95
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/rest/BackendRestService.java
@@ -0,0 +1,142 @@
+/**
+******************************************************************************
+* 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.mics.home.rest;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.eclipse.openk.mics.home.common.JsonGeneratorBase;
+import org.eclipse.openk.mics.home.communication.RestServiceWrapper;
+import org.eclipse.openk.mics.home.controller.BackendController;
+import org.eclipse.openk.mics.home.controller.CentralProxy;
+import org.eclipse.openk.mics.home.controller.ResponseBuilderWrapper;
+import org.apache.http.HttpStatus;
+import org.apache.log4j.Logger;
+import org.eclipse.openk.mics.home.common.BackendConfig;
+import org.eclipse.openk.mics.home.common.HttpStatusException;
+import org.eclipse.openk.mics.home.viewmodel.VersionInfo;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+
+@Api(value = "/mics/home")
+@ApiResponses( value ={
+		@ApiResponse(code = 200, message = "OK"),
+		@ApiResponse(code = 400, message = "Bad Request"),
+		@ApiResponse(code = 401, message = "Unauthorized"),
+		@ApiResponse(code = 404, message = "Not found"),
+		@ApiResponse(code = 423, message = "Locked"),
+		@ApiResponse(code = 500, message = "Internal Server Error") } )
+@Path("/mics/home")
+public class BackendRestService {
+	private static final Logger logger = Logger.getLogger(BackendRestService.class.getName());
+
+	@ApiOperation(value = "Version Information", notes = "This services displays the version infos of this backend and the connected database.")
+	@ApiResponses( value ={ @ApiResponse(code = 200, message = "OK", response = VersionInfo.class,reference = "#/definitions/VersionInfo") } )
+	@GET
+	@Path("/versionInfo/")
+	@Produces("application/json")
+	public Response getVersionInfo() {
+		String vstring = JsonGeneratorBase.getGson().toJson(
+				new BackendController().getVersionInfo() );
+		try {
+			return ResponseBuilderWrapper.INSTANCE.buildOKResponse(vstring);
+		} catch (HttpStatusException e) {
+			return responseFromException(e);
+		}
+	}
+
+	@ApiOperation(value = "Server Distribution", notes = "This services returns the available distributions for a the clusters.")
+	@ApiResponses( value ={ @ApiResponse(code = 200, message = "OK") } )
+	@GET
+	@Path("/myServerDistribution/")
+	@Produces("application/json")
+	public Response getMyServerDistribution() {
+		logger.debug("myServerDistribution called!");
+		try {
+			BackendConfig bc = BackendConfig.getInstance();
+			CentralProxy central = new CentralProxy(bc.getMicsCentralURL());
+			logger.debug("Forwarding to central on:"+bc.getMicsCentralURL());
+
+			return ResponseBuilderWrapper.INSTANCE.buildOKResponse(
+					central.getServerDistribution(bc.getMicsDistributionCluster()));
+		}
+		catch (Exception e) {
+			logger.error("Error in myServerDistribution", e);
+			return responseFromException(e);
+		}
+	}
+
+	@ApiOperation(value = "Health state check", notes = "This service checks if the components of a service are healthy")
+	@ApiResponses( value ={ @ApiResponse(code = 200, message = "OK") } )
+	@GET
+	@Path("/healthState/{protocol}/{host}/{port}")
+	@Produces("application/json")
+	public Response getHealthState(@ApiParam(name = "protocol", value = "The name of the protocol is used(http/https)")
+                                   @PathParam("protocol") String protocol,
+                                   @ApiParam(name = "host", value = "The name of the host")
+                                   @PathParam("host") String host ,
+                                   @ApiParam(name = "port",  value = "The number of the port")
+                                   @PathParam("port") String port ) {
+		logger.debug("healthState called!");
+		try {
+			BackendConfig bc = BackendConfig.getInstance();
+			CentralProxy central = new CentralProxy(bc.getMicsCentralURL());
+			return ResponseBuilderWrapper.INSTANCE.buildOKResponse(
+					central.getHealthState(bc.getMicsHealthStateExtraPath(), protocol, host, port));
+		}
+		catch (Exception e) {
+			logger.error("Exception in healthState!", e);
+			return responseFromException(e);
+		}
+	}
+
+	@ApiOperation(value = "Dispatcher", notes = "")
+	@ApiResponses( value ={ @ApiResponse(code = 200, message = "OK") } )
+	@POST
+	@Path("/dispatch/")
+	public Response dispatch( String envelope ) {
+		logger.debug("dispatch called!");
+		try {
+			BackendConfig bc = BackendConfig.getInstance();
+			RestServiceWrapper restServiceWrapper = new RestServiceWrapper(bc.getMicsCentralURL(), bc.isMicsCentralIsHttps());
+			return restServiceWrapper.performPostRequestWithResponse(createDispatchURL(), envelope);
+		}
+		catch( Exception e) {
+			logger.error("Exception in dispatch!", e);
+			return responseFromException(e);
+
+		}
+	}
+
+	private String createDispatchURL() {
+		BackendConfig bc = BackendConfig.getInstance();
+		return "dispatch/"+bc.getMicsDistributionCluster();
+	}
+
+
+	private Response responseFromException(Exception e) {
+		int errcode;
+
+		if (e instanceof HttpStatusException) {
+			logger.error("Caught BackendException", e);
+			errcode = ((HttpStatusException) e).getHttpStatus();
+			return Response.status(errcode).build();
+		} else {
+			logger.error("Unexpected exception", e);
+			return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).build();
+		}
+	}
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/rest/RestServiceConfiguration.java b/src/main/java/org/eclipse/openk/mics/home/rest/RestServiceConfiguration.java
new file mode 100644
index 0000000..a829a6d
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/rest/RestServiceConfiguration.java
@@ -0,0 +1,30 @@
+/**
+******************************************************************************
+* 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.mics.home.rest;
+
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class RestServiceConfiguration extends javax.ws.rs.core.Application {
+    public RestServiceConfiguration() {
+        // Standard Contstructor needed
+    }
+
+    @Override
+    public Set<Class<?>> getClasses() {
+        Set<Class<?>> restServicesClasses = new HashSet<>();
+        restServicesClasses.add(BackendRestService.class);
+        return restServicesClasses;
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/viewmodel/ErrorReturn.java b/src/main/java/org/eclipse/openk/mics/home/viewmodel/ErrorReturn.java
new file mode 100644
index 0000000..470926a
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/viewmodel/ErrorReturn.java
@@ -0,0 +1,35 @@
+/**
+******************************************************************************
+* 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.mics.home.viewmodel;
+
+import java.io.Serializable;
+
+public class ErrorReturn implements Serializable {
+    private static final long serialVersionUID = -1841112315318005840L;
+
+    private String errorText;
+    private int errorCode;
+
+    public String getErrorText() {
+        return errorText;
+    }
+    public void setErrorText(String errorText) {
+        this.errorText = errorText;
+    }
+    public int getErrorCode() {
+        return errorCode;
+    }
+    public void setErrorCode(int errorCode) {
+        this.errorCode = errorCode;
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/viewmodel/ServiceRequestEnvelope.java b/src/main/java/org/eclipse/openk/mics/home/viewmodel/ServiceRequestEnvelope.java
new file mode 100644
index 0000000..022a412
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/viewmodel/ServiceRequestEnvelope.java
@@ -0,0 +1,105 @@
+/**
+******************************************************************************
+* 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.mics.home.viewmodel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class ServiceRequestEnvelope {
+    public static class HttpHeader {
+        private String attribute;
+        private String value;
+
+        public String getAttribute() {
+            return attribute;
+        }
+
+        public void setAttribute(String attribute) {
+            this.attribute = attribute;
+        }
+
+        public String getValue() {
+            return value;
+        }
+
+        public void setValue(String value) {
+            this.value = value;
+        }
+    }
+
+    private String serviceName;
+    private boolean isHttps;
+    private String method;
+    private String uriFragment;
+    private String payload;
+    private HttpHeader[] headers;
+
+    @JsonProperty
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    @JsonProperty
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    @JsonProperty
+    public boolean isHttps() {
+        return isHttps;
+    }
+
+    @JsonProperty
+    public void setHttps(boolean https) {
+        isHttps = https;
+    }
+
+    @JsonProperty
+    public String getMethod() {
+        return method;
+    }
+
+    @JsonProperty
+    public void setMethod(String method) {
+        this.method = method;
+    }
+
+    @JsonProperty
+    public String getUriFragment() {
+        return uriFragment;
+    }
+
+    @JsonProperty
+    public void setUriFragment(String uriFragment) {
+        this.uriFragment = uriFragment;
+    }
+
+    @JsonProperty
+    public String getPayload() {
+        return payload;
+    }
+
+    @JsonProperty
+    public void setPayload(String payload) {
+        this.payload = payload;
+    }
+
+    @JsonProperty
+    public HttpHeader[] getHeaders() {
+        return headers;
+    }
+
+    @JsonProperty
+    public void setHeaders(HttpHeader[] headers) {
+        this.headers = headers;
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/mics/home/viewmodel/VersionInfo.java b/src/main/java/org/eclipse/openk/mics/home/viewmodel/VersionInfo.java
new file mode 100644
index 0000000..b353fc5
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/viewmodel/VersionInfo.java
@@ -0,0 +1,25 @@
+/**
+******************************************************************************
+* 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.mics.home.viewmodel;
+
+public class VersionInfo {
+    private String backendVersion;
+
+    public String getBackendVersion() {
+        return backendVersion;
+    }
+
+    public void setBackendVersion(String backendVersion) {
+        this.backendVersion = backendVersion;
+    }
+}
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 0000000..57c51be
--- /dev/null
+++ b/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
+    <persistence-unit name="betriebstagebuch">
+        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+        <non-jta-data-source>java:comp/env/jdbc/okBetriebstagebuchDS</non-jta-data-source>
+        <class>org.eclipse.openk.elogbook.persistence.model.RefVersion</class>
+        <class>org.eclipse.openk.elogbook.persistence.model.RefBranch</class>
+        <class>org.eclipse.openk.elogbook.persistence.model.RefGridTerritory</class>
+        <class>org.eclipse.openk.elogbook.persistence.model.RefNotificationStatus</class>
+        <class>org.eclipse.openk.elogbook.persistence.model.TblNotification</class>
+        <class>org.eclipse.openk.elogbook.persistence.model.TblResponsibility</class>
+        <exclude-unlisted-classes>false</exclude-unlisted-classes>
+        <properties>
+        </properties>
+    </persistence-unit>
+    <persistence-unit name="betriebstagebuchORA">
+        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+        <non-jta-data-source>java:comp/env/jdbc/okBetriebstagebuchDSO</non-jta-data-source>
+        <class>org.eclipse.openk.elogbook.persistence.model.RefVersion</class>
+        <class>org.eclipse.openk.elogbook.persistence.model.RefBranch</class>
+        <class>org.eclipse.openk.elogbook.persistence.model.RefGridTerritory</class>
+        <class>org.eclipse.openk.elogbook.persistence.model.RefNotificationStatus</class>
+        <class>org.eclipse.openk.elogbook.persistence.model.TblNotification</class>
+        <class>org.eclipse.openk.elogbook.persistence.model.TblResponsibility</class>
+        <exclude-unlisted-classes>false</exclude-unlisted-classes>
+        <properties>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
+            <property name="eclipselink.target-database" value="Oracle"/>
+        </properties>
+    </persistence-unit>
+</persistence>
diff --git a/src/main/resources/backendConfigCustom.json b/src/main/resources/backendConfigCustom.json
new file mode 100644
index 0000000..e2bd5fc
--- /dev/null
+++ b/src/main/resources/backendConfigCustom.json
@@ -0,0 +1,6 @@
+{
+  "micsDistributionCluster" : "openK",
+  "micsCentralURL" : "http://localhost:9010/mics/central",
+  "micsHealthStateExtraPath" : "healthcheck?pretty=true",
+  "micsCentralIsHttps" : false
+}
diff --git a/src/main/resources/backendConfigDevLocal.json b/src/main/resources/backendConfigDevLocal.json
new file mode 100644
index 0000000..e2bd5fc
--- /dev/null
+++ b/src/main/resources/backendConfigDevLocal.json
@@ -0,0 +1,6 @@
+{
+  "micsDistributionCluster" : "openK",
+  "micsCentralURL" : "http://localhost:9010/mics/central",
+  "micsHealthStateExtraPath" : "healthcheck?pretty=true",
+  "micsCentralIsHttps" : false
+}
diff --git a/src/main/resources/backendConfigDevServer.json b/src/main/resources/backendConfigDevServer.json
new file mode 100644
index 0000000..7e6750e
--- /dev/null
+++ b/src/main/resources/backendConfigDevServer.json
@@ -0,0 +1,6 @@
+{
+  "micsDistributionCluster" : "openK",
+  "micsCentralURL" : "http://172.18.22.160:9010/mics/central",
+  "micsHealthStateExtraPath" : "healthcheck?pretty=true",
+  "micsCentralIsHttps" : false
+}
diff --git a/src/main/resources/backendConfigDocker.json b/src/main/resources/backendConfigDocker.json
new file mode 100644
index 0000000..83fc93c
--- /dev/null
+++ b/src/main/resources/backendConfigDocker.json
@@ -0,0 +1,6 @@
+{
+  "micsDistributionCluster" : "openK",
+  "micsCentralURL" : "http://172.25.0.54:9010/mics/central",
+  "micsHealthStateExtraPath" : "healthcheck?pretty=true",
+  "micsCentralIsHttps" : false
+}
diff --git a/src/main/resources/backendConfigProduction.json b/src/main/resources/backendConfigProduction.json
new file mode 100644
index 0000000..b745e85
--- /dev/null
+++ b/src/main/resources/backendConfigProduction.json
@@ -0,0 +1,6 @@
+{
+  "micsDistributionCluster" : "openK",
+  "micsCentralURL" : "http://169.50.13.154:9010/mics/central",
+  "micsHealthStateExtraPath" : "healthcheck?pretty=true",
+  "micsCentralIsHttps" : false
+}
\ No newline at end of file
diff --git a/src/main/resources/securityDefinitions.json b/src/main/resources/securityDefinitions.json
new file mode 100644
index 0000000..7183dfd
--- /dev/null
+++ b/src/main/resources/securityDefinitions.json
@@ -0,0 +1,16 @@
+{
+  "api_key": {
+    "type": "apiKey",
+    "name": "api_key",
+    "in": "header"
+  },
+  "Existing JWT token": {
+    "type": "oauth2",
+    "authorizationUrl": "http://swagger.io/api/oauth/dialog",
+    "flow": "implicit",
+    "scopes": {
+      "scope1": "scope description 1",
+      "scope2": "scope description 2"
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/logger.xml b/src/main/webapp/WEB-INF/logger.xml
new file mode 100644
index 0000000..8b34194
--- /dev/null
+++ b/src/main/webapp/WEB-INF/logger.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration PUBLIC
+        "-//APACHE//DTD LOG4J 1.2//EN"
+        "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+        <param name="Threshold" value="DEBUG"/>
+        <param name="Target" value="System.out"/>
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{yyyy.MM.dd HH:mm:ss}] [%p] [%c] %m%n"/>
+        </layout>
+    </appender>
+
+    <appender name="Socket" class="org.apache.log4j.net.SocketAppender">
+        <param name="remoteHost" value="127.0.0.1"/>
+        <param name="port" value="4560"/>
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{yyyy.MM.dd HH:mm:ss}] [%p] [%c] %m%n"/>
+        </layout>
+    </appender>
+
+    <!-- Issue: das Verzeichnis muss existieren ... -->
+    <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
+        <param name="Threshold" value="TRACE"/>
+        <param name="File" value="${catalina.base}/logs/mics-home-service.backend.log"/>
+        <param name="Append" value="true"/>
+        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{yyyy.MM.dd HH:mm:ss}] [%p] [%c] %m%n"/>
+        </layout>
+    </appender>
+
+    <!-- Default Logging configuration beginnend mit org.eclipse (= alle Packages) -->
+    <category name="org.eclipse.openk">
+        <priority value="DEBUG"/>
+        <!--<priority value="DEBUG"/> -->
+        <!--<priority value="ERROR"/> -->
+        <appender-ref ref="CONSOLE"/>
+        <!--<appender-ref ref="Socket"/> -->
+        <!--<appender-ref ref="FILE"/> -->
+        <!--<appender-ref ref="SYSLOG"/> -->
+        <appender-ref ref="FILE"/>
+    </category>
+    <category name="org.jboss.resteasy">
+        <priority value="WARN"/>
+        <!--<priority value="DEBUG"/> -->
+        <!--<priority value="ERROR"/> -->
+        <appender-ref ref="CONSOLE"/>
+        <!--<appender-ref ref="Socket"/> -->
+        <!--<appender-ref ref="FILE"/> -->
+        <!--<appender-ref ref="SYSLOG"/> -->
+        <appender-ref ref="FILE"/>
+    </category>
+    <category name="javax.persistence.Persistence">
+        <priority value="INFO"/>
+        <!--<priority value="DEBUG"/> -->
+        <!--<priority value="ERROR"/> -->
+        <appender-ref ref="CONSOLE"/>
+        <!--<appender-ref ref="Socket"/> -->
+        <!--<appender-ref ref="FILE"/> -->
+        <!--<appender-ref ref="SYSLOG"/> -->
+        <appender-ref ref="FILE"/>
+    </category>
+
+</log4j:configuration>
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..0f44f71
--- /dev/null
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,43 @@
+<web-app id="WebApp_ID" version="2.4"
+         xmlns="http://java.sun.com/xml/ns/j2ee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
+	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
+    <display-name>Restful Web Application</display-name>
+
+    <servlet>
+        <servlet-name>jersey-serlvet</servlet-name>
+        <servlet-class>
+            org.glassfish.jersey.servlet.ServletContainer
+        </servlet-class>
+        <init-param>
+            <param-name>jersey.config.server.provider.packages</param-name>
+            <param-value>org.eclipse.openk.mics.home.rest</param-value>
+        </init-param>
+        <load-on-startup>1</load-on-startup>
+
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>jersey-serlvet</servlet-name>
+        <url-pattern>/rest/*</url-pattern>
+    </servlet-mapping>
+
+    <servlet>
+        <servlet-name>log4j-init</servlet-name>
+        <servlet-class>org.eclipse.openk.mics.home.common.util.LoggerUtil</servlet-class>
+        <init-param>
+            <param-name>log4j-init-file</param-name>
+            <param-value>WEB-INF/logger.xml</param-value>
+        </init-param>
+        <load-on-startup>0</load-on-startup>
+    </servlet>
+
+    <servlet>
+        <servlet-name>InitBackendConfig</servlet-name>
+        <servlet-class>org.eclipse.openk.mics.home.common.InitBackendConfig</servlet-class>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+
+
+</web-app>
diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html
new file mode 100644
index 0000000..97b5341
--- /dev/null
+++ b/src/main/webapp/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+it works!
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/java/org/eclipse/openk/mics/home/common/BackendConfigTest.java b/src/test/java/org/eclipse/openk/mics/home/common/BackendConfigTest.java
new file mode 100644
index 0000000..201c25e
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/BackendConfigTest.java
@@ -0,0 +1,31 @@
+/**
+******************************************************************************
+* 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.mics.home.common;
+
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class BackendConfigTest {
+    @Test
+    public void testConfig() {
+        BackendConfig bc = BackendConfig.getInstance();
+        assertEquals( bc.getMicsCentralURL(), "http://localhost:9010/mics/central" );
+        assertEquals( bc.getMicsDistributionCluster(), "openK");
+        assertEquals( bc.getMicsHealthStateExtraPath(), "healthcheck?pretty=true" );
+        BackendConfig.setConfigFileName("backendConfigProduction.json");
+        assertEquals( BackendConfig.getConfigFileName(), "backendConfigProduction.json");
+        assertEquals( false, BackendConfig.getInstance().isMicsCentralIsHttps());
+    }
+}
diff --git a/src/test/java/org/eclipse/openk/mics/home/common/HttpStatusExceptionTest.java b/src/test/java/org/eclipse/openk/mics/home/common/HttpStatusExceptionTest.java
new file mode 100644
index 0000000..664e987
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/HttpStatusExceptionTest.java
@@ -0,0 +1,26 @@
+/**
+******************************************************************************
+* 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.mics.home.common;
+
+import org.apache.http.HttpStatus;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class HttpStatusExceptionTest {
+    @Test
+    public void testAll() {
+        HttpStatusException hse = new HttpStatusException( 200 );
+        assertEquals( hse.getHttpStatus(), HttpStatus.SC_OK );
+    }
+}
diff --git a/src/test/java/org/eclipse/openk/mics/home/common/InitBackendConfigTest.java b/src/test/java/org/eclipse/openk/mics/home/common/InitBackendConfigTest.java
new file mode 100644
index 0000000..fbc0e97
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/InitBackendConfigTest.java
@@ -0,0 +1,53 @@
+/**
+******************************************************************************
+* 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.mics.home.common;
+
+import org.junit.Test;
+import org.powermock.reflect.Whitebox;
+
+public class InitBackendConfigTest {
+
+    private InitBackendConfig initBackendConfig = new InitBackendConfig();
+
+    @Test
+    public void testSetConfigFiles() throws Exception {
+        Whitebox.invokeMethod(initBackendConfig, "setConfigFiles", "DevLocal");
+    }
+
+    private void testGeneric(String environment ) throws Exception {
+        Whitebox.invokeMethod(initBackendConfig, "setConfigFiles", environment);
+    }
+
+    @Test
+    public void testCombinations() throws Exception {
+
+        testGeneric("DevLocal");
+        testGeneric("DevLocal");
+
+        testGeneric("Docker");
+        testGeneric("Docker");
+
+        testGeneric("DevServer");
+        testGeneric("DevServer");
+
+        testGeneric("Custom");
+        testGeneric("Custom");
+
+        testGeneric(null);
+        testGeneric(null);
+
+        testGeneric("");
+        testGeneric("");
+
+}
+}
diff --git a/src/test/java/org/eclipse/openk/mics/home/common/NotificationStatusTest.java b/src/test/java/org/eclipse/openk/mics/home/common/NotificationStatusTest.java
new file mode 100644
index 0000000..e6fb159
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/NotificationStatusTest.java
@@ -0,0 +1,32 @@
+/**
+******************************************************************************
+* 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.mics.home.common;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class NotificationStatusTest {
+
+	@Test
+	public void createNotificationStatus() throws Exception {
+
+        assertEquals(0, NotificationStatus.UNKNOWN.id);
+        assertEquals(1, NotificationStatus.OPEN.id);
+        assertEquals(2, NotificationStatus.INPROGRESS.id);
+        assertEquals(3, NotificationStatus.FINISHED.id);
+        assertEquals(4, NotificationStatus.CLOSED.id);
+
+    }
+
+}
diff --git a/src/test/java/org/eclipse/openk/mics/home/common/util/JsonGeneratorBaseTest.java b/src/test/java/org/eclipse/openk/mics/home/common/util/JsonGeneratorBaseTest.java
new file mode 100644
index 0000000..83ce19d
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/util/JsonGeneratorBaseTest.java
@@ -0,0 +1,76 @@
+/**
+******************************************************************************
+* 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.mics.home.common.util;
+
+import org.junit.Test;
+import org.powermock.reflect.Whitebox;
+
+import java.util.Date;
+
+import static org.junit.Assert.assertEquals;
+
+public class JsonGeneratorBaseTest extends ResourceLoaderBase {
+    public static class TestPojo {
+        private String name;
+        private int number;
+        private Date date;
+
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getNumber() {
+            return number;
+        }
+
+        public void setNumber(int number) {
+            this.number = number;
+        }
+
+        public Date getDate() {
+            return date;
+        }
+
+        public void setDate(Date date) {
+            this.date = date;
+        }
+
+    }
+
+    @Test
+    public void testInputOutput() throws Exception {
+        Date now = new Date(System.currentTimeMillis());
+        TestPojo pojo = new TestPojo();
+        pojo.setDate(now);
+        pojo.setName("Haferkamp");
+        pojo.setNumber(6758);
+
+        // call to reach sonar quality gate
+        Whitebox.invokeConstructor(JsonGeneratorBase.class);
+
+        String jsonString = JsonGeneratorBase.getGson().toJson(pojo);
+
+        TestPojo pojoIncoming = JsonGeneratorBase.getGson().fromJson(jsonString, TestPojo.class);
+
+        assertEquals(pojo.getDate(), pojoIncoming.getDate());
+        assertEquals(pojo.getName(), pojoIncoming.getName());
+        assertEquals(pojo.getNumber(), pojoIncoming.getNumber());
+    }
+
+
+}
diff --git a/src/test/java/org/eclipse/openk/mics/home/common/util/ResourceLoaderBaseTest.java b/src/test/java/org/eclipse/openk/mics/home/common/util/ResourceLoaderBaseTest.java
new file mode 100644
index 0000000..ebdb533
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/util/ResourceLoaderBaseTest.java
@@ -0,0 +1,27 @@
+/**
+******************************************************************************
+* 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.mics.home.common.util;
+
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class ResourceLoaderBaseTest {
+    @Test
+    public void testloadStringFromResourceError() {
+        ResourceLoaderBase rlb = new ResourceLoaderBase();
+        String str = rlb.loadStringFromResource("UNKNOWN_FILE");
+        assertEquals(str, "");
+    }
+}
diff --git a/src/test/java/org/eclipse/openk/mics/home/controller/CentralProxyTest.java b/src/test/java/org/eclipse/openk/mics/home/controller/CentralProxyTest.java
new file mode 100644
index 0000000..64d1d7f
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/controller/CentralProxyTest.java
@@ -0,0 +1,40 @@
+/**
+******************************************************************************
+* 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.mics.home.controller;
+
+import org.eclipse.openk.mics.home.common.HttpStatusException;
+import org.eclipse.openk.mics.home.communication.RestServiceWrapper;
+import org.easymock.EasyMock;
+import org.junit.Test;
+import org.powermock.reflect.Whitebox;
+
+import static org.easymock.EasyMock.anyString;
+import static org.junit.Assert.assertEquals;
+
+public class CentralProxyTest {
+
+    @Test
+    public void testAll() throws HttpStatusException {
+        RestServiceWrapper rsw = EasyMock.createMock(RestServiceWrapper.class);
+        EasyMock.expect(rsw.performGetRequest(anyString())).andReturn("fine").anyTimes();
+        EasyMock.replay(rsw);
+        EasyMock.verify(rsw);
+        CentralProxy cp = new CentralProxy("TEST_URL");
+
+        Whitebox.setInternalState(cp, "restServiceWrapper", rsw);
+
+        assertEquals( "fine", cp.getHealthState("/abs",
+                "https", "123.456.789.0", "4711"));
+        assertEquals( "fine", cp.getServerDistribution("klausDasCluster"));
+    }
+}
diff --git a/src/test/java/org/eclipse/openk/mics/home/controller/ResponseBuilderWrapperTest.java b/src/test/java/org/eclipse/openk/mics/home/controller/ResponseBuilderWrapperTest.java
new file mode 100644
index 0000000..c168498
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/controller/ResponseBuilderWrapperTest.java
@@ -0,0 +1,41 @@
+/**
+******************************************************************************
+* 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.mics.home.controller;
+
+
+import org.apache.http.HttpStatus;
+import org.eclipse.openk.mics.home.common.HttpStatusException;
+import org.junit.Test;
+
+import javax.ws.rs.core.Response;
+
+import static org.junit.Assert.assertEquals;
+
+
+public class ResponseBuilderWrapperTest {
+    @Test
+    public void testGetResponseBuilder() throws HttpStatusException {
+        String json = "{ 'ret' : 'OK' }";
+        Response.ResponseBuilder rb = ResponseBuilderWrapper.INSTANCE.getResponseBuilder( json );
+        Response resp = rb.build();
+        assertEquals(resp.getStatus(), HttpStatus.SC_OK );
+    }
+
+    @Test
+    public void testBuildOkResponse() throws HttpStatusException {
+        String json = "{ 'test' : 'Value' }";
+        Response resp = ResponseBuilderWrapper.INSTANCE.buildOKResponse( json );
+        assertEquals( resp.getStatus(), HttpStatus.SC_OK );
+
+    }
+}
diff --git a/src/test/java/org/eclipse/openk/mics/home/viewmodel/ErrorReturnTest.java b/src/test/java/org/eclipse/openk/mics/home/viewmodel/ErrorReturnTest.java
new file mode 100644
index 0000000..6ac0ada
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/viewmodel/ErrorReturnTest.java
@@ -0,0 +1,42 @@
+/**
+******************************************************************************
+* 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.mics.home.viewmodel;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import org.eclipse.openk.mics.home.common.JsonGeneratorBase;
+import org.eclipse.openk.mics.home.common.util.ResourceLoaderBase;
+import org.junit.Test;
+
+public class ErrorReturnTest extends ResourceLoaderBase {
+	// IMPORTANT TEST!!!
+	// Make sure, our Interface produces a DEFINED Json!
+	// Changes in the interface will HOPEFULLY crash here!!!
+
+	@Test
+	public void TestStructureAgainstJson() {
+		String json = super.loadStringFromResource("testErrorReturn.json");
+		ErrorReturn errRet = JsonGeneratorBase.getGson().fromJson(json, ErrorReturn.class);
+		assertFalse(errRet.getErrorText().isEmpty());
+		assertEquals(errRet.getErrorCode(), 999);
+	}
+
+	@Test
+	public void TestSetters() {
+		ErrorReturn errRet = new ErrorReturn();
+		errRet.setErrorCode(1);
+		errRet.setErrorText("bla bla");
+	}
+
+}
diff --git a/src/test/java/org/eclipse/openk/mics/home/viewmodel/ServiceRequestEnvelopeTest.java b/src/test/java/org/eclipse/openk/mics/home/viewmodel/ServiceRequestEnvelopeTest.java
new file mode 100644
index 0000000..23a9fe7
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/viewmodel/ServiceRequestEnvelopeTest.java
@@ -0,0 +1,50 @@
+/**
+******************************************************************************
+* 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.mics.home.viewmodel;
+
+
+import org.junit.Test;
+
+import static junit.framework.TestCase.assertEquals;
+
+public class ServiceRequestEnvelopeTest {
+
+    @Test
+    public void testPojo() {
+        final String payload = "Testme Accurate";
+        ServiceRequestEnvelope env = new ServiceRequestEnvelope();
+        env.setHttps(true);
+        env.setMethod("POST");
+        env.setUriFragment("Fraggel");
+        env.setServiceName("Salve");
+
+        ServiceRequestEnvelope.HttpHeader[] headers = new ServiceRequestEnvelope.HttpHeader[2];
+        headers[0] = new ServiceRequestEnvelope.HttpHeader();
+        headers[0].setAttribute("1stAttr");
+        headers[0].setValue("1stValue");
+        headers[1] = new ServiceRequestEnvelope.HttpHeader();
+        headers[1].setAttribute("2ndAttr");
+        headers[1].setValue("2ndValue");
+        env.setHeaders(headers);
+
+        assertEquals(true, env.isHttps());
+        assertEquals("POST", env.getMethod());
+        env.setPayload(payload);
+        assertEquals(payload, env.getPayload());
+        assertEquals("Fraggel", env.getUriFragment());
+        assertEquals("Salve", env.getServiceName());
+        assertEquals(2, env.getHeaders().length);
+        assertEquals("2ndAttr", env.getHeaders()[1].getAttribute());
+        assertEquals("1stValue", env.getHeaders()[0].getValue());
+    }
+}
diff --git a/src/test/java/org/eclipse/openk/mics/home/viewmodel/VersionInfoTest.java b/src/test/java/org/eclipse/openk/mics/home/viewmodel/VersionInfoTest.java
new file mode 100644
index 0000000..8e41e0a
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/viewmodel/VersionInfoTest.java
@@ -0,0 +1,41 @@
+/**
+******************************************************************************
+* 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.mics.home.viewmodel;
+
+
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.openk.mics.home.common.JsonGeneratorBase;
+import org.eclipse.openk.mics.home.common.util.ResourceLoaderBase;
+import org.junit.Test;
+
+public class VersionInfoTest extends ResourceLoaderBase {
+    // IMPORTANT TEST!!!
+    // Make sure, our Interface produces a DEFINED Json!
+    // Changes in the interface will HOPEFULLY crash here!!!
+
+    @Test
+    public void testStructureAgainstJson() {
+        String json = super.loadStringFromResource("VersionInfo.json");
+        VersionInfo vi = JsonGeneratorBase.getGson().fromJson(json, VersionInfo.class);
+
+        assertTrue(vi.getBackendVersion().equals("0x.0x.xx"));
+    }
+
+    @Test
+    public void testSetters() {
+        VersionInfo vi = new VersionInfo();
+        vi.setBackendVersion("222");
+    }
+
+}
diff --git a/src/test/resources/VersionInfo.json b/src/test/resources/VersionInfo.json
new file mode 100644
index 0000000..35510d9
--- /dev/null
+++ b/src/test/resources/VersionInfo.json
@@ -0,0 +1,3 @@
+{
+  "backendVersion": "0x.0x.xx"
+}
\ No newline at end of file
diff --git a/src/test/resources/serviceRequestEnvelope.json b/src/test/resources/serviceRequestEnvelope.json
new file mode 100644
index 0000000..9722f58
--- /dev/null
+++ b/src/test/resources/serviceRequestEnvelope.json
@@ -0,0 +1,17 @@
+{
+  "serviceName": "auth-n-auth.mics",
+  "isHttps": false,
+  "method": "GET",
+  "uriFragment": "versionInfo",
+  "payload": "eyAiYmFja2VuZFZlcnNpb24iOiAiMC4xLjMtU05BUFNIT1QifQ==",
+  "headers": [
+    {
+      "attribute": "Content-Type",
+      "value": "application/json"
+    },
+    {
+      "attribute": "accept",
+      "value": "application/json"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/src/test/resources/testErrorReturn.json b/src/test/resources/testErrorReturn.json
new file mode 100644
index 0000000..f5540af
--- /dev/null
+++ b/src/test/resources/testErrorReturn.json
@@ -0,0 +1,4 @@
+{
+  "errorText": "TESTAT",
+  "errorCode": 999
+}
diff --git a/templates/markdown.hbs b/templates/markdown.hbs
new file mode 100644
index 0000000..2a7e5cf
--- /dev/null
+++ b/templates/markdown.hbs
@@ -0,0 +1,107 @@
+#{{#info}}{{title}}
+
+
+## {{join schemes " | "}}://{{host}}{{basePath}}
+
+
+{{description}}
+
+{{#contact}}
+[**Contact the developer**](mailto:{{email}})
+{{/contact}}
+
+**Version** {{version}}
+
+[**Terms of Service**]({{termsOfService}})
+
+{{#license}}[**{{name}}**]({{url}}){{/license}}
+
+{{/info}}
+
+{{#if consumes}}**Consumes:** {{join consumes ", "}}{{/if}}
+
+{{#if produces}}**Produces:** {{join produces ", "}}{{/if}}
+
+{{#if securityDefinitions}}
+# Security Definitions
+{{/if}}
+{{> security}}
+
+# APIs
+
+{{#each paths}}
+## {{@key}}
+{{#this}}
+{{#get}}
+### GET
+{{> operation}}
+{{/get}}
+
+{{#put}}
+### PUT
+{{> operation}}
+{{/put}}
+
+{{#post}}
+### POST
+
+{{> operation}}
+
+{{/post}}
+
+{{#delete}}
+### DELETE
+{{> operation}}
+{{/delete}}
+
+{{#option}}
+### OPTION
+{{> operation}}
+{{/option}}
+
+{{#patch}}
+### PATCH
+{{> operation}}
+{{/patch}}
+
+{{#head}}
+### HEAD
+{{> operation}}
+{{/head}}
+
+{{/this}}
+{{/each}}
+
+# Definitions
+{{#each definitions}}
+## <a name="/definitions/{{key}}">{{@key}}</a>
+
+<table border="1">
+    <tr>
+        <th>name</th>
+        <th>type</th>
+        <th>required</th>
+        <th>description</th>
+        <th>example</th>
+    </tr>
+    {{#each this.properties}}
+    <tr>
+        <td>{{@key}}</td>
+        <td>
+            {{#ifeq type "array"}}
+            {{#items.$ref}}
+            {{type}}[<a href="{{items.$ref}}">{{basename items.$ref}}</a>]
+            {{/items.$ref}}
+            {{^items.$ref}}{{type}}[{{items.type}}]{{/items.$ref}}
+            {{else}}
+            {{#$ref}}<a href="{{$ref}}">{{basename $ref}}</a>{{/$ref}}
+            {{^$ref}}{{type}}{{#format}} ({{format}}){{/format}}{{/$ref}}
+            {{/ifeq}}
+        </td>
+        <td>{{#required}}required{{/required}}{{^required}}optional{{/required}}</td>
+        <td>{{#description}}{{{description}}}{{/description}}{{^description}}-{{/description}}</td>
+        <td>{{example}}</td>
+    </tr>
+    {{/each}}
+</table>
+{{/each}}
\ No newline at end of file
diff --git a/templates/operation.hbs b/templates/operation.hbs
new file mode 100644
index 0000000..3ad3175
--- /dev/null
+++ b/templates/operation.hbs
@@ -0,0 +1,73 @@
+{{#deprecated}}-deprecated-{{/deprecated}}
+<a id="{{operationId}}">{{summary}}</a>
+
+{{description}}
+
+{{#if externalDocs.url}}{{externalDocs.description}}. [See external documents for more details]({{externalDocs.url}})
+{{/if}}
+
+{{#if security}}
+#### Security
+{{/if}}
+
+{{#security}}
+{{#each this}}
+* {{@key}}
+{{#this}}   * {{this}}
+{{/this}}
+{{/each}}
+{{/security}}
+
+#### Request
+
+{{#if consumes}}
+**Content-Type: ** {{join consumes ", "}}{{/if}}
+
+##### Parameters
+{{#if parameters}}
+<table border="1">
+    <tr>
+        <th>Name</th>
+        <th>Located in</th>
+        <th>Required</th>
+        <th>Description</th>
+        <th>Default</th>
+        <th>Schema</th>
+    </tr>
+    {{/if}}
+
+    {{#parameters}}
+    <tr>
+        <th>{{name}}</th>
+        <td>{{in}}</td>
+        <td>{{#if required}}yes{{else}}no{{/if}}</td>
+        <td>{{description}}{{#if pattern}} (**Pattern**: `{{pattern}}`){{/if}}</td>
+        <td> - </td>
+        {{#ifeq in "body"}}
+        <td>
+            {{#ifeq schema.type "array"}}Array[<a href="{{schema.items.$ref}}">{{basename schema.items.$ref}}</a>]{{/ifeq}}
+            {{#schema.$ref}}<a href="{{schema.$ref}}">{{basename schema.$ref}}</a> {{/schema.$ref}}
+        </td>
+        {{else}}
+        {{#ifeq type "array"}}
+        <td>Array[{{items.type}}] ({{collectionFormat}})</td>
+        {{else}}
+        <td>{{type}} {{#format}}({{format}}){{/format}}</td>
+        {{/ifeq}}
+        {{/ifeq}}
+    </tr>
+    {{/parameters}}
+    {{#if parameters}}
+</table>
+{{/if}}
+
+
+#### Response
+
+{{#if produces}}**Content-Type: ** {{join produces ", "}}{{/if}}
+
+
+| Status Code | Reason      | Response Model |
+|-------------|-------------|----------------|
+{{#each responses}}| {{@key}}    | {{description}} | {{#schema.$ref}}<a href="{{schema.$ref}}">{{basename schema.$ref}}</a>{{/schema.$ref}}{{#ifeq schema.type "array"}}Array[<a href="{{schema.items.$ref}}">{{basename schema.items.$ref}}</a>]{{/ifeq}}{{^schema}} - {{/schema}}|
+{{/each}}
\ No newline at end of file
diff --git a/templates/security.hbs b/templates/security.hbs
new file mode 100644
index 0000000..94badab
--- /dev/null
+++ b/templates/security.hbs
@@ -0,0 +1,88 @@
+{{#each securityDefinitions}}
+### {{@key}}
+{{#this}}
+{{#ifeq type "oauth2"}}
+<table>
+    <tr>
+        <th>type</th>
+        <th colspan="2">{{type}}</th>
+    </tr>
+    {{#if description}}
+    <tr>
+        <th>description</th>
+        <th colspan="2">{{description}}</th>
+    </tr>
+    {{/if}}
+    {{#if authorizationUrl}}
+    <tr>
+        <th>authorizationUrl</th>
+        <th colspan="2">{{authorizationUrl}}</th>
+    </tr>
+    {{/if}}
+    {{#if flow}}
+    <tr>
+        <th>flow</th>
+        <th colspan="2">{{flow}}</th>
+    </tr>
+    {{/if}}
+    {{#if tokenUrl}}
+    <tr>
+        <th>tokenUrl</th>
+        <th colspan="2">{{tokenUrl}}</th>
+    </tr>
+    {{/if}}
+    {{#if scopes}}
+    <tr>
+        <td rowspan="3">scopes</td>
+        {{#each scopes}}
+        <td>{{@key}}</td>
+        <td>{{this}}</td>
+    </tr>
+    <tr>
+        {{/each}}
+    </tr>
+    {{/if}}
+</table>
+{{/ifeq}}
+{{#ifeq type "apiKey"}}
+<table>
+    <tr>
+        <th>type</th>
+        <th colspan="2">{{type}}</th>
+    </tr>
+    {{#if description}}
+    <tr>
+        <th>description</th>
+        <th colspan="2">{{description}}</th>
+    </tr>
+    {{/if}}
+    {{#if name}}
+    <tr>
+        <th>name</th>
+        <th colspan="2">{{name}}</th>
+    </tr>
+    {{/if}}
+    {{#if in}}
+    <tr>
+        <th>in</th>
+        <th colspan="2">{{in}}</th>
+    </tr>
+    {{/if}}
+</table>
+{{/ifeq}}
+{{#ifeq type "basic"}}
+<table>
+    <tr>
+        <th>type</th>
+        <th colspan="2">{{type}}</th>
+    </tr>
+    {{#if description}}
+    <tr>
+        <th>description</th>
+        <th colspan="2">{{description}}</th>
+    </tr>
+    {{/if}}
+</table>
+{{/ifeq}}
+{{/this}}
+{{/each}}
\ No newline at end of file
diff --git a/templates/strapdown.html.hbs b/templates/strapdown.html.hbs
new file mode 100644
index 0000000..fd359ff
--- /dev/null
+++ b/templates/strapdown.html.hbs
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<title>API Document</title>
+
+<xmp theme="united" style="display:none;">
+    {{>markdown}}
+</xmp>
+
+<script src="http://strapdownjs.com/v/0.2/strapdown.js"></script>
+</html>
\ No newline at end of file
