diff --git a/libnautilus-private/nautilus-file-operations.c b/libnautilus-private/nautilus-file-operations.c
index bb06540..8afb852 100644
--- a/libnautilus-private/nautilus-file-operations.c
+++ b/libnautilus-private/nautilus-file-operations.c
@@ -5764,7 +5764,9 @@ create_job (GIOSchedulerJob *io_job,
 	CommonJob *common;
 	int count;
 	GFile *dest;
+	GFile *parent;
 	char *filename, *filename2, *new_filename;
+	char *basename, *parent_path, *templates_directory;
 	char *dest_fs_type;
 	GError *error;
 	gboolean res;
@@ -5806,15 +5808,34 @@ create_job (GIOSchedulerJob *io_job,
 	if (filename == NULL) {
 		if (job->make_dir) {
 			/* localizers: the initial name of a new folder  */
-			filename = g_strdup (_("untitled folder"));
+			filename = g_strdup (_("Untitled Folder"));
 			filename_is_utf8 = TRUE; /* Pass in utf8 */
 		} else {
 			if (job->src != NULL) {
-				filename = g_file_get_basename (job->src);
+				parent = g_file_get_parent (job->src);
+				parent_path = NULL;
+				basename = NULL;
+
+				if (parent) {
+					parent_path = g_file_get_path (parent);
+					g_object_unref (parent);
+				}
+				templates_directory = nautilus_get_templates_directory ();
+				if (g_strcmp0 ((const char *)parent_path, (const char *)templates_directory) == 0) {
+					/* localizers: the initial name of a new template document */
+					basename = g_file_get_basename (job->src);
+					filename = g_strdup_printf (_("Untitled %s"), basename);
+				} else {
+					filename = g_file_get_basename (job->src);
+				}
+				
+				g_free (basename);
+				g_free (parent_path);
+				g_free (templates_directory);
 			}
 			if (filename == NULL) {
-				/* localizers: the initial name of a new empty file */
-				filename = g_strdup (_("new file"));
+				/* localizers: the initial name of a new empty document */
+				filename = g_strdup (_("Untitled Document"));
 				filename_is_utf8 = TRUE; /* Pass in utf8 */
 			}
 		}
@@ -5898,7 +5919,7 @@ create_job (GIOSchedulerJob *io_job,
 
 			if (count == 1) {
 				new_filename = g_strdup (filename);
-			} else if (job->make_dir) {
+			} else {
 				filename2 = g_strdup_printf ("%s %d", filename, count);
 
 				new_filename = NULL;
@@ -5911,8 +5932,6 @@ create_job (GIOSchedulerJob *io_job,
 				}
 
 				g_free (filename2);
-			} else {
-				new_filename = get_duplicate_name (filename, count, max_length);
 			}
 
 			if (make_file_name_valid_for_dest_fs (new_filename, dest_fs_type)) {
@@ -5933,18 +5952,16 @@ create_job (GIOSchedulerJob *io_job,
 		} else if (IS_IO_ERROR (error, EXISTS)) {
 			g_object_unref (dest);
 			dest = NULL;
-			if (job->make_dir) {
-				filename2 = g_strdup_printf ("%s %d", filename, ++count);
-				if (max_length > 0 && strlen (filename2) > max_length) {
-					new_filename = shorten_utf8_string (filename2, strlen (filename2) - max_length);
-					if (new_filename != NULL) {
-						g_free (filename2);
-						filename2 = new_filename;
-					}
+			filename2 = g_strdup_printf ("%s %d", filename, ++count);
+
+			if (max_length > 0 && strlen (filename2) > max_length) {
+				new_filename = shorten_utf8_string (filename2, strlen (filename2) - max_length);
+				if (new_filename != NULL) {
+					g_free (filename2);
+					filename2 = new_filename;
 				}
-			} else {
-				filename2 = get_duplicate_name (filename, count++, max_length);
 			}
+
 			make_file_name_valid_for_dest_fs (filename2, dest_fs_type);
 			if (filename_is_utf8) {
 				dest = g_file_get_child_for_display_name (job->dest_dir, filename2, NULL);
