diff --git a/Tomboy/Note.cs b/Tomboy/Note.cs
index bda7823..2e9412c 100644
--- a/Tomboy/Note.cs
+++ b/Tomboy/Note.cs
@@ -673,7 +673,7 @@ namespace Tomboy
 		
 		public bool ContainsTag (Tag tag)
 		{
-			if (data.Data.Tags.ContainsKey (tag.NormalizedName) == true)
+			if (tag != null && data.Data.Tags.ContainsKey (tag.NormalizedName) == true)
 				return true;
 			
 			return false;
diff --git a/Tomboy/NoteManager.cs b/Tomboy/NoteManager.cs
index be9f6d8..a213539 100644
--- a/Tomboy/NoteManager.cs
+++ b/Tomboy/NoteManager.cs
@@ -18,7 +18,8 @@ namespace Tomboy
 		AddinManager addin_mgr;
 		TrieController trie_controller;
 
-		public static string NoteTemplateTitle = Catalog.GetString ("New Note Template");
+		// Can this be made private?
+		public static string DefaultNoteTemplateTitle = Catalog.GetString ("New Note Template");
 
 		static string start_note_uri = String.Empty;
 
@@ -438,17 +439,7 @@ Ciao!");
 		// Create a new note with a generated title
 		public Note Create ()
 		{
-			int new_num = notes.Count;
-			string temp_title;
-
-			while (true) {
-				temp_title = String.Format (Catalog.GetString ("New Note {0}"),
-				                            ++new_num);
-				if (Find (temp_title) == null)
-					break;
-			}
-
-			return Create (temp_title);
+			return Create (null);
 		}
 
 		public static string SplitTitleFromContent (string title, out string body)
@@ -492,31 +483,26 @@ Ciao!");
 			return CreateNewNote (title, guid);
 		}
 
