diff --git a/config.py.example b/config.py.example
index 4de9e5bfb32cd20313b0f22a1918c5319b2e2b17..85c937ba913a16a015fda381c60f610e3e31dfee 100644
--- a/config.py.example
+++ b/config.py.example
@@ -42,6 +42,7 @@ Get involved with Etherpad at http://etherpad.org
 
 # wiki (optional)
 WIKI_ACTIVE = True
+WIKI_TYPE = "MEDIAWIKI"
 WIKI_API_URL = "https://wiki.example.com/wiki/api.php"
 WIKI_ANONYMOUS = False
 WIKI_USER = "user"
diff --git a/shared.py b/shared.py
index 708db8031acce47a96d294ee1dd551bfad8da69f..3e091c4303424a19004383c6715b722aea7564b4 100644
--- a/shared.py
+++ b/shared.py
@@ -3,6 +3,7 @@ from flask import session, redirect, url_for, request
 
 import re
 from functools import wraps
+from enum import Enum
 
 import config
 
@@ -128,3 +129,7 @@ DATE_KEY = "Datum"
 START_TIME_KEY = "Beginn"
 END_TIME_KEY = "Ende"
 KNOWN_KEYS = [DATE_KEY, START_TIME_KEY, END_TIME_KEY]
+
+class WikiType(Enum):
+    MEDIAWIKI = 0
+    DOKUWIKI = 1
diff --git a/tasks.py b/tasks.py
index 4ffd6e88d7ac3063fdbf3951be809eb3a8b5302d..e0efdeb8948a5aa033f4bdd84bebf13ea20fdd90 100644
--- a/tasks.py
+++ b/tasks.py
@@ -7,11 +7,12 @@ import tempfile
 from datetime import datetime
 import traceback
 from copy import copy
+import xmlrpc.client
 
 from models.database import Document, Protocol, Error, Todo, Decision, TOP, DefaultTOP, MeetingReminder, TodoMail, DecisionDocument, TodoState, OldTodo, DecisionCategory
 from models.errors import DateNotMatchingException
 from server import celery, app
-from shared import db, escape_tex, unhyphen, date_filter, datetime_filter, date_filter_long, date_filter_short, time_filter, class_filter, KNOWN_KEYS
+from shared import db, escape_tex, unhyphen, date_filter, datetime_filter, date_filter_long, date_filter_short, time_filter, class_filter, KNOWN_KEYS, WikiType
 from utils import mail_manager, encode_kwargs, decode_kwargs, add_line_numbers, set_etherpad_text, get_etherpad_text, footnote_hash, parse_datetime_from_string
 from protoparser import parse, ParserException, Element, Content, Text, Tag, Remark, Fork, RenderType
 from wiki import WikiClient, WikiException
@@ -464,16 +465,29 @@ def parse_protocol_async_inner(protocol, encoded_kwargs):
         compile(latex_source, protocol, show_private=show_private, maxdepth=maxdepth)
 
     if protocol.protocoltype.use_wiki:
+        wiki_type = WikiType[getattr(config, "WIKI_TYPE", "MEDIAWIKI")]
+        wiki_template = {
+            WikiType.MEDIAWIKI: "protocol.wiki",
+            WikiType.DOKUWIKI: "protocol.dokuwiki",
+        }
+        wiki_render_type = {
+            WikiType.MEDIAWIKI: RenderType.wikitext,
+            WikiType.DOKUWIKI: RenderType.dokuwiki,
+        }
         show_private = not protocol.protocoltype.wiki_only_public
-        wiki_source = wikienv.get_template("protocol.wiki").render(
-            render_type=RenderType.wikitext,
+        wiki_source = wikienv.get_template(wiki_template[wiki_type]).render(
+            render_type=wiki_render_type[wiki_type],
             show_private=show_private,
             **render_kwargs[show_private]
         ).replace("\n\n\n", "\n\n")
-        wiki_infobox_source = wikienv.get_template("infobox.wiki").render(
-            protocoltype=protocol.protocoltype)
-        push_to_wiki(protocol, wiki_source, wiki_infobox_source,
-            "Automatisch generiert vom Protokollsystem 3.0")
+        if wiki_type == WikiType.MEDIAWIKI:
+            wiki_infobox_source = wikienv.get_template("infobox.wiki").render(
+                protocoltype=protocol.protocoltype)
+            push_to_wiki(protocol, wiki_source, wiki_infobox_source,
+                "Automatisch generiert vom Protokollsystem 3.0")
+        elif wiki_type == WikiType.DOKUWIKI:
+            push_to_dokuwiki(protocol, wiki_source,
+                "Automatisch generiert vom Protokollsystem 3.0")
     protocol.done = True
     db.session.commit()
 
@@ -488,13 +502,29 @@ def push_to_wiki_async(protocol_id, content, infobox_content, summary):
             wiki_client.edit_page(
                 title=protocol.protocoltype.get_wiki_infobox_title(),
                 content=infobox_content,
-                summary="Automatisch generiert vom Protokollsystem 3.")
+                summary=summary)
             wiki_client.edit_page(
                 title=protocol.get_wiki_title(),
                 content=content,
-                summary="Automatisch generiert vom Protokollsystem 3.")
+                summary=summary)
         except WikiException as exc:
             error = protocol.create_error("Pushing to Wiki", "Pushing to Wiki failed.", str(exc))
+            db.session.add(error)
+            db.session.commit()
+
+def push_to_dokuwiki(protocol, content, summary):
+    push_to_dokuwiki_async.delay(protocol.id, content, summary)
+
+@celery_task
+def push_to_dokuwiki_async(protocol_id, content, summary):
+    protocol = Protocol.query.filter_by(id=protocol_id).first()
+    with xmlrpc.client.ServerProxy(config.WIKI_API_URL) as proxy:
+        if not proxy.wiki.putPage(protocol.get_wiki_title(),
+            content, {"sum": "Automatisch generiert vom Protokollsystem 3."}):
+            error = protocol.create_error("Pushing to Wiki",
+                "Pushing to Wiki failed." "")
+            db.session.add(error)
+            db.session.commit()
 
 def compile(content, protocol, show_private, maxdepth):
    compile_async.delay(content, protocol.id, show_private=show_private, maxdepth=maxdepth)
@@ -594,6 +624,8 @@ def print_file_async(filename, protocol_id):
         protocol = Protocol.query.filter_by(id=protocol_id).first()
         if protocol.protocoltype.printer is None:
             error = protocol.create_error("Printing", "No printer configured.", "You don't have any printer configured for the protocoltype {}. Please do so before printing a protocol.".format(protocol.protocoltype.name))
+            db.session.add(error)
+            db.session.commit()
         try:
             command = [
                 "/usr/bin/lpr",
diff --git a/templates/protocol.dokuwiki b/templates/protocol.dokuwiki
new file mode 100644
index 0000000000000000000000000000000000000000..24752de15ce2a9ba52a5af4dc9c4a2b4e810ab5c
--- /dev/null
+++ b/templates/protocol.dokuwiki
@@ -0,0 +1,15 @@
+== Beschlüsse ==
+<env> if protocol.decisions|length > 0 </env>
+    <env> for decision in protocol.decisions </env>
+* <var>decision.content</var>
+    <env> endfor </env>
+<env> else </env>
+* keine Beschlüsse
+<env> endif </env>
+
+<env> for top in tree.children </env>
+    <env> if top|class == "Fork" </env>
+<var>top.render(render_type=render_type, level=0, show_private=show_private, protocol=protocol)</var>
+    <env> endif </env>
+<env> endfor </env>
+