diff --git a/api/Pipfile b/api/Pipfile
index ffd4b3ff6ea3a96cd02015b4cfb389b001a6727b..60ae90913121ac90e3a6e00dbf88451930e428d8 100644
--- a/api/Pipfile
+++ b/api/Pipfile
@@ -13,11 +13,11 @@ python_version = "3"
 
 [packages]
 flask = "==1.1.2"
-flask_jwt_extended = "==3.24.1"
-gevent = "==20.9.0"
-psycopg2 = "==2.8.5"
-TheCodeLabs-BaseUtils = "==1.3.1"
-TheCodeLabs-FlaskUtils = "==1.1.0"
-pyyaml = "==5.3.1"
+flask_jwt_extended = "==4.1.0"
+gevent = "==21.1.2"
+psycopg2 = "==2.8.6"
+TheCodeLabs-BaseUtils = "==1.7.0"
+TheCodeLabs-FlaskUtils = "==1.2.3"
+pyyaml = "==5.4.1"
 
 [dev-packages]
diff --git a/api/RoadmapAPIServer.py b/api/RoadmapAPIServer.py
index 5551c035256a5189d4f3bd838f92fdb5aecf6088..c367c2737da980c64ba3741185ea1660a21f2195 100644
--- a/api/RoadmapAPIServer.py
+++ b/api/RoadmapAPIServer.py
@@ -4,19 +4,19 @@ import logging
 import os
 
 import yaml
-from TheCodeLabs_BaseUtils import DefaultLogger
+from TheCodeLabs_BaseUtils.DefaultLogger import DefaultLogger
 from TheCodeLabs_FlaskUtils import FlaskBaseApp
 from flask import jsonify, render_template
-from flask import send_from_directory, request
+from flask import request
 from flask_jwt_extended import (
     JWTManager, create_access_token
 )
 
+from blueprints import SubTaskAPI, MilestoneAPI, TaskAPI, RoadmapAPI
 from logic import Constants
 from logic.Database import Database
 from logic.RequestValidator import RequestValidator, ValidationError
 from logic.UserService import UserService
-from blueprints import SubTaskAPI, MilestoneAPI, TaskAPI, RoadmapAPI
 
 LOGGER = DefaultLogger().create_logger_if_not_exists(Constants.APP_NAME)
 
diff --git a/api/blueprints/MilestoneAPI.py b/api/blueprints/MilestoneAPI.py
index e22ad8dad9fb236669e778fc4b43371bd7590b1b..a04bd9c1d7f3c07688d34d6cbf16acffcda29579 100644
--- a/api/blueprints/MilestoneAPI.py
+++ b/api/blueprints/MilestoneAPI.py
@@ -66,7 +66,7 @@ def construct_blueprint(database):
         return jsonify(prepare_milestone(milestone))
 
     @milestone_api.route('/milestone', methods=['POST'])
