diff --git a/.gitignore b/.gitignore
index 92afa22fd84964797c24ac50c6a69227c2534b99..1d63d7731b45e428eed05875429b2692afc056c2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 __pycache__/
 venv/
+*.sw[po]
diff --git a/packages.yml b/packages.yml
index ff330245afcaebd1c2729f7b628f87b9d8bc61ac..d65db58ec54034877dcf1b5a0a4dcc0c3095fb82 100644
--- a/packages.yml
+++ b/packages.yml
@@ -1,3 +1,8 @@
----
-- name: adcli
-  patch_dir: patches/adcli
+maintainer:
+  name: FSMPI Admin-Team
+  mail: admin@fsmpi.rwth-aachen.de
+packages:
+  - name: adcli
+    patch_dir: patches/adcli
+    version: 0.8.2-1.1-fsmpi
+    changelog: Apply the unreleased upstream-patches, fixing RT#100
diff --git a/scripts/build.py b/scripts/build.py
index cbb92a8329e0119cc3489decd28a989b0a4855cc..4a7113fdeef54f5247db13e6e3cdfbe4d127bea0 100755
--- a/scripts/build.py
+++ b/scripts/build.py
@@ -1,7 +1,11 @@
 #!/usr/bin/env python3
 
+import locale
+locale.setlocale(locale.LC_ALL, "en_US.UTF-8")
+
 import os
 import subprocess as sp
+import re
 import tempfile
 import yaml
 
@@ -11,17 +15,91 @@ def load_config():
         return yaml.load(config_file)
 
 
-def build_package(repo_dir, name, patch_dir=None):
-    with tempfile.TemporaryDirectory() as tempdir:
-        os.chdir(tempdir)
-        result = sp.run(
-            ["apt-get", "source", name],
-            check=True)
+PKG_NAME_PATTERN = r"[a-zA-Z0-9.+-]+"
+EPOCH_PATTERN = r"[0-9]+:"
+UPSTREAM_VERSION_PATTERN = r"[a-zA-Z0-9.+-:]+"
+DEBIAN_VERSION_PATTERN = r"[a-zA-Z0-9.+~]+"
+EXTRACT_PATTERN = (r"extracting (?P<name>{pkg_name}) in (?P<dir>{pkg_name}-{version})"
+    .format(pkg_name=PKG_NAME_PATTERN, version=UPSTREAM_VERSION_PATTERN))
+
+
+def run_checked(command, **kwargs):
+    try:
+        return sp.run(
+            command, check=True,
+            stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True,
+            **kwargs)
+    except sp.CalledProcessError as error:
+        print(error.stderr)
+        raise
     
 
+def build_package(repo_dir, name, patch_dir=None, version=None, changelog=None):
+    with tempfile.TemporaryDirectory(dir=os.path.abspath(".")) as tempdir:
+        os.chdir(tempdir)
+        result = run_checked(["apt-get", "source", name])
+        source_dir_candidates = [
+            line for line in result.stdout.splitlines() if "extracting" in line]
+        if len(source_dir_candidates) != 1:
+            raise ValueError("Got inconclusive candidate directories: {}".format(
+                source_dir_candidates))
+        source_dir_match = re.search(EXTRACT_PATTERN, source_dir_candidates[0])
+        if source_dir_match is None:
+            raise ValueError("Cannot get extraction directory from {}".format(
+                source_dir_candidates[0]))
+        pkg_dir = source_dir_match.group("dir")
+        pkg_name = source_dir_match.group("name")
+        if pkg_name != name:
+            raise ValueError(
+                "Extracted package {} is not expected package {}".format(
+                    pkg_name, name))
+
+        debian_workdir = os.path.join(tempdir, pkg_dir, "debian")
+        os.chdir(debian_workdir)
+        if patch_dir is not None:
+            abs_patch_dir = os.path.join(repo_dir, patch_dir)
+            for patch in sorted(os.listdir(abs_patch_dir)):
+                patch_file = os.path.join(abs_patch_dir, patch)
+                run_checked(["quilt", "import", patch_file])
+
+        command = ["debchange", "--preserve"]
+        if version is None:
+            command.append("--nmu")
+        else:
+            command.extend(["--newversion", version])
+        def _get_log_entries():
+            if changelog:
+                yield changelog
+            yield "Non-maintainer upload"
+        for entry in _get_log_entries():
+            run_checked(command + [entry])
+
+        command = ["debuild", "-b", "-uc", "-us"]
+        run_checked(command)
+
+        deb_packages =  [
+            filename
+            for filename in os.listdir(tempdir)
+            if filename.endswith(".deb")
+        ]
+        print(deb_packages)
+        
+        #input("Waiting for you, do your thing…")
+
+
 def main():
     repo_dir = os.getcwd()
-    for package in load_config():
+    config = load_config()
+    maintainer = config.get("maintainer", None)
+    if maintainer is not None:
+        name = maintainer.get("name", None)
+        mail = maintainer.get("mail", None)
+        if name:
+            os.environ["DEBFULLNAME"] = name
+        if mail:
+            os.environ["DEBEMAIL"] = mail
+
+    for package in config["packages"]:
         build_package(repo_dir=repo_dir, **package)
         os.chdir(repo_dir)