-		// Create a new note with the specified title, and a simple
-		// "Describe..." body or the body from the "New Note Template"
-		// note if it exists.  If the "New Note Template" body is found
-		// the text will not automatically be highlighted.
+		// Create a new note with the specified title from the default
+		// template note. Optionally the body can be overridden.
 		private Note CreateNewNote (string title, string guid)
 		{
 			string body = null;
 
+			Note template_note = GetOrCreateTemplateNote ();
 			title = SplitTitleFromContent (title, out body);
-			if (title == null)
-				return null;
 			
-			Note note_template = Find (NoteTemplateTitle);
-			if (note_template != null) {
-				// Use the body from the "New Note Template" note
+			if (String.IsNullOrEmpty(title))
+				title = GetUniqueName (Catalog.GetString ("New Note"), notes.Count);
+			
+			if (String.IsNullOrEmpty (body)) {
+				// Use the body from the template note
 				string xml_content =
-					note_template.XmlContent.Replace (NoteTemplateTitle,
+					template_note.XmlContent.Replace (XmlEncoder.Encode (template_note.Title),
 					                                  XmlEncoder.Encode (title));
 				return CreateNewNote (title, xml_content, guid);
 			}
 			
-			// Use a simple "Describe..." body and highlight
-			// it so it can be easily overwritten
-			body = Catalog.GetString ("Describe your new note here.");
-
 			string header = title + "\n\n";
 			string content =
 			        String.Format ("<note-content>{0}{1}</note-content>",
@@ -526,7 +512,6 @@ Ciao!");
 			Note new_note = CreateNewNote (title, content, guid);
 
 			// Select the inital
-			// "Describe..." text so typing will overwrite the body text,
 			NoteBuffer buffer = new_note.Buffer;
 			Gtk.TextIter iter = buffer.GetIterAtOffset (header.Length);
 			buffer.MoveMark (buffer.SelectionBound, iter);
@@ -576,11 +561,22 @@ Ciao!");
 		/// </returns>
 		public Note GetOrCreateTemplateNote ()
 		{
-			Note template_note = Find (NoteTemplateTitle);
+			Note template_note = null;
+			Tag template_tag = TagManager.GetOrCreateSystemTag (TagManager.TemplateNoteSystemTag);
+			foreach (Note note in template_tag.Notes) {
+				if (Notebooks.NotebookManager.GetNotebookFromNote (note) == null) {
+					template_note = note;
+					break;
+				}
+			}
+			
 			if (template_note == null) {
+				string title = DefaultNoteTemplateTitle;
+				if (Find (title) != null)
+					title = GetUniqueName (title, notes.Count);
 				template_note =
-					Create (NoteTemplateTitle,
-							GetNoteTemplateContent (NoteTemplateTitle));
+					Create (title,
+							GetNoteTemplateContent (title));
 					
 				// Select the initial text
 				NoteBuffer buffer = template_note.Buffer;
@@ -589,8 +585,7 @@ Ciao!");
 				buffer.MoveMark (buffer.InsertMark, buffer.EndIter);
 
 				// Flag this as a template note
-				Tag tag = TagManager.GetOrCreateSystemTag (TagManager.TemplateNoteSystemTag);
-				template_note.AddTag (tag);
+				template_note.AddTag (template_tag);
 
 				template_note.QueueSave (ChangeType.ContentChanged);
 			}
@@ -628,6 +623,20 @@ Ciao!");
 			}
 			return null;
 		}
+		
+		// Find a title that does not exist using basename and id as
+		// a starting point
+		public string GetUniqueName (string basename, int id)
+		{
+			string title;
+			while (true) {
+				title = String.Concat (basename, " ", id++);
+				if (Find (title) == null)
+					break;
+			}
+			
+			return title;
+		}
 
 		class CompareDates : IComparer<Note>
 		{
diff --git a/Tomboy/Notebooks/Notebook.cs b/Tomboy/Notebooks/Notebook.cs
index 7e2daf3..b26ed19 100644
--- a/Tomboy/Notebooks/Notebook.cs
+++ b/Tomboy/Notebooks/Notebook.cs
@@ -14,7 +14,7 @@ namespace Tomboy.Notebooks
 		#region Fields
 		string name;
 		string normalizedName;
-		string templateNoteTitle;
+		string defaultTemplateNoteTitle;
 		Tag tag;
 		#endregion // Fields
 		
@@ -77,7 +77,7 @@ namespace Tomboy.Notebooks
 						// TODO: Figure out how to make this note for
 						// translators appear properly.
 						string format = Catalog.GetString ("{0} Notebook Template");
-						templateNoteTitle = string.Format (format, Name);
+						defaultTemplateNoteTitle = string.Format (format, Name);
 					}
 				}
 			}
@@ -108,12 +108,24 @@ namespace Tomboy.Notebooks
 		/// </returns>
 		public virtual Note GetTemplateNote ()
 		{
-			NoteManager noteManager = Tomboy.DefaultNoteManager;
-			Note note = noteManager.Find (templateNoteTitle);
+			NoteManager note_manager = Tomboy.DefaultNoteManager;
+			Note note = null;
+			Tag template_tag = TagManager.GetOrCreateSystemTag (TagManager.TemplateNoteSystemTag);
+			Tag notebook_tag = TagManager.GetOrCreateSystemTag (NotebookTagPrefix + Name);
+			foreach (Note template in template_tag.Notes) {
+				if (template.ContainsTag (notebook_tag)) {
+					note = template;
+					break;
+				}
+			}
+			
 			if (note == null) {
+				string title = defaultTemplateNoteTitle;
+				if (note_manager.Find (title) != null)
+					title = note_manager.GetUniqueName (title, tag.Notes.Count);
 				note =
-					noteManager.Create (templateNoteTitle,
-							NoteManager.GetNoteTemplateContent (templateNoteTitle));
+					note_manager.Create (title,
+							NoteManager.GetNoteTemplateContent (title));
 					
 				// Select the initial text
 				NoteBuffer buffer = note.Buffer;
@@ -122,14 +134,12 @@ namespace Tomboy.Notebooks
 				buffer.MoveMark (buffer.InsertMark, buffer.EndIter);
 
 				// Flag this as a template note
-				Tag tag = TagManager.GetOrCreateSystemTag (TagManager.TemplateNoteSystemTag);
-				note.AddTag (tag);
+				note.AddTag (template_tag);
 
 				// Add on the notebook system tag so Tomboy
 				// will persist the tag/notebook across sessions
 				// if no other notes are added to the notebook.
-				tag = TagManager.GetOrCreateSystemTag (NotebookTagPrefix + Name);
-				note.AddTag (tag);
+				note.AddTag (notebook_tag);
 				
 				note.QueueSave (ChangeType.ContentChanged);
 			}
@@ -137,6 +147,25 @@ namespace Tomboy.Notebooks
 			return note;
 		}
 		
+		public Note CreateNotebookNote ()
+		{
+			string temp_title;
+			Note template = GetTemplateNote ();
+			NoteManager note_manager = Tomboy.DefaultNoteManager;
+			
+			temp_title = note_manager.GetUniqueName (Catalog.GetString ("New Note"), note_manager.Notes.Count);
+			
+			// Grab the template body
+			string xmlContent = template.XmlContent.Replace (XmlEncoder.Encode (template.Title), XmlEncoder.Encode (temp_title));
+			
+			Note note = note_manager.Create (temp_title, xmlContent);
+			
+			// Add the notebook tag
+			note.AddTag (tag);
+			
+			return note;
+		}
+		
 		/// <summary>
 		/// Returns true when the specified note exists in the notebook
 		/// </summary>
diff --git a/Tomboy/Notebooks/NotebookManager.cs b/Tomboy/Notebooks/NotebookManager.cs
index c1a9514..f6ba211 100644
--- a/Tomboy/Notebooks/NotebookManager.cs
+++ b/Tomboy/Notebooks/NotebookManager.cs
@@ -364,10 +364,12 @@ namespace Tomboy.Notebooks
 			if (response != (int) Gtk.ResponseType.Yes)
 				return;
 			
+			// Grab the template note before removing all the notebook tags
+			Note templateNote = notebook.GetTemplateNote ();
+			
 			DeleteNotebook (notebook);
 
 			// Delete the template note
-			Note templateNote = notebook.GetTemplateNote ();
 			if (templateNote != null) {
 				NoteManager noteManager = Tomboy.DefaultNoteManager;
 				noteManager.Delete (templateNote);
diff --git a/Tomboy/Notebooks/NotebookNewNoteMenuItem.cs b/Tomboy/Notebooks/NotebookNewNoteMenuItem.cs
index 04e7f72..f0b4d66 100644
--- a/Tomboy/Notebooks/NotebookNewNoteMenuItem.cs
+++ b/Tomboy/Notebooks/NotebookNewNoteMenuItem.cs
@@ -40,18 +40,7 @@ namespace Tomboy.Notebooks
 				return;
 			
 			// Look for the template note and create a new note
-			Note templateNote = notebook.GetTemplateNote ();
-			Note note;
-			
-			NoteManager noteManager = Tomboy.DefaultNoteManager;
-			note = noteManager.Create ();
-			if (templateNote != null) {
-				// Use the body from the template note
-				string xmlContent = templateNote.XmlContent.Replace (templateNote.Title, note.Title);
-				note.XmlContent = xmlContent;
-			}
-			
-			note.AddTag (notebook.Tag);
+			Note note = notebook.CreateNotebookNote ();
 			note.Window.Show ();
 		}
 
diff --git a/Tomboy/RecentChanges.cs b/Tomboy/RecentChanges.cs
index 0f43b2b..40dbb35 100644
--- a/Tomboy/RecentChanges.cs
+++ b/Tomboy/RecentChanges.cs
@@ -1297,17 +1297,7 @@ namespace Tomboy
 			}
 
 			// Look for the template note and create a new note
-			Note templateNote = notebook.GetTemplateNote ();
-			Note note;
-
-			note = manager.Create ();
-			if (templateNote != null) {
-				// Use the body from the template note
-				string xmlContent = templateNote.XmlContent.Replace (templateNote.Title, note.Title);
-				note.XmlContent = xmlContent;
-			}
-
-			note.AddTag (notebook.Tag);
+			Note note = notebook.CreateNotebookNote ();
 			note.Window.Show ();
 		}
 
