Index: include/defs/vector.h
===================================================================
--- include/defs/vector.h	(revision 55690)
+++ include/defs/vector.h	(working copy)
@@ -445,7 +445,7 @@
 int Vect_write_ascii(FILE *, FILE *, struct Map_info *, int,
                      int, int, char *, int, int,
                      int, const struct cat_list *, const char*,
-                     const char **, int);
+                     const char **, int, int);
 void Vect_write_ascii_head(FILE *, struct Map_info *);
 
 /* Simple Features */
Index: lib/vector/Vlib/ascii.c
===================================================================
--- lib/vector/Vlib/ascii.c	(revision 55690)
+++ lib/vector/Vlib/ascii.c	(working copy)
@@ -5,7 +5,7 @@
  
   Higher level functions for reading/writing/manipulating vectors.
   
-  (C) 2001-2009, 2011-2012 by the GRASS Development Team
+  (C) 2001-2009, 2011-2013 by the GRASS Development Team
   
   This program is free software under the GNU General Public License
   (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -24,6 +24,7 @@
 #define BUFFSIZE 128
 
 static int srch(const void *, const void *);
+static int check_cat(const struct line_cats *, int, int *);
 static int get_cat(const struct line_cats *, const struct cat_list *,
 		   const int *, int, int, int *);
 static void free_col_arrays(int *, char *, char **);
@@ -299,7 +300,8 @@
   \param column_names array of columns to be included to the output or NULL
                  "*" as the first item in the array indicates all columns
   \param header TRUE to print also header
-
+  \param no_cat TRUE to export also features without category
+  
   \return number of written features
   \return -1 on error
 */
@@ -307,7 +309,7 @@
 		     FILE *att, struct Map_info *Map, int ver,
 		     int format, int dp, char *fs, int region_flag, int type,
 		     int field, const struct cat_list *Clist, const char* where,
-		     const char **column_names, int header)
+		     const char **column_names, int header, int no_cat)
 {
     int ltype, ctype, i, cat, n_lines, line, left, right, found;
     double *xptr, *yptr, *zptr, x, y;
@@ -317,7 +319,7 @@
     size_t xsize, ysize, zsize;
     struct Cell_head window;
     struct ilist *fcats;
-    int count;
+    int count, n_skipped;
 
     /* where || columns */
     struct field_info *Fi;
@@ -478,7 +480,9 @@
     Vect_rewind(Map);
 
     line = 0;
+    n_skipped = 0;
     while (TRUE) {
+        cat = - 1;
 	ltype = Vect_read_next_line(Map, Points, Cats);
 	if (ltype == -1 ) {      /* failure */
 	    if (columns) {
@@ -530,7 +534,7 @@
 	    }
 	}
 	
-	if (!found)
+	if (!found && !check_cat(Cats, no_cat, &n_skipped))
 	    continue;
 	
 	if (ver < 5) {
@@ -822,6 +826,9 @@
 	}
     }
 
+    if (n_skipped > 0)
+        G_warning(_("%d features without category skipped"), n_skipped);
+
     Vect_destroy_line_struct(Points);
     Vect_destroy_cats_struct(Cats);
     Vect_destroy_cats_struct(ACats);
@@ -861,8 +868,20 @@
 }
 
 /* check category */
+int check_cat(const struct line_cats *Cats, int no_cats, int *n_skipped)
+{
+    if (Cats->n_cats < 1 && no_cats) {
+        return TRUE;
+    }
+     
+    (*n_skipped)++;
+    
+    return FALSE;
+}
+
+/* get category */
 int get_cat(const struct line_cats *Cats, const struct cat_list *Clist,
-	      const int *cats, int ncats, int field, int *cat)
+            const int *cats, int ncats, int field, int *cat)
 {
     int i;
     
Index: vector/v.category/main.c
===================================================================
--- vector/v.category/main.c	(revision 55690)
+++ vector/v.category/main.c	(working copy)
@@ -7,7 +7,7 @@
  * *
  * * PURPOSE:      Category manipulations
  * *
- * * COPYRIGHT:    (C) 2001-2009 by the GRASS Development Team
+ * * COPYRIGHT:    (C) 2001-2009, 2013 by the GRASS Development Team
  * *
  * *               This program is free software under the
  * *               GNU General Public License (>=v2).
Index: vector/v.out.ascii/args.c
===================================================================
--- vector/v.out.ascii/args.c	(revision 55690)
+++ vector/v.out.ascii/args.c	(working copy)
@@ -10,11 +10,11 @@
 void parse_args(int argc, char **argv,
 		char **input, char**output, int *format, int *dp, char **delim,
 		char **field, char ***columns, char **where, int *region,
-		int *old_format, int *header, char **cats, int *type)
+		int *old_format, int *header, int *no_cat, char **cats, int *type)
 {
     struct Option *input_opt, *output_opt, *format_opt, *dp_opt, *delim_opt,
 	*field_opt, *column_opt, *where_opt, *cats_opt, *type_opt;
-    struct Flag *old_flag, *header_flag, *region_flag;
+    struct Flag *old_flag, *header_flag, *region_flag, *cat_flag;
     
     char *desc;
     
@@ -88,6 +88,13 @@
 	_("Only export points falling within current 3D region (points mode)");
     region_flag->guisection = _("Points");
 
+    cat_flag = G_define_flag();
+    cat_flag->key = 'n';
+    cat_flag->description =
+	_("Also export features without category (not labeled). "
+	  "Otherwise only features with category are exported.");
+    cat_flag->guisection = _("Selection");
+
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
@@ -144,4 +151,5 @@
     *region = region_flag->answer ? TRUE : FALSE;
     *old_format = old_flag->answer ? TRUE : FALSE;
     *header = header_flag->answer ? TRUE : FALSE;
+    *no_cat = cat_flag->answer ? TRUE : FALSE;
 }
Index: vector/v.out.ascii/local_proto.h
===================================================================
--- vector/v.out.ascii/local_proto.h	(revision 55690)
+++ vector/v.out.ascii/local_proto.h	(working copy)
@@ -1,5 +1,5 @@
 /* args.c */
 void parse_args(int, char **,
 		char **, char**, int *, int *, char **,
-		char **, char ***, char **, int *, int *, int *,
+		char **, char ***, char **, int *, int *, int *, int *,
 		char **, int *);
Index: vector/v.out.ascii/main.c
===================================================================
--- vector/v.out.ascii/main.c	(revision 55690)
+++ vector/v.out.ascii/main.c	(working copy)
@@ -34,7 +34,7 @@
 
     FILE *ascii, *att;
     char *input, *output, *delim, **columns, *where, *field_name, *cats;
-    int format, dp, field, ret, region, old_format, header, type;
+    int format, dp, field, ret, region, old_format, header, type, no_cat;
     int ver, pnt;
 
     struct cat_list *clist;
@@ -52,7 +52,7 @@
 
     parse_args(argc, argv, &input, &output, &format, &dp, &delim,
 	       &field_name, &columns, &where, &region, &old_format, &header,
-	       &cats, &type);
+	       &no_cat, &cats, &type);
     
     if (format == GV_ASCII_FORMAT_STD && columns) {
 	G_warning(_("Parameter 'column' ignored in standard mode"));
@@ -144,7 +144,7 @@
 	G_message(_("Fetching data..."));
     ret = Vect_write_ascii(ascii, att, &Map, ver, format, dp, delim,
 			   region, type, field, clist, (const char *)where,
-			   (const char **)columns, header);
+			   (const char **)columns, header, no_cat);
 
     if (ret < 1) {
 	if (format == GV_ASCII_FORMAT_POINT) {
