diff -u src/Knews.ad.orig src/Knews.ad
--- src/Knews.ad.orig	Tue Aug 20 17:40:02 1996
+++ src/Knews.ad	Sun Nov  2 18:07:59 1997
@@ -65,6 +65,16 @@
 Knews.copiousOutput:	exec xterm -e /bin/sh -c '(%C) | less'
 
 
+! What groups should be automaticly subscribed when creating a new
+! newsrc file?  This might be a constant string (the default) an
+! absolute pathname of a file whose contents will be inserted into the
+! new newsrc or a dot to tell Knews to ask the newsserver with the
+! LIST SUBSCRIPTIONS command.
+!Knews.autoSubscribe:	news.answers:\nnews.newusers.questions:\n
+!Knews.autoSubscribe:	/my/path/to/newsrc-template
+!Knews.autoSubscribe:	.
+
+
 ! Stuff for the misc menu on the post popup.
 ! %q expands to quoteString and %Q to quoteQuoteString.
 !
diff -u src/newsrc.c.orig src/newsrc.c
--- src/newsrc.c.orig	Mon Jul 22 16:34:07 1996
+++ src/newsrc.c	Sun Nov  2 17:51:54 1997
@@ -520,20 +520,48 @@
     if (!fp)
 	return;
 
-    if (global.auto_subscribe)
-	if (global.auto_subscribe[0] != '/')
-	    fputs(global.auto_subscribe, fp);
-	else {
-	    FILE	*ng = fopen(global.auto_subscribe, "r");
-
-	    if (!ng)
-		perror(global.auto_subscribe);
-	    else {
-		while ((c = getc(ng)) != EOF)
-		    putc(c, fp);
-		fclose(ng);
-	    }
-	}
+    switch (global.auto_subscribe[0]) {
+
+    case '\0' :         /* empty: do not auto-subscribe any group. */
+        break;
+
+    case '.' :          /* dot: ask server via LIST SUBSCRIPTIONS. */
+      {
+        char    *buffer;
+        long    status;
+
+        buffer = server_comm(main_server, "LIST SUBSCRIPTIONS\r\n", False);
+        if (!buffer)
+          break;
+        sscanf(buffer, "%ld", &status);
+        if (status != NNTP_OK_GROUPS)
+          break;        /* In case of errors, just leave the newsrc empty. */
+
+        while ((buffer = server_read(main_server)) && !IS_DOT(buffer)) {
+          fputs(buffer, fp);
+          fputs(":\n", fp);
+        }
+
+        break;
+      }
+
+    case '/' :          /* filename: copy file content */
+      {
+        FILE    *ng = fopen(global.auto_subscribe, "r");
+
+        if (!ng)
+          perror(global.auto_subscribe);
+        else {
+          while ((c = getc(ng)) != EOF)
+            putc(c, fp);
+          fclose(ng);
+        }
+
+        break;
+      }
+    default :           /* string: copy string content */
+        fputs(global.auto_subscribe, fp);
+    }
 
     fclose(fp);
 }