-    @jwt_required
+    @jwt_required()
     def add_milestone():
         try:
             parameters = RequestValidator.validate(request, [MilestoneParameters.ROADMAP_ID.value,
@@ -89,7 +89,7 @@ def construct_blueprint(database):
         return jsonify({'success': True})
 
     @milestone_api.route('/milestone/<int:milestoneID>/close', methods=['POST'])
-    @jwt_required
+    @jwt_required()
     def close_milestone(milestoneID):
         if not __milestone_exists(milestoneID):
             return jsonify({'success': False, 'msg': "No milestone with id '{}' existing".format(milestoneID)}), 400
@@ -108,7 +108,7 @@ def construct_blueprint(database):
         return jsonify({'success': True})
 
     @milestone_api.route('/milestone/<int:milestoneID>', methods=['DELETE'])
-    @jwt_required
+    @jwt_required()
     def delete_milestone(milestoneID):
         if not __milestone_exists(milestoneID):
             return jsonify({'success': False, 'msg': "No milestone with id '{}' existing".format(milestoneID)}), 400
@@ -117,7 +117,7 @@ def construct_blueprint(database):
         return jsonify({'success': True})
 
     @milestone_api.route('/milestone', methods=['PUT'])
-    @jwt_required
+    @jwt_required()
     def update_milestone():
         try:
             parameters = RequestValidator.validate(request, MilestoneParameters.get_values())
diff --git a/api/blueprints/RoadmapAPI.py b/api/blueprints/RoadmapAPI.py
index 629d8565b2e41ada12ed8b38469bc4a5a7cc5969..b5846970ad7c9b11664458115f2e77c9d1293d2f 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, jwt_optional, get_jwt_identity
+from flask_jwt_extended import jwt_required, get_jwt_identity
 
 from logic.DateFormatter import DateFormatter
 from logic.RequestValidator import RequestValidator, ValidationError
@@ -31,7 +31,7 @@ def construct_blueprint(database):
     roadmap_api = Blueprint('roadmap_api', __name__)
 
     @roadmap_api.route('/roadmaps', methods=['GET'])
-    @jwt_optional
+    @jwt_required(optional=True)
     def get_visible_roadmaps():
         user = get_jwt_identity()
         if user is None:
@@ -40,7 +40,7 @@ def construct_blueprint(database):
             return jsonify(format_roadmaps(database.get_roadmaps()))
 
     @roadmap_api.route('/roadmap/<int:roadmapID>', methods=['GET'])
-    @jwt_optional
+    @jwt_required(optional=True)
     def get_roadmap(roadmapID):
         roadmap = database.get_roadmap(roadmapID)
 
@@ -50,7 +50,7 @@ def construct_blueprint(database):
         return jsonify(prepare_roadmap(roadmap))
 
     @roadmap_api.route('/roadmap/<int:roadmapID>/full', methods=['GET'])
-    @jwt_optional
+    @jwt_required(optional=True)
     def get_roadmap_full(roadmapID):
         roadmap = prepare_roadmap(database.get_roadmap(roadmapID))
         roadmap['milestones'] = database.get_milestones(roadmapID)
@@ -87,7 +87,7 @@ def construct_blueprint(database):
         return jsonify(roadmap)
 
     @roadmap_api.route('/roadmap', methods=['POST'])
-    @jwt_required
+    @jwt_required()
     def add_roadmap():
         try:
             parameters = RequestValidator.validate(request, [RoadmapParameters.PROJECT_NAME.value,
@@ -103,7 +103,7 @@ def construct_blueprint(database):
         return jsonify({'success': True})
 
     @roadmap_api.route('/roadmap/<int:roadmapID>', methods=['DELETE'])
-    @jwt_required
+    @jwt_required()
     def delete_roadmap(roadmapID):
         if not __roadmaps_exists(roadmapID):
             return jsonify({'success': False, 'msg': "No roadmap with id '{}' existing".format(roadmapID)}), 400
@@ -112,7 +112,7 @@ def construct_blueprint(database):
         return jsonify({'success': True})
 
     @roadmap_api.route('/roadmap', methods=['PUT'])
-    @jwt_required
+    @jwt_required()
     def update_roadmap():
         try:
             parameters = RequestValidator.validate(request, [
diff --git a/api/blueprints/SubTaskAPI.py b/api/blueprints/SubTaskAPI.py
index 094f1c7eefa4b4e1497a6b5a4dc24820a7a1bb17..b0b8878264ddf35f90c79e35ab95f6ef087b644f 100644
--- a/api/blueprints/SubTaskAPI.py
+++ b/api/blueprints/SubTaskAPI.py
@@ -34,7 +34,7 @@ def construct_blueprint(database):
         return jsonify(database.get_sub_task(subTaskID))
 
     @subtask_api.route('/subtask', methods=['POST'])
-    @jwt_required
+    @jwt_required()
     def add_sub_task():
         try:
             parameters = RequestValidator.validate(request, [SubTaskParameters.TASK_ID.value,
@@ -51,7 +51,7 @@ def construct_blueprint(database):
         return jsonify({'success': True})
 
     @subtask_api.route('/subtask/<int:subTaskID>', methods=['DELETE'])
-    @jwt_required
+    @jwt_required()
     def delete_sub_task(subTaskID):
         if not __subtask_exists(subTaskID):
             return jsonify({'success': False, 'msg': "No sub task with id '{}' existing".format(subTaskID)}), 400
@@ -60,7 +60,7 @@ def construct_blueprint(database):
         return jsonify({'success': True})
 
     @subtask_api.route('/subtask', methods=['PUT'])
-    @jwt_required
+    @jwt_required()
     def update_sub_task():
         try:
             parameters = RequestValidator.validate(request, SubTaskParameters.get_values())
diff --git a/api/blueprints/TaskAPI.py b/api/blueprints/TaskAPI.py
index 3bd552f8a1ec3269b8f7ed446d0849d7f7f2ef53..6248295b97485eb4f349fcddce13b7909557f4e6 100644
--- a/api/blueprints/TaskAPI.py
+++ b/api/blueprints/TaskAPI.py
@@ -34,7 +34,7 @@ def construct_blueprint(database):
         return jsonify(database.get_task(taskID))
 
     @task_api.route('/task', methods=['POST'])
-    @jwt_required
+    @jwt_required()
     def add_task():
         try:
             parameters = RequestValidator.validate(request, [TaskParameters.MILESTONE_ID.value,
@@ -51,7 +51,7 @@ def construct_blueprint(database):
         return jsonify({'success': True})
 
     @task_api.route('/task/<int:taskID>', methods=['DELETE'])
-    @jwt_required
+    @jwt_required()
     def delete_task(taskID):
         if not __task_exists(taskID):
             return jsonify({'success': False, 'msg': "No task with id '{}' existing".format(taskID)}), 400
@@ -60,7 +60,7 @@ def construct_blueprint(database):
         return jsonify({'success': True})
 
     @task_api.route('/task', methods=['PUT'])
-    @jwt_required
+    @jwt_required()
     def update_task():
         try:
             parameters = RequestValidator.validate(request, TaskParameters.get_values())