diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..8e7f555b383725c982421b302a6782e3b69203f0
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,51 @@
+FROM python:3.9-slim as base
+
+ENV PYTHONFAULTHANDLER=1 \
+    PYTHONHASHSEED=random \
+    PYTHONUNBUFFERED=1
+
+WORKDIR /app
+
+FROM base as builder
+
+ENV PIP_DEFAULT_TIMEOUT=100 \
+    PIP_DISABLE_PIP_VERSION_CHECK=1 \
+    PIP_NO_CACHE_DIR=1 \
+    POETRY_VERSION=1.4
+
+RUN pip install "poetry==$POETRY_VERSION"
+
+RUN apt-get update && apt-get install -y \
+    build-essential \
+    curl \
+    software-properties-common \
+    git \
+    python3-dev \
+    libblas-dev \
+    liblapack-dev \
+    && rm -rf /var/lib/apt/lists/*
+
+# RUN git clone https://git-ce.rwth-aachen.de/leah.tgu/mdata_app.git .
+COPY logic/ logic/
+COPY pages/ pages/
+COPY resources/ resources/
+COPY poetry.lock pyproject.toml streamlit_app.py ./
+
+RUN poetry config virtualenvs.in-project true && \
+    poetry install --only=main --no-root && \
+    poetry build
+
+FROM base as final
+
+COPY --from=builder /app/.venv ./.venv
+COPY --from=builder /app/dist .
+COPY docker-entrypoint.sh .
+
+RUN ./.venv/bin/pip install *.whl
+
+EXPOSE 8501
+
+HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health
+
+# CMD ["./docker-entrypoint.sh"]
+ENTRYPOINT ["streamlit", "run", "streamlit_app.py", "--server.port=8501", "--server.address=0.0.0.0"]
\ No newline at end of file
diff --git a/logic/page_logic.py b/logic/page_logic.py
index 1e8a569af3837cd6f9b57ccf3dd50ee3712c60cf..fa1359daa08a0e1446bedcfab2807d191d35833b 100644
--- a/logic/page_logic.py
+++ b/logic/page_logic.py
@@ -1,12 +1,17 @@
-import numpy as np
+from enum import Enum
+
 import pandas as pd
 import streamlit as st
-from mdata.visualization import plotting
-from plotly import graph_objects as go
-from plotly.subplots import make_subplots
+from mdata.visualization import plotting, matplot
 
-available_widgets = ['Specifications', 'Raw Data', 'Overview', 'Inspector']
+class Widgets(Enum):
+    Specifications = 'Specifications'
+    RawData = 'Raw Data'
+    Overview = 'Overview'
+    Inspector = 'Inspector'
+    Dummy = 'Dummy'
 
+available_widgets = list(Widgets)
 
 def generate_page(md, widget):
     c = st.columns(3)
@@ -22,24 +27,24 @@ def generate_page(md, widget):
     cont.text(md.index_frame['time'].max())
     cont.caption('Last Observation')
 
-    if widget not in available_widgets:
+    if widget not in Widgets:
         return
 
-    if widget == 'Specifications':
+    if widget == Widgets.Specifications:
         st.markdown('## Events')
         st.table(make_spec_df(md.event_series_types))
         st.markdown('## Measurements')
         st.table(make_spec_df(md.measurement_series_types))
 
-    if widget == 'Raw Data':
+    if widget == Widgets.RawData:
         st.markdown('## Index')
         st.write(md.index_frame)
 
-    if widget == 'Overview':
+    if widget == Widgets.Overview:
         f = plotting.create_overview_plot(md, downsample_to=5_000)
         st.plotly_chart(f, use_container_width=True)
 
-    if widget == 'Inspector':
+    if widget == Widgets.Inspector:
         c1, c2, c3 = st.columns(3)
         object_list = list(md.get_unique_objects())
         event_type_list = list(md.event_series_types.keys())
@@ -49,16 +54,22 @@ def generate_page(md, widget):
         measurement_feature_selection = c1.multiselect('Feature Selection', fs)
 
         event_selection = c2.multiselect('Event Type Selection', event_type_list)
+        plot_separately = c2.checkbox('plot separately', False)
 
         object_selection = c3.selectbox('Object Selection', object_list)
 
-        selection = plotting.Selection(measurement=selected_measurement_type, events=event_selection,
-                                       object=object_selection, features=measurement_feature_selection)
-
-        f = plotting.create_timeseries_plot(md, selection, split_into_subplots=False)
+        f = plotting.create_timeseries_plot(md, measurement_type=selected_measurement_type, object=object_selection,
+                                            events=event_selection, features=measurement_feature_selection,
+                                            split_into_subplots=plot_separately)
 
         st.plotly_chart(f, use_container_width=True)
 
+    if widget == Widgets.Dummy:
+        measurement_type_list = list(md.measurement_series_types.keys())
+        selected_measurement_type = st.selectbox('Measurement Type', measurement_type_list)
+        f = matplot.create_basic_stacked_subplots(md, measurement_type=selected_measurement_type)
+        st.write(f)
+
 
 def make_spec_df(spec_types):
     df = pd.DataFrame.from_dict({l: list(t.features) for l, t in spec_types.items()},
diff --git a/poetry.lock b/poetry.lock
index 1379c39a6efc561fd419798e58baeffce7e7461d..a8107802e67899ff0154e5b4b9211fec67d10bb7 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -335,14 +335,14 @@ files = [
 
 [[package]]
 name = "certifi"
-version = "2022.12.7"
+version = "2023.5.7"
 description = "Python package for providing Mozilla's CA Bundle."
 category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
-    {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
+    {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"},
+    {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"},
 ]
 
 [[package]]
@@ -631,24 +631,32 @@ test-no-images = ["pytest"]
 
 [[package]]
 name = "cvxopt"
-version = "1.3.0.1"
+version = "1.3.1"
 description = "Convex optimization package"
 category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 files = [
-    {file = "cvxopt-1.3.0.1-cp310-cp310-win32.whl", hash = "sha256:429895c9cdd33b97ba1354b1d7a9d73c7179934d8649920a64d1d114062695dc"},
-    {file = "cvxopt-1.3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:eddb2c1ee863c7dd7edd3401cdb036c9c8d7779e2b1fe434b34b8d2b04bcebfc"},
-    {file = "cvxopt-1.3.0.1-cp311-cp311-win32.whl", hash = "sha256:3be9cca4538346abc2d3534a8667b3e03e047067cbc8d7cf2ae3fa81b4da619b"},
-    {file = "cvxopt-1.3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:a43aee498e47f2acb4eaffd2405da2a54915019bf09951d412f0deb0906383e9"},
-    {file = "cvxopt-1.3.0.1-cp36-cp36m-win32.whl", hash = "sha256:34c5d6fe2af6a5b1aa2bbaebb3880152923717eca699b8689052d1439c15dd71"},
-    {file = "cvxopt-1.3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:122e805decffbdd104d9096b8b21f0ce35ba7b5e8b961f3f23eb9b7fe1cdbec5"},
-    {file = "cvxopt-1.3.0.1-cp37-cp37m-win32.whl", hash = "sha256:77ac45a262c767cb1d614e51672821edf260af6798370b05a07e0181c80a52e2"},
-    {file = "cvxopt-1.3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9e9219e8fb0af22013c150dfbd6e38167b38f61bc2e0d269d19b6137772055a9"},
-    {file = "cvxopt-1.3.0.1-cp38-cp38-win32.whl", hash = "sha256:615e947e2c9ff74dc4b0dbede6414e1f6106590bc3caa52c690cdc2bcd6e4569"},
-    {file = "cvxopt-1.3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:517554aa443a4818d9fe01e73f8bd420b6acad0086019d0b03469d2a8810f21e"},
-    {file = "cvxopt-1.3.0.1-cp39-cp39-win32.whl", hash = "sha256:d1bbc011d5d83c913972e1bd30358f4fa56defa0be13fea956612ff2168f2b91"},
-    {file = "cvxopt-1.3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:f5acf720235014d69e4ee68a7682f2fef7ef30c705933d9b758c2edffd2a5bcf"},
+    {file = "cvxopt-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e569f070a00b1d8817d8891c11692fd75cd26efc625bf17bed0b11ace809c8b3"},
+    {file = "cvxopt-1.3.1-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:0ffbc8536a4ce0ecab18bf634ee0432e4cc8a60ce113d2e47d8e9734b9898a44"},
+    {file = "cvxopt-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:424ba591b6d837f88b15a5623ceb9563782f64ed7840e65d50acd5af12bfb074"},
+    {file = "cvxopt-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:8beec8a0225276fdfa767af9417599a8f1d7e5b56e312160af04477f4415e9d7"},
+    {file = "cvxopt-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:98674d4ddcd5b447d4e860862d371a9e9ccacd65a73ce2ccbc961842ad076ce9"},
+    {file = "cvxopt-1.3.1-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:058abca57083379efceb71e0b155f5ea9f925cf49dfc185f6561dc8c9dde63fc"},
+    {file = "cvxopt-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:569b9000a692e55d74eb48b68c7b7325f97049b9f22957b599fb89055f88ca7b"},
+    {file = "cvxopt-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:fe2806cb762de1d04ad6c2d262e4e97d7db3bfec099d5ee3e7feb5d1ada67058"},
+    {file = "cvxopt-1.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b9f9de25f71c6e0cc53ab7192af1469ce3fcb8b5979b3abc10841ac1bf0201ce"},
+    {file = "cvxopt-1.3.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba2151f2da6207e72eb92db722bdfa3060cade4fa982363d1d0721d656e1f36b"},
+    {file = "cvxopt-1.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b431d78fc6bf446ce917e3d9db5396abf9f3d21afbf6ecec818d4b119f880cd6"},
+    {file = "cvxopt-1.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357e94a1cb062d89585d52e00d500964594b5a14f6dcfdd2066abf24ee1db06b"},
+    {file = "cvxopt-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a5e8058366017a35eda83fe44eb2e69b17333974795eae5115539e2eae19e23"},
+    {file = "cvxopt-1.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801965426d4bd57e53214706072794fe9a604ec3ffa47ad03fd4e8f130cd90a1"},
+    {file = "cvxopt-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:0b6a8ab4f155e291eebd9e8e0ad878e5dfc2f71c3be84c776192bdf92737b95c"},
+    {file = "cvxopt-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e449744375bfde702a392e87ea282666e0ae593d568808f63aa486f9862d399a"},
+    {file = "cvxopt-1.3.1-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:80a42e57e9345df1c686da15694cf9c7b127d1a33c04e6aedc53ac65909e4176"},
+    {file = "cvxopt-1.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dba110ed6c9d8af293500b9c5baef664b2dc376fe0661c1b2f39833a14eac606"},
+    {file = "cvxopt-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:f096377218fa3cddc7bd1f433d2f91a182ab159be463a545b4bd5b439a6baa01"},
+    {file = "cvxopt-1.3.1.tar.gz", hash = "sha256:8d567981cbfa2a4ba1667b3e6f73cb941cf1c6992bf1438911035963294aa498"},
 ]
 
 [[package]]
@@ -824,14 +832,14 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc
 
 [[package]]
 name = "fonttools"
-version = "4.39.3"
+version = "4.39.4"
 description = "Tools to manipulate font files"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "fonttools-4.39.3-py3-none-any.whl", hash = "sha256:64c0c05c337f826183637570ac5ab49ee220eec66cf50248e8df527edfa95aeb"},
-    {file = "fonttools-4.39.3.zip", hash = "sha256:9234b9f57b74e31b192c3fc32ef1a40750a8fbc1cd9837a7b7bfc4ca4a5c51d7"},
+    {file = "fonttools-4.39.4-py3-none-any.whl", hash = "sha256:106caf6167c4597556b31a8d9175a3fdc0356fdcd70ab19973c3b0d4c893c461"},
+    {file = "fonttools-4.39.4.zip", hash = "sha256:dba8d7cdb8e2bac1b3da28c5ed5960de09e59a2fe7e63bb73f5a59e57b0430d2"},
 ]
 
 [package.extras]
@@ -974,14 +982,14 @@ sortedcontainers = ">=2.0,<3.0"
 
 [[package]]
 name = "ipykernel"
-version = "6.22.0"
+version = "6.23.1"
 description = "IPython Kernel for Jupyter"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "ipykernel-6.22.0-py3-none-any.whl", hash = "sha256:1ae6047c1277508933078163721bbb479c3e7292778a04b4bacf0874550977d6"},
-    {file = "ipykernel-6.22.0.tar.gz", hash = "sha256:302558b81f1bc22dc259fb2a0c5c7cf2f4c0bdb21b50484348f7bafe7fb71421"},
+    {file = "ipykernel-6.23.1-py3-none-any.whl", hash = "sha256:77aeffab056c21d16f1edccdc9e5ccbf7d96eb401bd6703610a21be8b068aadc"},
+    {file = "ipykernel-6.23.1.tar.gz", hash = "sha256:1aba0ae8453e15e9bc6b24e497ef6840114afcdb832ae597f32137fa19d42a6f"},
 ]
 
 [package.dependencies]
@@ -1755,7 +1763,8 @@ numba = "*"
 numexpr = "*"
 pandas = {version = "^1.5", extras = ["all"]}
 plotly = "^5.14.1"
-pm4py = "^2.7.3"
+pm4py = "^2.7.4"
+seaborn = "*"
 tables = "^3.8.0"
 tsdownsample = "^0.1.2"
 
@@ -1921,14 +1930,14 @@ test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "p
 
 [[package]]
 name = "nbconvert"
-version = "7.3.1"
+version = "7.4.0"
 description = "Converting Jupyter Notebooks"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "nbconvert-7.3.1-py3-none-any.whl", hash = "sha256:d2e95904666f1ff77d36105b9de4e0801726f93b862d5b28f69e93d99ad3b19c"},
-    {file = "nbconvert-7.3.1.tar.gz", hash = "sha256:78685362b11d2e8058e70196fe83b09abed8df22d3e599cf271f4d39fdc48b9e"},
+    {file = "nbconvert-7.4.0-py3-none-any.whl", hash = "sha256:af5064a9db524f9f12f4e8be7f0799524bd5b14c1adea37e34e83c95127cc818"},
+    {file = "nbconvert-7.4.0.tar.gz", hash = "sha256:51b6c77b507b177b73f6729dba15676e42c4e92bcb00edc8cc982ee72e7d89d7"},
 ]
 
 [package.dependencies]
@@ -2381,18 +2390,18 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa
 
 [[package]]
 name = "platformdirs"
-version = "3.5.0"
+version = "3.5.1"
 description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "platformdirs-3.5.0-py3-none-any.whl", hash = "sha256:47692bc24c1958e8b0f13dd727307cff1db103fca36399f457da8e05f222fdc4"},
-    {file = "platformdirs-3.5.0.tar.gz", hash = "sha256:7954a68d0ba23558d753f73437c55f89027cf8f5108c19844d4b82e5af396335"},
+    {file = "platformdirs-3.5.1-py3-none-any.whl", hash = "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5"},
+    {file = "platformdirs-3.5.1.tar.gz", hash = "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f"},
 ]
 
 [package.extras]
-docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"]
+docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.2.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"]
 test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"]
 
 [[package]]
@@ -2413,14 +2422,14 @@ tenacity = ">=6.2.0"
 
 [[package]]
 name = "pm4py"
-version = "2.7.3"
+version = "2.7.4"
 description = "Process mining for Python"
 category = "main"
 optional = false
 python-versions = "*"
 files = [
-    {file = "pm4py-2.7.3-py3-none-any.whl", hash = "sha256:6535ee6a561b6a0170edafbdf681d4f2bce85347a7f8d83aef12d1d50c93fd91"},
-    {file = "pm4py-2.7.3.tar.gz", hash = "sha256:600455a44f7d1835a42e966dc7ca79b17a7b98dc15057dff10e8be3b6e573c96"},
+    {file = "pm4py-2.7.4-py3-none-any.whl", hash = "sha256:626eefcf7a7c4ea8726f6e5091030ec7f6e6313470118547d46e58ae2fa56733"},
+    {file = "pm4py-2.7.4.tar.gz", hash = "sha256:20ce8c9d740e4fe4c5d59278c970f8665428da98ef09073ff1c5c4cd29dfe1d8"},
 ]
 
 [package.dependencies]
@@ -2769,21 +2778,6 @@ files = [
     {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"},
 ]
 
-[[package]]
-name = "pytz-deprecation-shim"
-version = "0.1.0.post0"
-description = "Shims to make deprecation of pytz easier"
-category = "main"
-optional = false
-python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
-files = [
-    {file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"},
-    {file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"},
-]
-
-[package.dependencies]
-tzdata = {version = "*", markers = "python_version >= \"3.6\""}
-
 [[package]]
 name = "pywin32"
 version = "306"
@@ -2966,14 +2960,14 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""}
 
 [[package]]
 name = "qtconsole"
-version = "5.4.2"
+version = "5.4.3"
 description = "Jupyter Qt console"
 category = "main"
 optional = false
 python-versions = ">= 3.7"
 files = [
-    {file = "qtconsole-5.4.2-py3-none-any.whl", hash = "sha256:30975c6a7d7941dd646d00a23e5982db49beaa60c3920bb243727d43da805f12"},
-    {file = "qtconsole-5.4.2.tar.gz", hash = "sha256:dc935780da276a2ab31a7a08a8cf327a2ea47fa27e21d485073251a7eeb16167"},
+    {file = "qtconsole-5.4.3-py3-none-any.whl", hash = "sha256:35fd6e87b1f6d1fd41801b07e69339f8982e76afd4fa8ef35595bc6036717189"},
+    {file = "qtconsole-5.4.3.tar.gz", hash = "sha256:5e4082a86a201796b2a5cfd4298352d22b158b51b57736531824715fc2a979dd"},
 ]
 
 [package.dependencies]
@@ -3011,21 +3005,21 @@ test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"]
 
 [[package]]
 name = "requests"
-version = "2.29.0"
+version = "2.30.0"
 description = "Python HTTP for Humans."
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "requests-2.29.0-py3-none-any.whl", hash = "sha256:e8f3c9be120d3333921d213eef078af392fba3933ab7ed2d1cba3b56f2568c3b"},
-    {file = "requests-2.29.0.tar.gz", hash = "sha256:f2e34a75f4749019bb0e3effb66683630e4ffeaf75819fb51bebef1bf5aef059"},
+    {file = "requests-2.30.0-py3-none-any.whl", hash = "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294"},
+    {file = "requests-2.30.0.tar.gz", hash = "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4"},
 ]
 
 [package.dependencies]
 certifi = ">=2017.4.17"
 charset-normalizer = ">=2,<4"
 idna = ">=2.5,<4"
-urllib3 = ">=1.21.1,<1.27"
+urllib3 = ">=1.21.1,<3"
 
 [package.extras]
 socks = ["PySocks (>=1.5.6,!=1.5.7)"]
@@ -3406,23 +3400,23 @@ files = [
 
 [[package]]
 name = "tornado"
-version = "6.3.1"
+version = "6.3.2"
 description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
 category = "main"
 optional = false
 python-versions = ">= 3.8"
 files = [
-    {file = "tornado-6.3.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:db181eb3df8738613ff0a26f49e1b394aade05034b01200a63e9662f347d4415"},
-    {file = "tornado-6.3.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b4e7b956f9b5e6f9feb643ea04f07e7c6b49301e03e0023eedb01fa8cf52f579"},
-    {file = "tornado-6.3.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9661aa8bc0e9d83d757cd95b6f6d1ece8ca9fd1ccdd34db2de381e25bf818233"},
-    {file = "tornado-6.3.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81c17e0cc396908a5e25dc8e9c5e4936e6dfd544c9290be48bd054c79bcad51e"},
-    {file = "tornado-6.3.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a27a1cfa9997923f80bdd962b3aab048ac486ad8cfb2f237964f8ab7f7eb824b"},
-    {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d7117f3c7ba5d05813b17a1f04efc8e108a1b811ccfddd9134cc68553c414864"},
-    {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:ffdce65a281fd708da5a9def3bfb8f364766847fa7ed806821a69094c9629e8a"},
-    {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:90f569a35a8ec19bde53aa596952071f445da678ec8596af763b9b9ce07605e6"},
-    {file = "tornado-6.3.1-cp38-abi3-win32.whl", hash = "sha256:3455133b9ff262fd0a75630af0a8ee13564f25fb4fd3d9ce239b8a7d3d027bf8"},
-    {file = "tornado-6.3.1-cp38-abi3-win_amd64.whl", hash = "sha256:1285f0691143f7ab97150831455d4db17a267b59649f7bd9700282cba3d5e771"},
-    {file = "tornado-6.3.1.tar.gz", hash = "sha256:5e2f49ad371595957c50e42dd7e5c14d64a6843a3cf27352b69c706d1b5918af"},
+    {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"},
+    {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c"},
+    {file = "tornado-6.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f"},
+    {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4"},
+    {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe"},
+    {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d"},
+    {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0"},
+    {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411"},
+    {file = "tornado-6.3.2-cp38-abi3-win32.whl", hash = "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2"},
+    {file = "tornado-6.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf"},
+    {file = "tornado-6.3.2.tar.gz", hash = "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba"},
 ]
 
 [[package]]
@@ -3562,18 +3556,17 @@ files = [
 
 [[package]]
 name = "tzlocal"
-version = "4.3"
+version = "5.0.1"
 description = "tzinfo object for the local timezone"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "tzlocal-4.3-py3-none-any.whl", hash = "sha256:b44c4388f3d34f25862cfbb387578a4d70fec417649da694a132f628a23367e2"},
-    {file = "tzlocal-4.3.tar.gz", hash = "sha256:3f21d09e1b2aa9f2dacca12da240ca37de3ba5237a93addfd6d593afe9073355"},
+    {file = "tzlocal-5.0.1-py3-none-any.whl", hash = "sha256:f3596e180296aaf2dbd97d124fe76ae3a0e3d32b258447de7b939b3fd4be992f"},
+    {file = "tzlocal-5.0.1.tar.gz", hash = "sha256:46eb99ad4bdb71f3f72b7d24f4267753e240944ecfc16f25d2719ba89827a803"},
 ]
 
 [package.dependencies]
-pytz-deprecation-shim = "*"
 tzdata = {version = "*", markers = "platform_system == \"Windows\""}
 
 [package.extras]
@@ -3596,20 +3589,21 @@ dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas
 
 [[package]]
 name = "urllib3"
-version = "1.26.15"
+version = "2.0.2"
 description = "HTTP library with thread-safe connection pooling, file post, and more."
 category = "main"
 optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.7"
 files = [
-    {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"},
-    {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"},
+    {file = "urllib3-2.0.2-py3-none-any.whl", hash = "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"},
+    {file = "urllib3-2.0.2.tar.gz", hash = "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc"},
 ]
 
 [package.extras]
-brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
-secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
-socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
+secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"]
+socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
+zstd = ["zstandard (>=0.18.0)"]
 
 [[package]]
 name = "validators"
@@ -3756,4 +3750,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more
 [metadata]
 lock-version = "2.0"
 python-versions = "^3.9,!=3.9.7"
-content-hash = "ac96a4ac5737561fdeee2f5476848ef21b65a267c2d918bce83f8b01eb81f740"
+content-hash = "7183ff12de211ef90d9ef9eed0fca1061571884aeffe565ad02bf328e7a17e11"
diff --git a/pyproject.toml b/pyproject.toml
index bcb9183ca2a20a9fb80b2e8509a5c5700335c070..02777e8aa7b622090dc6134e456931c3d36bce90 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -10,11 +10,11 @@ license = "MIT"
 
 [tool.poetry.dependencies]
 python = "^3.9,!=3.9.7"
-# flask = "^2.2.3"
+cvxopt = "^1.3"
 streamlit = "^1.21"
 # mdata = "^0.1.0"
 mdata = { path = "C:/Users/Leah/PycharmProjects/mdata", develop = true }
-# mdata = { git = "git@git-ce.rwth-aachen.de:leah.tgu/mdata.git", branch = "master" }
+#mdata = { git = "https://git-ce.rwth-aachen.de/leah.tgu/mdata.git", branch = "master" }
 seaborn = "^0.12.2"
 plotly = "^5.14.1"
 tsdownsample = "^0.1.2"