diff --git a/NEW-STRUCTURE.md b/NEW-STRUCTURE.md
new file mode 100644
index 0000000000000000000000000000000000000000..1ff237c8a5012564fe2251201924ea081037f432
--- /dev/null
+++ b/NEW-STRUCTURE.md
@@ -0,0 +1,32 @@
+Goals
+=====
+
+Basically, we would like to have an interface as follows:
+
+* the REST interface should live in a small single class that then instantiates
+  the workers, so we could also setup a SOAP interface if we want
+* most of the argument handling etc. should be the same for all types of
+  export, so reuse it
+* usually, request processing contains of the following steps:
+
+	1. argument parsing & (offline) validation
+	2. argument validation (online), e.g. check whether referred objects
+	   actually exist. Usually this involves fetching at least one object's
+	   metadata in order to determine its format & potentially title for
+	   the results.
+	3. Result header generation
+	4. Result body generation.
+
+    The first three steps should be as fast as possible, i.e. as few repository
+    interaction as possible, so we can reply fast. The fourth step will usually
+    be deferred to the time data is streamed (StreamingOutput's write method)
+
+* There are typical recurring tasks:
+
+	* caching of stylesheets
+	* calculating of Cache headers
+	* processing trees of documents
+	* generating filenames both for the result & for parts of it
+	* generating of TEIcorpus documents
+	* rewriting links
+	*