diff --git a/.gitignore b/.gitignore
index 79b85b93d3875472a2cef1fd10ab6a2aa53b0e79..6609e2b52a8167d7633d53087d93804b72ffd227 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,7 @@
 *env/
 .env
 
+*.egg-*
 *.pyc
+*.txt
 config.txt
diff --git a/Dockerfile b/Dockerfile
index 273811c9f2646757d1fa0280050acab30641049b..b2dd42d08c62277e5c5f2789ea89bb129f112e3c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -9,10 +9,13 @@ RUN conda env update -q -f /tmp/environment.yml && \
     conda env export -n "root" && \
     jupyter lab build 
 
-COPY dash_proxy.py setup.py /tmp/dash_proxy/
 RUN pip3 install --upgrade pip
+
+COPY dash_proxy /tmp/dash_proxy/
 RUN pip install /tmp/dash_proxy/
 
-# copy dash app
-COPY app ${HOME}/app/
-RUN chown -R jovyan ${HOME}/app/
+COPY llm_utils /llm_utils/
+RUN pip install /llm_utils/
+
+COPY app /dash/app/
+RUN chown -R jovyan /dash/app/
diff --git a/app/app.py b/app/app.py
index 449201124aa13717bd499ec6ea0a55b431c101e9..604849e09dcb66adf48675d9192e00f9ea6828e1 100644
--- a/app/app.py
+++ b/app/app.py
@@ -1,6 +1,5 @@
-import os
 import sys 
-sys.path.append(os.path.dirname(os.path.abspath(__file__)))
+sys.path.append("/home/jovyan/")
 
 import argparse
 import logging
diff --git a/app/callbacks.py b/app/callbacks.py
index 5b288f2459c8fc7ad03a856a1ff15634d0e45abe..6076465849aca4147f3158bc3fe3d50db435cbfa 100644
--- a/app/callbacks.py
+++ b/app/callbacks.py
@@ -10,7 +10,7 @@ from dash.dependencies import (
     State
 )
 
-from client import ChatGPT
+from llm_utils.client import ChatGPT
 
 
 def format_chat_messages(chat_history):
diff --git a/dash_proxy.py b/dash_proxy/dash_proxy.py
similarity index 63%
rename from dash_proxy.py
rename to dash_proxy/dash_proxy.py
index b7add298fdc2cd47baa0d17dd2cd052dc3f85b0d..309e977e30e4ae08b01c6f3c3734e673b94fb444 100644
--- a/dash_proxy.py
+++ b/dash_proxy/dash_proxy.py
@@ -1,16 +1,7 @@
-import os
-import logging
-
-logger = logging.getLogger(__name__)
-logger.setLevel('INFO')
-
-HERE = os.path.dirname(os.path.abspath(__file__))
-
-
 def setup_dash_proxy():
     command = [
         'python',
-        'app/app.py',
+        '/dash/app/app.py',
         '--port',
         '{port}'
     ]
diff --git a/setup.py b/dash_proxy/setup.py
similarity index 100%
rename from setup.py
rename to dash_proxy/setup.py
diff --git a/llm_utils/setup.py b/llm_utils/setup.py
new file mode 100644
index 0000000000000000000000000000000000000000..737729b7716520f1c36d7351fea156faee49258f
--- /dev/null
+++ b/llm_utils/setup.py
@@ -0,0 +1,14 @@
+import setuptools
+
+setuptools.setup(
+    author="Julian Rasch",
+    author_email="julian.rasch@fh-muenster.de",
+    description="Helper modules to work with LLMs.",
+    name="llm_utils",
+    package_dir={"": "src"},
+    packages=setuptools.find_packages(where="src"),
+    install_requires=[
+        "openai", 
+        "python-dotenv"
+    ]
+)
diff --git a/llm_utils/src/__init__.py b/llm_utils/src/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/llm_utils/src/llm_utils/__init__.py b/llm_utils/src/llm_utils/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/app/client.py b/llm_utils/src/llm_utils/client.py
similarity index 85%
rename from app/client.py
rename to llm_utils/src/llm_utils/client.py
index 5b95e0793e4619dfc1fdfde8882678651bc1de05..82ceeac15722b63c195615bcb18a5563f36d349d 100644
--- a/app/client.py
+++ b/llm_utils/src/llm_utils/client.py
@@ -1,17 +1,23 @@
 import os
+import logging
 from openai import AzureOpenAI
 from dotenv import load_dotenv
 
 from enum import Enum
 
-
-found_dotenv = load_dotenv(
-    "config.txt",
-    override=True
-)
+try:
+    found_dotenv = load_dotenv(
+        "/home/jovyan/config.txt",
+        override=True
+    )
+except ValueError:
+    logging.warn("Could not detect config.txt in /home/jovyan/. Searching in current folder ...")
+    found_dotenv = load_dotenv(
+        "config.txt",
+        override=True)
 
 if not found_dotenv: 
-    raise ValueError("Could not detect .env-file.")
+    raise ValueError("Could not detect config.txt in /home/jovyan/.")
 
 AZURE_OPENAI_API_KEY = os.environ.get("AZURE_OPENAI_API_KEY")
 AZURE_OPENAI_ENDPOINT = os.environ.get("AZURE_OPENAI_ENDPOINT")