--- palaver.py	2012-03-19 11:44:46.000000000 +0100
+++ palaver_plugin.py	2012-07-19 03:53:27.782461489 +0200
@@ -1,7 +1,40 @@
-from twisted.scripts.mktap import _tapHelper
- 
-Palaver = _tapHelper(
-                "Palaver",
-                "palaver.tap",
-                "A multi-user chat xmpp/jabber component.",
-                "palaver")
+from zope.interface import implements
+from twisted.python import usage
+from twisted.plugin import IPlugin
+from twisted.application.service import IServiceMaker
+
+# Due to the directory layout, and the fact that plugin directories aren't
+# modules (no __init__.py), this file is named something other than palaver.py,
+# to ensure that this import pulls in the right module.
+import palaver
+
+class Options(usage.Options):
+    optParameters = [
+        ('rhost', None, None),
+        ('rport', None, None),
+        ('secret', None, None),
+        ('backend', None, 'dir'),
+        ('spool', None, None),
+        ('admin', None, 1),
+        ('create', None, 1),
+        ('dbname', None, 'muc'),
+        ('dbuser', None, 'muc'),
+        ('dbhostname', None, None),
+        ('log', 'l', './html/logs/'),
+        ('config', 'c', 'config.xml')
+    ]
+
+    optFlags = [
+        ('verbose', 'v', 'Show traffic'),
+    ]
+
+class ServiceFactory(object):
+    implements(IServiceMaker, IPlugin)
+    tapname = "palaver"
+    description = "A multi-user chat xmpp/jabber component."
+    options = Options
+
+    def makeService(self, options):
+        return palaver.makeService(options)
+
+service = ServiceFactory()