diff --git a/src/main/java/info/textgrid/services/aggregator/epub/EPUB.java b/src/main/java/info/textgrid/services/aggregator/epub/EPUB.java
index 8f73e453028b0b90ff33a0d7c9806428107d528d..5117039ee04488ea4dfd842a56c6a6b0be8cce5f 100644
--- a/src/main/java/info/textgrid/services/aggregator/epub/EPUB.java
+++ b/src/main/java/info/textgrid/services/aggregator/epub/EPUB.java
@@ -36,6 +36,8 @@
 import javax.ws.rs.core.Response.Status;
 import javax.xml.transform.stream.StreamSource;
 
+import org.apache.cxf.jaxrs.model.wadl.Description;
+
 import net.sf.saxon.s9api.Processor;
 import net.sf.saxon.s9api.SaxonApiException;
 import net.sf.saxon.s9api.XsltCompiler;
@@ -46,6 +48,7 @@
 import com.google.common.io.InputSupplier;
 
 @Path("/epub")
+@Description("Converts the given TEI object or the aggregation of TEI objects to an E-Book in EPUB format")
 public class EPUB {
 
 	private static final String EPUB_XSL = "/WEB-INF/stylesheets/epub.xsl";
@@ -96,9 +99,11 @@ public EPUB(final ITextGridRep repository) {
 	@GET
 	@Path(value = "/{object}")
 	@Produces(value = "application/epub+zip")
-	public Response get(@PathParam("object") final URI uri,
-			@QueryParam("stylesheet") final URI xsluri,
-			@QueryParam("sid") final String sid)
+	public Response get(
+			@Description("The TextGrid URI of the object to convert, either a TEI object or an aggregation of TEI (and maybe other) objects")
+			@PathParam("object") final URI uri,
+			@Description("URL of an alternative stylesheet to use. Must be compatible.") @QueryParam("stylesheet") final URI xsluri,
+			@Description("Session ID for accessing protected objects") @QueryParam("sid") final String sid)
 					throws ObjectNotFoundFault, MetadataParseFault, IoFault, AuthFault,
 					ProtocolNotImplementedFault {
 		logger.fine("EPUB called for root object: " + uri);
diff --git a/src/main/java/info/textgrid/services/aggregator/html/HTML.java b/src/main/java/info/textgrid/services/aggregator/html/HTML.java
index f80df4d4fcd0076c886b31d816db9b4e8aece8dc..44d76ac653b2a570e8724e9e6d064a414b588abb 100644
--- a/src/main/java/info/textgrid/services/aggregator/html/HTML.java
+++ b/src/main/java/info/textgrid/services/aggregator/html/HTML.java
@@ -34,6 +34,8 @@
 import javax.ws.rs.core.StreamingOutput;
 import javax.xml.transform.stream.StreamSource;
 
+import org.apache.cxf.jaxrs.model.wadl.Description;
+
 import net.sf.saxon.s9api.Processor;
 import net.sf.saxon.s9api.QName;
 import net.sf.saxon.s9api.SaxonApiException;
@@ -45,6 +47,7 @@
 import com.google.common.io.FileBackedOutputStream;
 
 @Path("/html")
+@Description("Creates an HTML representation of the given TEI document, or aggregation of TEI documents. This is currently extremely experimental and probably broken.")
 public class HTML {
 
 
@@ -86,9 +89,14 @@ public HTML(final ITextGridRep repository) throws IOException {
 	@GET
 	@Path(value = "/{object}")
 	@Produces(value = "text/html")
-	public StreamingOutput get(@PathParam("object") final URI uri,
+	public StreamingOutput get(
+			@Description("The TextGrid URI of the TEI document or aggregation to transform")
+			@PathParam("object") final URI uri,
+			@Description("If given, an alternative XSLT stylesheet to use")
 			@QueryParam("stylesheet") final URI xsluri,
+			@Description("Session ID to access protected resources")
 			@QueryParam("sid") final String sid,
+			@Description("URL of the CSS that should be referenced in the HTML that is created")
 			@QueryParam("css") final URI css) throws ObjectNotFoundFault,
 			MetadataParseFault, IoFault, AuthFault,
 			ProtocolNotImplementedFault, WebApplicationException, IOException,
diff --git a/src/main/java/info/textgrid/services/aggregator/pdf/PDF.java b/src/main/java/info/textgrid/services/aggregator/pdf/PDF.java
index f84d26680028d71ed4d8ff914d31a5dc0ed269b4..267301d9e6a741b920757fcd8ad53081b2c2b36a 100644
--- a/src/main/java/info/textgrid/services/aggregator/pdf/PDF.java
+++ b/src/main/java/info/textgrid/services/aggregator/pdf/PDF.java
@@ -37,11 +37,16 @@
 import net.sf.saxon.s9api.XsltTransformer;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.cxf.jaxrs.model.wadl.Description;
 
 import com.google.common.io.FileBackedOutputStream;
 import com.google.common.io.Files;
 
 @Path("/pdf")
+@Description("Generates a (default) PDF representation of a TEI document. " +
+		"This is currently highly experimental, and it requires LaTeX and " +
+		"the TEI stylesheets to be installed on the machine onto which " +
+		"this service is deployed.")
 public class PDF {
 
 	final Logger logger = Logger.getLogger("info.textgrid.services.aggregator");
@@ -64,8 +69,9 @@ public PDF(final ITextGridRep repository) {
 	@GET
 	@Path("/{uri}")
 	@Produces("application/pdf")
-	public Response get(@PathParam("uri") final URI uri,
-			@QueryParam("sid") final String sid) {
+	public Response get(
+			@Description("The TextGrid URI of a TEI document to transform") @PathParam("uri") final URI uri,
+			@Description("Session ID to access protected resources") @QueryParam("sid") final String sid) {
 		final File workingDir = Files.createTempDir();
 		try {
 
diff --git a/src/main/java/info/textgrid/services/aggregator/teicorpus/TEICorpus.java b/src/main/java/info/textgrid/services/aggregator/teicorpus/TEICorpus.java
index 9acade45269fedefea14c56378f9156a5b699096..85ba3a3cc7c81565049b129e6e000ae5cfacb1e7 100644
--- a/src/main/java/info/textgrid/services/aggregator/teicorpus/TEICorpus.java
+++ b/src/main/java/info/textgrid/services/aggregator/teicorpus/TEICorpus.java
@@ -27,6 +27,10 @@
 import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.core.Response.Status;
 
+import org.apache.cxf.jaxrs.model.wadl.Description;
+import org.apache.cxf.jaxrs.model.wadl.Descriptions;
+import org.apache.cxf.jaxrs.model.wadl.DocTarget;
+
 /*
  * Generating a TEIcorpus document from a (single) aggregation
  * 
@@ -51,6 +55,7 @@
  * We could use this, so it's only one large request per aggregation. Should be
  * reasonably fast.
  */
+@Description("Creates a TEI corpus of all the TEI documents (recursively) aggregated by the given aggregation")
 @Path("/teicorpus")
 public class TEICorpus {
 
@@ -66,10 +71,14 @@ public TEICorpus(final ITextGridRep repository) {
 	@GET
 	@Path(value="/{aggregation}")
 	@Produces("text/xml")
-	public Response get(@PathParam("aggregation") final URI uri,
-			@QueryParam("attach") @DefaultValue("true") final boolean attach,
-			@QueryParam("flat") @DefaultValue("false") final boolean flat,
-			@QueryParam("sid") final String sid)
+	@Descriptions({
+			@Description(target=DocTarget.METHOD, value="Creates a TEI corpus of all the TEI documents (recursively) aggregated by the given aggregation"),
+			@Description(target=DocTarget.RETURN, value="TEI corpus document")
+	})
+	public Response get(@Description("TextGrid URI of the root aggregation") @PathParam("aggregation") final URI uri,
+			@Description("Whether to generate a Content-Disposition: attachment header") @QueryParam("attach") @DefaultValue("true") final boolean attach,
+			@Description("If true, no intermediate TEI corpus documents will be generated for intermediate aggregations, hierarchical structure will be lost") @QueryParam("flat") @DefaultValue("false") final boolean flat,
+			@Description("Session id for accessing restricted resources") @QueryParam("sid") final String sid)
 					throws URISyntaxException, ObjectNotFoundFault, MetadataParseFault, IoFault, AuthFault {
 		logger.fine("TEIcorpus called for root aggregation: " + uri);
 		final TGCrudService crud = repository.getCRUDService();