diff --git a/api/blueprints/RoadmapAPI.py b/api/blueprints/RoadmapAPI.py
index c803acc7e50fbd46abd2eeb6b2e13248d877f200..36fc8db0363782968dc6679db38a45609eb0ab0f 100644
--- a/api/blueprints/RoadmapAPI.py
+++ b/api/blueprints/RoadmapAPI.py
@@ -1,7 +1,7 @@
 from enum import Enum
 
 from flask import Blueprint, jsonify, request
-from flask_jwt_extended import jwt_required
+from flask_jwt_extended import jwt_required, jwt_optional, get_jwt_identity
 
 from logic.DateFormatter import DateFormatter
 from logic.RequestValidator import RequestValidator, ValidationError
@@ -10,24 +10,41 @@ from logic.RequestValidator import RequestValidator, ValidationError
 class RoadmapParameters(Enum):
     ID = 'ID'
     PROJECT_NAME = 'Projectname'
+    HIDDEN = 'Hidden'
 
 
 def construct_blueprint(database):
     roadmap_api = Blueprint('roadmap_api', __name__)
 
     @roadmap_api.route('/roadmaps', methods=['GET'])
-    def get_roadmaps():
-        return jsonify(database.get_roadmaps())
+    @jwt_optional
+    def get_visible_roadmaps():
+        user = get_jwt_identity()
+        if user is not None:
+            return jsonify(database.get_roadmaps())
+        else:
+            return jsonify(database.get_visible_roadmaps())
 
     @roadmap_api.route('/roadmap/<int:roadmapID>', methods=['GET'])
+    @jwt_optional
     def get_roadmap(roadmapID):
-        return jsonify(database.get_roadmap(roadmapID))
+        roadmap = database.get_roadmap(roadmapID)
+
+        user = get_jwt_identity()
+        if roadmap['Hidden'] and user is None:
+                return jsonify({'success': False, 'msg': 'A roadmap with this id not exists'}), 404
+        return jsonify(roadmap)
 
     @roadmap_api.route('/roadmap/<int:roadmapID>/full', methods=['GET'])
+    @jwt_optional
     def get_roadmap_full(roadmapID):
         roadmap = database.get_roadmap(roadmapID)
         roadmap['milestones'] = database.get_milestones(roadmapID)
 
+        user = get_jwt_identity()
+        if roadmap['Hidden'] and user is None:
+            return jsonify({'success': False, 'msg': 'A roadmap with this id not exists'}), 404
+
         numberOfOpenMilestones = 0
         for milestone in roadmap['milestones']:
             milestone['DueDate'] = DateFormatter.format(milestone['DueDate'])
@@ -82,8 +99,11 @@ def construct_blueprint(database):
     @jwt_required
     def update_roadmap():
         try:
-            parameters = RequestValidator.validate(request,
-                                                   [RoadmapParameters.ID.value, RoadmapParameters.PROJECT_NAME.value])
+            parameters = RequestValidator.validate(request, [
+                RoadmapParameters.ID.value,
+                RoadmapParameters.PROJECT_NAME.value,
+                RoadmapParameters.HIDDEN.value
+            ])
         except ValidationError as e:
             return e.response, 400
 
@@ -91,11 +111,9 @@ def construct_blueprint(database):
         if not __roadmaps_exists(roadmapID):
             return jsonify({'success': False, 'msg': "No roadmap with ID '{}' existing".format(roadmapID)}), 400
 
-        if __name_already_used(parameters[RoadmapParameters.PROJECT_NAME.value]):
-            return jsonify({'success': False, 'msg': 'A roadmap with this name already exists'}), 400
-
         database.update_roadmap(parameters[RoadmapParameters.ID.value],
-                                parameters[RoadmapParameters.PROJECT_NAME.value])
+                                parameters[RoadmapParameters.PROJECT_NAME.value],
+                                parameters[RoadmapParameters.HIDDEN.value])
         return jsonify({'success': True})
 
     def __roadmaps_exists(roadmapID):
diff --git a/api/logic/Database.py b/api/logic/Database.py
index 079b6ae566fe181e8898c71695cbb346a0c2d724..8d9ed586838736746a5bdd0eaf9f010f608c0869 100644
--- a/api/logic/Database.py
+++ b/api/logic/Database.py
@@ -71,6 +71,7 @@ class Database:
                      f'("{RoadmapParameters.ID.value}" int4 NOT NULL DEFAULT ' \
                      f'nextval(\'"roadmaps_ID_seq"\'::regclass),' \
                      f'"{RoadmapParameters.PROJECT_NAME.value}" text NOT NULL, ' \
+                     f'"{RoadmapParameters.HIDDEN.value}" boolean NOT NULL DEFAULT false, ' \
                      f'PRIMARY KEY ("{RoadmapParameters.ID.value}"));'
         self.__query(queryTable, fetch_type=FetchType.NONE)
 
@@ -124,6 +125,10 @@ class Database:
         query = f'SELECT * FROM roadmaps ORDER BY "{RoadmapParameters.ID.value}";'
         return self.__query(query)
 
+    def get_visible_roadmaps(self):
+        query = f'SELECT * FROM roadmaps WHERE "{RoadmapParameters.HIDDEN.value}"=FALSE ORDER BY "{RoadmapParameters.ID.value}";'
+        return self.__query(query)
+
     def get_roadmap(self, roadmapID):
         query = f'SELECT * FROM roadmaps WHERE "{RoadmapParameters.ID.value}"=%s;'
         return self.__query(query, roadmapID, fetch_type=FetchType.ONE)
