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/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..d05d003
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,66 @@
+# Contributing to Eclipse openK User Modules
+
+Thanks for your interest in this project.
+
+## Project description
+
+The project starts with the module Feed-In Management ("Last- und
+Einspeisemanagement") based on the German Electricity Feed-In Act. The future
+demand for electric energy is to be adapted to the supply and availability of
+renewable energy. Based on specific rules and parameters the Feed-In Management
+calculates a blueprint for electric switching stations and power plants based on
+renewable energy. Implementing the calculation input data is needed from
+electric networks, switching stations, power plants, electric demands and
+feed-in capabilities.
+
+* https://projects.eclipse.org/projects/technology.openk-usermodules
+
+## Developer resources
+
+Information regarding source code management, builds, coding standards, and
+more.
+
+* https://projects.eclipse.org/projects/technology.openk-usermodules/developer
+
+The project maintains the following source code repositories
+
+* http://git.eclipse.org/c/openk-usermodules/openk-usermodules.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.mics.centralService.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.mics.homeService.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.plannedGridMeasures.backend.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.plannedGridMeasures.frontend.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.standbyPlanning.backend.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.standbyPlanning.docu.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.standbyPlanning.frontend.git
+
+This project uses Bugzilla to track ongoing development and issues.
+
+* Search for issues: https://eclipse.org/bugs/buglist.cgi?product=openK User
+   Modules
+* Create a new report: https://eclipse.org/bugs/enter_bug.cgi?product=openK
+   User Modules
+
+Be sure to search for existing bugs before you create another one. Remember that
+contributions are always welcome!
+
+## Eclipse Contributor Agreement
+
+Before your contribution can be accepted by the project team contributors must
+electronically sign the Eclipse Contributor Agreement (ECA).
+
+* http://www.eclipse.org/legal/ECA.php
+
+Commits that are provided by non-committers must have a Signed-off-by field in
+the footer indicating that the author is aware of the terms by which the
+contribution has been provided to the project. The non-committer must
+additionally have an Eclipse Foundation account and must have a signed Eclipse
+Contributor Agreement (ECA) on file.
+
+For more information, please see the Eclipse Committer Handbook:
+https://www.eclipse.org/projects/handbook/#resources-commit
+
+## Contact
+
+Contact the project developers via the project's "dev" list.
+
+* https://accounts.eclipse.org/mailing-list/openk-usermodules-dev
\ No newline at end of file
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..55979aa
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,260 @@
+Eclipse Public License - v 2.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 content
+     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 changes or additions to the Program that
+  are not Modified Works.
+
+"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
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+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.
+
+  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 or other 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.
+
+  e) Notwithstanding the terms of any Secondary License, no
+  Contributor makes additional grants to any Recipient (other than
+  those set forth in this Agreement) as a result of such Recipient's
+  receipt of the Program under the terms of a Secondary License
+  (if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+  a) the Program must also be made available as Source Code, in
+  accordance with section 3.2, and the Contributor must accompany
+  the Program with a statement that the Source Code for the Program
+  is available under this Agreement, and informs Recipients how to
+  obtain it in a reasonable manner on or through a medium customarily
+  used for software exchange; and
+
+  b) the Contributor may Distribute the Program under a license
+  different than this Agreement, provided that such license:
+     i) effectively disclaims on behalf of all other 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 other Contributors all
+     liability for damages, including direct, indirect, special,
+     incidental and consequential damages, such as lost profits;
+
+     iii) does not attempt to limit or alter the recipients' rights
+     in the Source Code under section 3.2; and
+
+     iv) requires any subsequent distribution of the Program by any
+     party to be under a license that satisfies the requirements
+     of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+  a) it must be made available under this Agreement, or if the
+  Program (i) is combined with other material in a separate file or
+  files made available under a Secondary License, and (ii) the initial
+  Contributor attached to the Source Code the notice described in
+  Exhibit A of this Agreement, then the Program may be made available
+  under the terms of such Secondary Licenses, and
+
+  b) a copy of this Agreement must be included with each copy of
+  the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+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, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, 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, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, 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. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
\ No newline at end of file
diff --git a/NOTICE.md b/NOTICE.md
new file mode 100644
index 0000000..f249680
--- /dev/null
+++ b/NOTICE.md
@@ -0,0 +1,545 @@
+# Notices for Eclipse openK User Modules
+
+This content is produced and maintained by the Eclipse openK User Modules
+project.
+
+* Project home:
+   https://projects.eclipse.org/projects/technology.openk-usermodules
+
+## Trademarks
+
+Eclipse openK User Modules is a trademark of the Eclipse Foundation.
+
+## Copyright
+
+All content is the property of the respective authors or their employers. For
+more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License v. 2.0 which is available at
+http://www.eclipse.org/legal/epl-2.0.
+
+SPDX-License-Identifier: EPL-2.0
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+* http://git.eclipse.org/c/openk-usermodules/openk-usermodules.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.mics.centralService.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.mics.homeService.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.plannedGridMeasures.backend.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.plannedGridMeasures.frontend.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.standbyPlanning.backend.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.standbyPlanning.docu.git
+* http://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.standbyPlanning.frontend.git
+
+## Third-party Content
+
+This project leverages the following third party content.
+
+ag-grid (18.0.1)
+
+* License: MIT
+* Project: https://www.ag-grid.com/
+* Source: https://github.com/ag-grid/ag-grid
+
+ag-grid-angular (n/a)
+
+* License: MIT
+* Project: https://www.ag-grid.com/
+* Source: https://github.com/ag-grid/ag-grid-angular
+
+ajv (6.5.2)
+
+* License: MIT AND (BSD-3-Clause OR AFL-2.1)
+* Source: https://github.com/epoberezkin/ajv/releases/tag/v6.5.2
+
+angular animations (5.2.11)
+
+* License: MIT
+* Project: https://angular.io/guide/animations
+* Source: https://github.com/angular/angular/releases/tag/5.2.11
+
+angular animations (6.1.0)
+
+* License: Apache-2.0 AND MIT
+* Project: https://angular.io/guide/animations
+* Source: https://github.com/angular/angular/releases/tag/6.1.0
+
+angular calendar (0.23.7)
+
+* License: MIT
+* Source: https://github.com/mattlewis92/angular-calendar/releases/tag/v0.23.7
+
+angular common (5.2.11)
+
+* License: MIT
+* Source: https://github.com/angular/angular/releases/tag/5.2.11
+
+angular common (6.1.0)
+
+* License: Apache-2.0 AND MIT
+* Project: https://angular.io/api/common
+* Source: https://github.com/angular/angular/releases/tag/6.1.0
+
+angular compiler (5.2.11)
+
+* License: MIT
+* Source: https://github.com/angular/angular/releases/tag/5.2.11
+
+angular compiler (6.1.0)
+
+* License: Apache-2.0 AND MIT
+* Project: https://angular.io/
+* Source: https://github.com/angular/angular/releases/tag/6.1.0
+
+angular core (5.2.11)
+
+* License: MIT
+* Source: https://github.com/angular/angular/releases/tag/5.2.11
+
+angular core (6.1.0)
+
+* License: Apache-2.0 AND MIT
+* Project: https://angular.io/
+* Source: https://github.com/angular/angular/releases/tag/6.1.0
+
+angular forms (5.2.11)
+
+* License: MIT
+* Source: https://github.com/angular/angular/releases/tag/5.2.11
+
+angular forms (6.1.0)
+
+* License: Apache-2.0 AND MIT
+* Project: https://angular.io/
+* Source: https://github.com/angular/angular/releases/tag/6.1.0
+
+angular http (5.2.11)
+
+* License: MIT
+* Source: https://github.com/angular/angular/releases/tag/5.2.11
+
+angular http (6.1.0)
+
+* License: Apache-2.0 AND MIT
+* Project: https://angular.io/
+* Source: https://github.com/angular/angular/releases/tag/6.1.0
+
+angular jwt (1.0)
+
+* License: MIT
+* Source: https://github.com/auth0/angular2-jwt
+
+angular material2 (5.2.5)
+
+* License: MIT
+* Source: https://github.com/angular/material2/tree/5.2.5
+
+angular platform-browser (5.2.11)
+
+* License: MIT
+* Source: https://github.com/angular/angular/releases/tag/5.2.11
+
+angular platform-browser (6.1.0)
+
+* License: Apache-2.0 AND MIT
+* Project: https://angular.io/
+* Source: https://github.com/angular/angular/releases/tag/6.1.0
+
+angular platform-browser-dynamic (5.2.11)
+
+* License: MIT
+* Source: https://github.com/angular/angular/releases/tag/5.2.11
+
+angular platform-browser-dynamic (6.1.0)
+
+* License: Apache-2.0 AND MIT
+* Project: https://angular.io/
+* Source: https://github.com/angular/angular/releases/tag/6.1.0
+
+angular router (5.2.11)
+
+* License: MIT
+* Source: https://github.com/angular/angular/releases/tag/5.2.11
+
+angular router (6.1.0)
+
+* License: Apache-2.0 AND MIT
+* Project: https://angular.io/
+* Source: https://github.com/angular/angular/releases/tag/6.1.0
+
+angular2-uuid (1.1.1)
+
+* License: MIT
+
+Apache Commons Lang (2.6)
+
+* License: Apache License, 2.0
+
+Apache HttpClient (4.5.3)
+
+* License: Apache-2.0
+
+Apache HttpClient (4.5.3)
+
+* License: Apache-2.0
+
+Apache Log4j (1.2.17)
+
+* License: Apache License 2.0
+
+arc42 template (n/a)
+
+* License: MIT
+* Project: https://arc42.org/overview/
+* Source:
+   https://github.com/arc42/arc42-template/raw/master/dist/arc42-template-EN-plain-docx.zip
+
+auth0/angular-jwt (2.0.0)
+
+* License: MIT
+* Project: https://github.com/auth0/angular2-jwt
+* Source: https://github.com/auth0/angular2-jwt/releases/tag/2.0.0
+
+Bootstrap (3.3.7)
+
+* License: MIT
+
+bootstrap (4.1.1)
+
+* License: MIT
+* Project: https://getbootstrap.com/
+* Source: https://github.com/twbs/bootstrap
+
+bootstrap toggle (2.2.2)
+
+* License: MIT
+* Source: https://github.com/minhur/bootstrap-toggle/releases/tag/2.2.2
+
+camunda-engine-spring (7.9.0)
+
+* License: Apache-2.0
+* Project: https://github.com/camunda/camunda-bpm-platform
+* Source: https://github.com/camunda/
+
+cglib (3.1)
+
+* License: Apache License, 2.0, New BSD license
+
+classlist.js (1.1.20150312)
+
+* License: Unlicense
+
+classlist.js (1.1.20150312)
+
+* License: Unlicense
+
+com.google.code.gson : gson : (2.8.5)
+
+* License: Apache-2.0
+* Project: https://github.com/google/gson
+* Source: https://github.com/google/gson
+
+commons-codec (1.11)
+
+* License: Apache-2.0 AND BSD-3-Clause
+
+commons-codec:commons-codec (1.10)
+
+* License: Apache License, 2.0
+
+commons-io (2.5)
+
+* License: Apache License, 2.0
+
+commons-io:commons-io (2.6)
+
+* License: Apache-2.0
+
+core js (2.5.7)
+
+* License: BSD 3-Clause AND MIT
+* Source: https://github.com/zloirock/core-js/releases/tag/v2.5.7
+
+core-js (2.5.4)
+
+* License: MIT
+* Project: https://github.com/zloirock/core-js
+* Source: https://github.com/zloirock/core-js/releases/tag/v2.5.4
+
+core-js, (2.4.1)
+
+* License: MIT
+
+dozer V.5.5.1 (5.5.1)
+
+* License: Apache License, 2.0
+
+dropwizard (1.3.1)
+
+* License: Apache-2.0 AND MIT AND BSD-3-Clause
+* Source: https://github.com/dropwizard/dropwizard/tree/v1.3.1
+
+dropwizard.dropwizard-core (9.0.2)
+
+* License: Apache-2.0
+
+easymock (3.3.1)
+
+* License: Apache License, 2.0
+
+file-saver (1.3.8)
+
+* License: MIT
+* Source: https://github.com/eligrey/FileSaver.js/releases/tag/1.3.8
+
+font-awesome (4.7.0)
+
+* License: OFL-1.1 AND MIT
+
+font-awesome (4.7.0)
+
+* License: OFL-1.1 AND MIT
+
+gson (2.8.0)
+
+* License: Apache-2.0
+
+h2 Database (1.3.168)
+
+* License: Eclipse Public License
+
+HikariCP-java7 (2.4.13)
+
+* License: Apache-2.0
+* Project: http://brettwooldridge.github.io/HikariCP/
+* Source: https://github.com/brettwooldridge/HikariCP
+
+jackson-annotations (2.5.4)
+
+* License: Apache-2.0
+
+jackson-core (2.8.6)
+
+* License: Apache-2.0
+
+jackson-databind (2.8.6)
+
+
+jackson-dataformat-yaml (2.8.6)
+
+* License: Apache-2.0
+
+javax.mail (1.4.3)
+
+* License: (CDDL-1.0 OR GPL-2.0+ WITH Classpath-exception-2.0)
+
+javax.servlet-api (3.1.0)
+
+* License: Apache-2.0 AND (CDDL-1.1 or GPL-2.0)
+
+javax.servlet-api (3.1.0)
+
+* License: Apache-2.0 AND (CDDL-1.1 or GPL-2.0)
+
+jawa-jwt (3.2.0)
+
+* License: MIT
+
+jersey-bundles-jaxrs-ri (jaxrs-ri-2.22.1.jar) (2.22.1)
+
+* License: Common Development and Distribution License, Apache 2.0
+
+jersey-container-servlet-core (2.23.2)
+
+* License: Common Development and Distribution License 1.1
+
+jersey-media-json-jackson (2.23.2)
+
+* License: CDDL-1.1 OR GPL-2.0 With Classpath-exception-2.0
+
+jersey-spring3 (2.23.2)
+
+* License: CDDL-1.1 OR GPL-2.0 With Classpath-exception-2.0
+* Project:
+   https://mvnrepository.com/artifact/org.glassfish.jersey.ext/jersey-spring3
+* Source:
+   https://repo1.maven.org/maven2/org/glassfish/jersey/ext/jersey-spring3/2.23.2/
+
+jjwt (0.6.0)
+
+* License: Apache License, 2.0
+
+jQuery (3.3.1)
+
+* License: MIT
+
+JUnit (4.12)
+
+* License: Eclipse Public License
+
+mockito (1.9.5)
+
+* License: Apache License, 2.0, New BSD license, MIT license
+
+ng-bootstrap (2.2.0)
+
+* License: MIT
+* Project: https://ng-bootstrap.github.io/#/home
+* Source: https://github.com/ng-bootstrap/ng-bootstrap
+
+ng2 daterangepicker (2.0.12)
+
+* License: MIT
+* Project: https://www.npmjs.com/package/ng2-daterangepicker
+* Source:
+   https://github.com/evansmwendwa/ng2-daterangepicker/releases/tag/2.0.12
+
+ng2-tree-2.0.0-rc.11 (2.0.0)
+
+* License: MIT
+* Source: https://github.com/valor-software/ng2-tree/tree/v2.0.0-rc.11
+
+Popper (1.14.3)
+
+* License: MIT AND CC-BY-3.0 AND (MIT OR GPL-2.0) AND LicenseRef-Public-Domain
+* Project: https://popper.js.org/
+* Source: https://github.com/FezVrasta/popper.js/releases/tag/v1.14.3
+
+postgres.postgresql (9.1)
+
+* License: BSD-3-Clause AND License-Ref-Public-Domain
+
+powermock (1.7.3)
+
+* License: Apache-2.0 AND BSD-3-Clause AND MIT AND (GPL-2.0 OR GPL-2.0 With
+   Classpath-exception) AND LicenseRef-Public-Domain
+* Source: https://github.com/powermock/powermock/tree/powermock-1.7.3
+
+powermock-module-junit4-common (1.6.6)
+
+* License: Apache-2.0
+
+primeicons (1.0.0)
+
+* License: MIT
+* Project: https://www.primefaces.org/primeng/#/
+* Source: https://github.com/primefaces/primeicons
+
+primeng (6.0.0)
+
+* License: MIT
+* Project: https://www.primefaces.org/primeng/#/
+* Source: https://github.com/primefaces/primeng
+
+primeng (6.1.3)
+
+* License: MIT
+* Project: https://www.primefaces.org/primeng/#/
+* Source: https://github.com/primefaces/primeng
+
+RabbitMQ AMQP client (5.2.0)
+
+* License: MPL-2.0 OR GPL-2.0 OR Apache-2.0
+
+rxjs (5.5.11)
+
+* License: Apache-2.0
+* Source: https://github.com/ReactiveX/rxjs/releases/tag/5.5.11
+
+rxjs (6.2.2)
+
+* License: Apache-2.0
+* Project: https://github.com/Reactive-Extensions/RxJS
+* Source: https://github.com/Reactive-Extensions/RxJS
+
+slf4j-api (1.7.5)
+
+* License: MIT License + MIT License with no endorsement clause
+
+slf4j-log4j12 (1.7.25)
+
+* License: MIT
+
+Source Sans Pro (n/a)
+
+* License: OFL-1.1
+* Project:
+   http://www.adobe.com/products/type/font-information/source-sans-pro-readme.html
+
+spinKit (1.2.5)
+
+* License: MIT
+
+spring-data-jpa (1.9.1)
+
+* License: Apache License, 2.0
+
+spring-jdbc (4.3.17)
+
+* License: Apache-2.0
+* Project: https://spring.io/
+* Source:
+   http://central.maven.org/maven2/org/springframework/spring-jdbc/4.3.17.RELEASE/
+
+spring-test (4.3.17)
+
+* License: Apache-2.0 AND LicenseRef-Public-Domain
+* Project: https://spring.io/
+* Source:
+   http://central.maven.org/maven2/org/springframework/spring-test/3.2.17.RELEASE/
+
+spring-web (4.3.17)
+
+* License: Apache-2.0
+* Project: https://spring.io/
+* Source: https://github.com/spring-projects/spring-framework
+
+swagger-core (1.5.12)
+
+* License: Apache-2.0
+
+swagger-jersey2-jaxrs (1.5.12)
+
+* License: Apache-2.0
+
+urlrewritefilter (4.0.4)
+
+* License: BSD-3-Clause AND (Apache-2.0 OR LGPL-2.0 OR GPL-2.0)
+* Project: https://github.com/paultuckey/urlrewritefilter
+* Source: https://github.com/paultuckey/urlrewritefilter
+
+web-animations (2.3.1)
+
+* License: Apache-2.0 AND BSD-3-Clause AND MIT
+* Source: https://github.com/web-animations/web-animations-js
+
+web-animations-js (2.3.1)
+
+* License: Apache-2.0
+* Project: https://github.com/web-animations/web-animations-js
+* Source:
+   https://github.com/web-animations/web-animations-js/releases/tag/2.3.1
+
+zone.js (0.8.26)
+
+* License: MIT
+
+zone.js (0.8.26)
+
+* License: MIT
+* Source: https://github.com/angular/zone.js/releases/tag/v0.8.26
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
\ No newline at end of file
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..0581076
--- /dev/null
+++ b/src/main/asciidoc/architectureDocumentation/mics.home_architectureDocumentation.adoc
@@ -0,0 +1,275 @@
+﻿////
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+////
+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..d4635a9
--- /dev/null
+++ b/src/main/asciidoc/howto/mics.home_howtoBuild.adoc
@@ -0,0 +1,103 @@
+////
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+////
+= 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..7e79bc7
--- /dev/null
+++ b/src/main/asciidoc/howto/mics.home_howtoRun.adoc
@@ -0,0 +1,85 @@
+////
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+////
+= 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..6b74fc0
--- /dev/null
+++ b/src/main/asciidoc/interfaceDocumentation/elogbook_interfaceDocumentation.adoc
@@ -0,0 +1,2025 @@
+﻿////
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+////
+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..d9cc8f5
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/BackendConfig.java
@@ -0,0 +1,73 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..b8a5db8
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/Globals.java
@@ -0,0 +1,22 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..9eb6ea8
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/GsonUTCDateAdapter.java
@@ -0,0 +1,54 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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);
+        }
+    }
+}
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..de6635a
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/HttpStatusException.java
@@ -0,0 +1,27 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..e87f681
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/InitBackendConfig.java
@@ -0,0 +1,59 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..6083b5c
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/JsonGeneratorBase.java
@@ -0,0 +1,29 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..6d8d5ec
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/NotificationStatus.java
@@ -0,0 +1,32 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..3da3e26
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/util/JsonGeneratorBase.java
@@ -0,0 +1,31 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..805dece
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/util/LoggerUtil.java
@@ -0,0 +1,85 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..b4ad22f
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/common/util/ResourceLoaderBase.java
@@ -0,0 +1,39 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..478a6a9
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/communication/RestServiceWrapper.java
@@ -0,0 +1,132 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..5be6217
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/controller/BackendController.java
@@ -0,0 +1,41 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+
+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..a5d1fd3
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/controller/CentralProxy.java
@@ -0,0 +1,37 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..f7f6042
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/controller/ResponseBuilderWrapper.java
@@ -0,0 +1,58 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..10f8187
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/rest/BackendRestService.java
@@ -0,0 +1,144 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..d96c813
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/rest/RestServiceConfiguration.java
@@ -0,0 +1,32 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..a05b827
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/viewmodel/ErrorReturn.java
@@ -0,0 +1,37 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..dcd8a45
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/viewmodel/ServiceRequestEnvelope.java
@@ -0,0 +1,107 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..91464b5
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/mics/home/viewmodel/VersionInfo.java
@@ -0,0 +1,27 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..d6ea06a
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/BackendConfigTest.java
@@ -0,0 +1,33 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..9e62ef2
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/HttpStatusExceptionTest.java
@@ -0,0 +1,28 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..768abac
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/InitBackendConfigTest.java
@@ -0,0 +1,55 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..73f139e
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/NotificationStatusTest.java
@@ -0,0 +1,34 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..d4ac200
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/util/JsonGeneratorBaseTest.java
@@ -0,0 +1,78 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..66cc6dc
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/common/util/ResourceLoaderBaseTest.java
@@ -0,0 +1,29 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..7b3d7e6
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/controller/CentralProxyTest.java
@@ -0,0 +1,42 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..5dd741e
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/controller/ResponseBuilderWrapperTest.java
@@ -0,0 +1,43 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..62d1a4a
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/viewmodel/ErrorReturnTest.java
@@ -0,0 +1,44 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..e57f088
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/viewmodel/ServiceRequestEnvelopeTest.java
@@ -0,0 +1,52 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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..13e3d15
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/mics/home/viewmodel/VersionInfoTest.java
@@ -0,0 +1,43 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ * 
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+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
