diff -ru src.orig/xget-lex.c src/xget-lex.c
--- src.orig/xget-lex.c	Fri May  1 06:45:12 1998
+++ src/xget-lex.c	Fri Apr 27 16:05:06 2001
@@ -78,17 +78,18 @@
 
 enum token_type_ty
 {
-  token_type_character_constant,
-  token_type_eof,
-  token_type_eoln,
-  token_type_hash,
-  token_type_lp,
-  token_type_comma,
-  token_type_name,
-  token_type_number,
-  token_type_string_literal,
-  token_type_symbol,
-  token_type_white_space
+  token_type_character_constant = 0,
+  token_type_eof = 1,
+  token_type_eoln = 2,
+  token_type_hash = 3,
+  token_type_lp = 4,
+  token_type_rp = 5,
+  token_type_comma = 6,
+  token_type_name = 7,
+  token_type_number = 8,
+  token_type_string_literal = 9,
+  token_type_symbol = 10,
+  token_type_white_space = 11
 };
 typedef enum token_type_ty token_type_ty;
 
@@ -941,6 +942,10 @@
       tp->type = token_type_lp;
       return;
 
+    case ')':
+      tp->type = token_type_rp;
+      return;
+
     case ',':
       tp->type = token_type_comma;
       return;
@@ -1236,6 +1241,11 @@
 	  tp->type = xgettext_token_type_lp;
 	  return;
 
+	case token_type_rp:
+	  last_non_comment_line = newline_count;
+	  tp->type = xgettext_token_type_rp;
+	  return;
+
 	case token_type_comma:
 	  last_non_comment_line = newline_count;
 
diff -ru src.orig/xget-lex.h src/xget-lex.h
--- src.orig/xget-lex.h	Fri May  1 06:45:23 1998
+++ src/xget-lex.h	Fri Apr 27 16:05:06 2001
@@ -22,13 +22,14 @@
 
 enum xgettext_token_type_ty
 {
-  xgettext_token_type_eof,
-  xgettext_token_type_keyword1,
-  xgettext_token_type_keyword2,
-  xgettext_token_type_lp,
-  xgettext_token_type_comma,
-  xgettext_token_type_string_literal,
-  xgettext_token_type_symbol
+  xgettext_token_type_eof = 0,
+  xgettext_token_type_keyword1 = 1,
+  xgettext_token_type_keyword2 = 2,
+  xgettext_token_type_lp = 3,
+  xgettext_token_type_rp = 4,
+  xgettext_token_type_comma = 5,
+  xgettext_token_type_string_literal = 6,
+  xgettext_token_type_symbol = 7
 };
 typedef enum xgettext_token_type_ty xgettext_token_type_ty;
 
diff -ru src.orig/xgettext.c src/xgettext.c
--- src.orig/xgettext.c	Wed Apr 29 18:57:50 1998
+++ src/xgettext.c	Fri Apr 27 16:33:46 2001
@@ -835,7 +835,8 @@
      int is_cpp_file;
 {
   int state;
-
+  char *msgid = 0;
+  
   /* Inform scanner whether we have C++ files or not.  */
   if (is_cpp_file)
     xgettext_lex_cplusplus ();
@@ -861,8 +862,12 @@
 	State 3 = seen one of our keywords with string in second parameter
 	State 4 = was in state 3 and now saw a left paren
 	State 5 = waiting for comma after being in state 4
-	State 6 = saw comma after being in state 5  */
+	State 6 = saw comma after being in state 5  
+	State 7 = after comma and being in state 2
+        State 8 = after string and being in state 7
+     */
      xgettext_lex (&token);
+
      switch (token.type)
        {
        case xgettext_token_type_keyword1:
@@ -886,18 +891,62 @@
 	     state = 0;
 	   }
 	 continue;
+       
+       case xgettext_token_type_rp:
+	 if (state == 2 || state == 8) {
+	   token.string = strdup(msgid);
+	   remember_a_message (mlp, &token);
+	   free(msgid);
+	   msgid = 0;
+	   state = 0;
+	 }
+	 continue;   
 
        case xgettext_token_type_comma:
-	 state = state == 5 ? 6 : 0;
+	 switch (state) {
+	 case 5:
+	   state = 6;
+	   break;
+	 case 2:
+           state = 7;
+	   break;
+         case 8: {
+	     char *newstring = (char*)malloc(strlen(msgid) + 2);
+	     strcpy(newstring, "_n:");
+	     strcat(newstring, msgid + 2);
+	     free(msgid);
+	     token.string = newstring;
+	     remember_a_message (mlp, &token);
+	     msgid = 0;
+	     state = 0;
+	     break;
+	 }
+	 default:
+	   state = 0;
+	   break;
+	 }
 	 continue;
 
        case xgettext_token_type_string_literal:
 	 if (extract_all || state == 2 || state == 6)
 	   {
-	     remember_a_message (mlp, &token);
-	     state = 0;
+	     if (msgid)
+	       free(msgid);
+	     msgid = strdup(token.string);
+	     //	     state = 0;
 	   }
-	 else
+	 else if (state == 7)
+	   {
+	     if (msgid) {
+	       char *newstring = (char*)malloc(strlen(msgid) + strlen(token.string) + 20);
+	       sprintf(newstring, "_: %s\n%s", msgid, token.string);
+	       free(msgid);
+	       free(token.string);
+	       token.string = msgid = newstring;
+	       state = 8;
+	     }
+	   }
+	 else 
 	   {
 	     free (token.string);
 	     state = (state == 4 || state == 5) ? 5 : 0;
@@ -905,8 +954,8 @@
 	 continue;
 
        case xgettext_token_type_symbol:
-	 state = (state == 4 || state == 5) ? 5 : 0;
-	 continue;
+	   state = (state == 4 || state == 5) ? 5 : 0;
+	   continue;
 
        default:
 	 state = 0;
@@ -915,6 +964,7 @@
        case xgettext_token_type_eof:
 	 break;
        }
+     
      break;
    }