@@ -132,9 +137,9 @@ class Database:
         query = f'INSERT INTO roadmaps ("{RoadmapParameters.PROJECT_NAME.value}") VALUES (%s);'
         self.__query(query, name, fetch_type=FetchType.NONE)
 
-    def update_roadmap(self, roadmapID, name):
-        query = f'UPDATE roadmaps SET "{RoadmapParameters.PROJECT_NAME.value}"=%s WHERE "{RoadmapParameters.ID.value}"=%s;'
-        self.__query(query, name, roadmapID, fetch_type=FetchType.NONE)
+    def update_roadmap(self, roadmapID, name, hidden):
+        query = f'UPDATE roadmaps SET "{RoadmapParameters.PROJECT_NAME.value}"=%s, "{RoadmapParameters.HIDDEN.value}"=%s WHERE "{RoadmapParameters.ID.value}"=%s;'
+        self.__query(query, name, hidden, roadmapID, fetch_type=FetchType.NONE)
 
     def delete_roadmap(self, roadmapID):
         query = f'DELETE FROM roadmaps WHERE "{RoadmapParameters.ID.value}"=%s;'
diff --git a/client/RoadmapClient.py b/client/RoadmapClient.py
index 648c7d4b61b9ba058c1d316da2462316f4451095..3bf33d969f4d376ba8480e5be4ab691b8ba66ad2 100644
--- a/client/RoadmapClient.py
+++ b/client/RoadmapClient.py
@@ -64,7 +64,11 @@ class RoadmapClient(FlaskBaseApp):
         if roadmapID < 1:
             return False, render_template('error.html', message=LOCALIZATION['error_param_invalid'])
 
-        roadmap = requests.get(urlBuilder.build_url('roadmap', roadmapID, 'full')).json()
+        response = requests.get(urlBuilder.build_url('roadmap', roadmapID, 'full'))
+        if response.status_code != 200:
+            return False, render_template('error.html', message=LOCALIZATION['error_roadmap_not_existing'])
+
+        roadmap = response.json()
         if roadmap is None:
             return False, render_template('error.html', message=LOCALIZATION['error_roadmap_not_existing'])
 
diff --git a/client/blueprints/Roadmaps.py b/client/blueprints/Roadmaps.py
index fad8d36c4c4ce1b4538319517202f62e45a5a13e..e311cd7346ebd4fe81c44f507e7fe3c34454f3b7 100644
--- a/client/blueprints/Roadmaps.py
+++ b/client/blueprints/Roadmaps.py
@@ -12,7 +12,8 @@ def construct_blueprint(urlBuilder):
     @roadmaps.route('/admin/roadmaps/overview', methods=['GET'])
     @require_api_token
     def overview():
-        roadmaps = requests.get(urlBuilder.build_url('roadmaps')).json()
+        _, roadmaps = ApiRequest.send_api_request(urlBuilder.build_url('roadmaps'), requests.get, {}, [])
+        print(roadmaps)
         return render_template('admin/roadmaps/overview.html', roadmaps=roadmaps)
 
     @roadmaps.route('/admin/roadmaps/add', methods=['GET'])
@@ -39,7 +40,7 @@ def construct_blueprint(urlBuilder):
         if not ID or int(ID) < 0:
             return render_template('error.html', message=LOCALIZATION['error_param_invalid'])
 
-        roadmap = requests.get(urlBuilder.build_url('roadmap', ID)).json()
+        _, roadmap = ApiRequest.send_api_request(urlBuilder.build_url('roadmap', ID), requests.get, {}, [])
         return render_template('admin/roadmaps/edit.html',
                                title='Edit Roadmap',
                                roadmap=roadmap,
@@ -49,8 +50,8 @@ def construct_blueprint(urlBuilder):
     @require_api_token
     def edit_post():
         success, response = ApiRequest.send_api_request(urlBuilder.build_url('roadmap'),
-                                                        requests.post, request.form,
-                                                        [('ID', int), ('Projectname', str)])
+                                                        requests.put, request.form,
+                                                        [('ID', int), ('Projectname', str), ('Hidden', bool)])
 
         if not success:
             return response
diff --git a/client/templates/admin/roadmaps/edit.html b/client/templates/admin/roadmaps/edit.html
index 8e6371fa2c05734fb5b5c588f325e653ffbcb922..de6e8eeac9e4ce5815808858b2946c5262f74897 100644
--- a/client/templates/admin/roadmaps/edit.html
+++ b/client/templates/admin/roadmaps/edit.html
@@ -19,11 +19,21 @@
                                 <label for="project-name">Project Name</label>
                             </div>
                         </div>
+                    <div class="col s12 m8 offset-m2 l6 offset-l3">
+                        <div class="input-field col s12">
+                            <p>
+                                <label>
+                                    <input id="Hidden" name="Hidden" type="checkbox"
+                                            {% if roadmap and roadmap["Hidden"] %} checked="checked" {% endif %}/>
+                                    <span>Hidden</span>
+                                </label>
+                            </p>
+                        </div>
                     </div>
                     <div class="row center-align margin-top">
                         <div class="col s12 m8 offset-m2 l6 offset-l3">
                             <a class="waves-effect waves-light btn blue darken-3" href="{{ url_for("admin_roadmaps.overview") }}"><i class="material-icons left">arrow_back</i>Back</a>
-                            <button class="bwaves-effect waves-light btn blue darken-3 margin-left" type="submit" name="action">
+                            <button class="waves-effect waves-light btn blue darken-3 margin-left" type="submit" name="action">
                                 <i class="material-icons left">save</i>Save
                             </button>
                         </div>