diff --git a/client/blueprints/Tasks.py b/client/blueprints/Tasks.py
new file mode 100644
index 0000000000000000000000000000000000000000..70aa4a0dd62b429f3fcd9c8f5706244d46055fac
--- /dev/null
+++ b/client/blueprints/Tasks.py
@@ -0,0 +1,70 @@
+import requests
+from flask import Blueprint, render_template, redirect, url_for, request
+
+from ApiRequest import ApiRequest
+from Localization import LOCALIZATION
+
+
+def construct_blueprint(urlBuilder):
+    tasks = Blueprint('admin_tasks', __name__)
+
+    @tasks.route('/admin/tasks/overview', methods=['GET'])
+    def overview():
+        roadmap_ID = request.args.get('milestone_ID')
+        if not roadmap_ID or int(roadmap_ID) < 0:
+            return render_template('error.html', message=LOCALIZATION['error_param_invalid'])
+
+        tasks = requests.get(urlBuilder.build_url('tasks', roadmap_ID)).json()
+        return render_template('admin/tasks/overview.html', tasks=tasks, roadmap_ID=roadmap_ID)
+
+    @tasks.route('/admin/tasks/add', methods=['GET'])
+    def add():
+        return render_template('admin/tasks/edit.html',
+                               title='New Task',
+                               roadmap_ID=request.args.get('roadmap_ID'),
+                               form_url=url_for('admin_tasks.add_post'))
+
+    @tasks.route('/admin/tasks/add', methods=['POST'])
+    def add_post():
+        success, response = ApiRequest.send_api_request(urlBuilder.build_url('task'),
+                                                        requests.post, request.form,
+                                                        ['MilestoneID', 'Title', 'Description', 'Status'])
+
+        if not success:
+            return response
+        return redirect(url_for('admin_tasks.overview', roadmap_ID=request.form.get('MilestoneID')))
+
+    @tasks.route('/admin/tasks/edit', methods=['GET'])
+    def edit():
+        ID = request.args.get('ID')
+        if not ID or int(ID) < 0:
+            return render_template('error.html', message=LOCALIZATION['error_param_invalid'])
+
+        task = requests.get(urlBuilder.build_url('milestone', ID)).json()
+        return render_template('admin/tasks/edit.html',
+                               title='Edit Task',
+                               task=task,
+                               form_url=url_for('admin_tasks.edit_post'))
+
+    @tasks.route('/admin/tasks/edit', methods=['POST'])
+    def edit_post():
+        success, response = ApiRequest.send_api_request(urlBuilder.build_url('task'),
+                                                        requests.put, request.form,
+                                                        ['ID', 'MilestoneID', 'Title', 'Description', 'Status'])
+
+        if not success:
+            return response
+        return redirect(url_for('admin_tasks.overview', roadmap_ID=request.args.get('milestone_ID')))
+
+    @tasks.route('/admin/tasks/delete', methods=['GET'])
+    def delete():
+        ID = request.args.get('ID')
+        if not ID or int(ID) < 0:
+            return render_template('error.html', message=LOCALIZATION['error_param_invalid'])
+
+        success, response = ApiRequest.send_api_request(urlBuilder.build_url('task', ID), requests.delete, {}, [])
+        if not success:
+            return response
+        return redirect(url_for('admin_tasks.overview', roadmap_ID=request.args.get('milestone_ID')))
+
+    return tasks