diff --git a/refdoc/presentation/make_html.pike b/refdoc/presentation/make_html.pike
index 4c5dbd79d2a6504b52d76bf7b72f68cdade89101..5efbe1b4fec843159355a7d1e30097e46777e92d 100644
--- a/refdoc/presentation/make_html.pike
+++ b/refdoc/presentation/make_html.pike
@@ -761,7 +761,8 @@ string parse_type(Node n, void|string debug) {
 
   case "type":
     ret += "<font color='#202020'>type</font>";
-    if (n->count_children() && (c = get_first_element(n))) {
+    if (n->count_children() && (c = get_first_element(n)) &&
+	(c->get_any_name() != "mixed")) {
       ret += "(" + parse_type(c) + ")";
     }
     break;
@@ -793,15 +794,16 @@ string parse_type(Node n, void|string debug) {
 
   case "function":
     ret += "<font color='#202020'>function</font>";
-    c = n->get_first_element("argtype");
+    array(Node) args = n->get_elements("argtype");
     d = n->get_first_element("returntype");
     // Doing different than the XSL here. Must both
     // argtype and returntype be defined?
-    if(c || d) {
+    if(args || d) {
       ret += "(";
-      if(c) ret += map(c->get_children(), parse_type)*", ";
+      if(args) ret += map(args->get_children() * ({}), parse_type)*", ";
       ret += ":";
       if(d) ret += parse_type( get_first_element(d) );
+      else ret += "<font color='#202020'>void</font>";
       ret += ")";
     }
     break;