diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..047b72f
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+project_civiproxy_logs2json
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 698cbce..69ae855 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,7 +2,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/civiproxy_logs2json.iml b/.idea/project_civiproxy_logs2json.iml
similarity index 81%
rename from .idea/civiproxy_logs2json.iml
rename to .idea/project_civiproxy_logs2json.iml
index 6fda86d..ea9e34e 100644
--- a/.idea/civiproxy_logs2json.iml
+++ b/.idea/project_civiproxy_logs2json.iml
@@ -4,7 +4,7 @@
-
+
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..8dd39ec
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1 @@
+include src/civiproxy_logs2json/*.toml
\ No newline at end of file
diff --git a/civiproxy_logs2json/__init__.py b/civiproxy_logs2json/__init__.py
deleted file mode 100644
index 22d43c6..0000000
--- a/civiproxy_logs2json/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from .__main__ import main, translate_logfile
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..0e38919
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,45 @@
+[build-system]
+requires = ["setuptools>=61.0.0", "wheel"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "civiproxy_logs2json"
+version = "1.0.4"
+description = "Translate a CiviProxy logfile into JSON format."
+readme = "README.md"
+authors = [{ name = "Marc Michalsky", email = "michalsky@forumZFD.de" }]
+license = { file = "LICENSE" }
+classifiers = [
+ "License :: OSI Approved :: MIT License",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+]
+keywords = ["civicrm", "json", "logs"]
+dependencies = ['tomli; python_version < "3.11"',]
+requires-python = ">=3.5"
+
+[project.optional-dependencies]
+dev = ["pytest", "bumpver"]
+
+[project.urls]
+Homepage = "https://github.com/MarcMichalsky/civiproxy_logs2json"
+
+[project.scripts]
+cpl2j = "civiproxy_logs2json.__main__:main"
+
+[tool.bumpver]
+current_version = "1.0.3"
+version_pattern = "MAJOR.MINOR.PATCH"
+commit_message = "🔖 bump version {old_version} -> {new_version}"
+commit = true
+tag = true
+push = true
+
+[tool.bumpver.file_patterns]
+"pyproject.toml" = [
+ 'current_version = "{version}"',
+]
+"src/civiproxy_logs2json/__init__.py" = [
+ "{version}"
+]
+
diff --git a/setup.py b/setup.py
index 9d74870..6068493 100644
--- a/setup.py
+++ b/setup.py
@@ -1,23 +1,3 @@
-from setuptools import setup, find_packages
+from setuptools import setup
-with open("README.md", "r") as fh:
- description = fh.read()
-
-setup(
- name="civiproxy_logs2json",
- version="1.0.3",
- author="Marc Michalsky",
- author_email="michalsky@forumZFD.de",
- packages=find_packages("civiproxy_logs2json", exclude=["test"]),
- description="Translate a CiviProxy logfile into JSON format.",
- long_description=description,
- long_description_content_type="text/markdown",
- url="https://github.com/MarcMichalsky/civiproxy_logs2json",
- license='MIT',
- python_requires='>=3.5',
- entry_points={
- 'console_scripts': [
- 'cpl2j = civiproxy_logs2json.__main__:main',
- ],
- },
-)
+setup()
diff --git a/src/civiproxy_logs2json/__init__.py b/src/civiproxy_logs2json/__init__.py
new file mode 100644
index 0000000..53371ed
--- /dev/null
+++ b/src/civiproxy_logs2json/__init__.py
@@ -0,0 +1,13 @@
+from importlib import resources
+from .__main__ import main, translate_logfile
+try:
+ import tomllib
+except ModuleNotFoundError:
+ import tomli as tomllib
+
+__version__ = "1.0.3"
+
+_cfg = tomllib.loads(resources.read_text("civiproxy_logs2json", "config.toml"))
+REQUEST_LINE_RE = _cfg["regex"]["request_line"]
+VALUES_LINE_RE = _cfg["regex"]["values_line"]
+CLOSING_LINE_RE = _cfg["regex"]["closing_line"]
diff --git a/civiproxy_logs2json/__main__.py b/src/civiproxy_logs2json/__main__.py
similarity index 68%
rename from civiproxy_logs2json/__main__.py
rename to src/civiproxy_logs2json/__main__.py
index 8e8ae59..7c425b4 100644
--- a/civiproxy_logs2json/__main__.py
+++ b/src/civiproxy_logs2json/__main__.py
@@ -4,21 +4,18 @@ import re
import sys
from typing import TextIO
-REQUEST_LINE_RE = r"^REQUEST FROM (?P(\d{1,3}\.){3}\d{1,3}) ON (?P\d\d\d\d-\d\d-\d\d) (?P