diff -Naur rrdtool-1.4.2-orig/src/rrd_create.c rrdtool-1.4.2/src/rrd_create.c
--- rrdtool-1.4.2-orig/src/rrd_create.c	2009-11-15 11:54:23.000000000 +0000
+++ rrdtool-1.4.2/src/rrd_create.c	2010-01-16 15:12:28.000000000 +0000
@@ -13,6 +13,7 @@
 #include "rrd_hw.h"
 
 #include "rrd_is_thread_safe.h"
+static int opt_no_overwrite = 0;
 
 #ifdef WIN32
 # include <process.h>
@@ -39,6 +40,7 @@
     struct option long_options[] = {
         {"start", required_argument, 0, 'b'},
         {"step", required_argument, 0, 's'},
+        {"no-overwrite", no_argument, 0, 'O'},
         {0, 0, 0, 0}
     };
     int       option_index = 0;
@@ -54,7 +56,7 @@
     opterr = 0;         /* initialize getopt */
 
     while (1) {
-        opt = getopt_long(argc, argv, "b:s:", long_options, &option_index);
+        opt = getopt_long(argc, argv, "Ob:s:", long_options, &option_index);
 
         if (opt == EOF)
             break;
@@ -90,6 +92,10 @@
             pdp_step = long_tmp;
             break;
 
+        case 'O':
+            opt_no_overwrite = 1;
+	    break;
+
         case '?':
             if (optopt != 0)
                 rrd_set_error("unknown option '%c'", optopt);
@@ -679,6 +685,10 @@
     rrd_t     rrd_dn;
     unsigned  rrd_flags = RRD_READWRITE | RRD_CREAT;
 
+    if (opt_no_overwrite) {
+      rrd_flags |= RRD_EXCL ;
+    }
+
     unkn_cnt = 0;
     for (i = 0; i < rrd->stat_head->rra_cnt; i++)
         unkn_cnt += rrd->stat_head->ds_cnt * rrd->rra_def[i].row_cnt;
diff -Naur rrdtool-1.4.2-orig/src/rrd_open.c rrdtool-1.4.2/src/rrd_open.c
--- rrdtool-1.4.2-orig/src/rrd_open.c	2009-11-15 11:54:23.000000000 +0000
+++ rrdtool-1.4.2/src/rrd_open.c	2010-01-16 15:12:28.000000000 +0000
@@ -172,6 +172,9 @@
         if (rdwr & RRD_CREAT) {
             flags |= (O_CREAT | O_TRUNC);
         }
+        if (rdwr & RRD_EXCL) {
+            flags |= O_EXCL;
+        }
     }
     if (rdwr & RRD_READAHEAD) {
 #ifdef MAP_POPULATE
diff -Naur rrdtool-1.4.2-orig/src/rrd_tool.c rrdtool-1.4.2/src/rrd_tool.c
--- rrdtool-1.4.2-orig/src/rrd_tool.c	2009-11-15 11:54:23.000000000 +0000
+++ rrdtool-1.4.2/src/rrd_tool.c	2010-01-16 15:12:28.000000000 +0000
@@ -65,6 +65,7 @@
         N_("* create - create a new RRD\n\n"
            "\trrdtool create filename [--start|-b start time]\n"
            "\t\t[--step|-s step]\n"
+           "\t\t[--no-overwrite|-O]\n"
            "\t\t[DS:ds-name:DST:dst arguments]\n"
            "\t\t[RRA:CF:cf arguments]\n\n");
 
diff -Naur rrdtool-1.4.2-orig/src/rrd_tool.h rrdtool-1.4.2/src/rrd_tool.h
--- rrdtool-1.4.2-orig/src/rrd_tool.h	2009-11-15 11:54:23.000000000 +0000
+++ rrdtool-1.4.2/src/rrd_tool.h	2010-01-16 15:12:28.000000000 +0000
@@ -107,6 +107,7 @@
 #define RRD_CREAT       (1<<2)
 #define RRD_READAHEAD   (1<<3)
 #define RRD_COPY        (1<<4)
+#define RRD_EXCL        (1<<5)
 
     enum cf_en cf_conv(
     const char *string);

