Index: Tomboy/Watchers.cs
===================================================================
--- Tomboy/Watchers.cs	(revision 1086)
+++ Tomboy/Watchers.cs	(working copy)
@@ -144,42 +144,102 @@
 		bool UpdateNoteTitle ()
 		{
 			string title = Window.Title;
-
-			Note existing = Manager.Find (title);
-			if (existing != null && existing != this.Note) {
+			
+			NoteTitleError error;
+			if (!IsNoteTitleValid (title, out error)) {
 				// Present the window in case it got unmapped...
 				// FIXME: Causes flicker.
 				Note.Window.Present ();
 
-				ShowNameClashError (title);
+				ShowNameTitleError (title, error);
 				return false;
 			}
 
 			Note.Title = title;
 			return true;
 		}
-
-		void ShowNameClashError (string title)
+		
+		// <summary>
+		// Check new note titles and make sure they are valid.  This method
+		// is a direct result of http://bugzilla.gnome.org/show_bug.cgi?id=350990#c6 
+		// </summary>
+		bool IsNoteTitleValid (string title, out NoteTitleError error)
 		{
+			error = NoteTitleError.None;
+			
+			// Check to see if the note already exists
+			Note existing = Manager.Find (title);
+			if (existing != null && existing != this.Note) {
+				error = NoteTitleError.AlreadyExists;
+				return false;
+			}
+			
+			// Check for a length that's too small
+			if (title.Length < 4) {
+				error = NoteTitleError.NotEnoughCharacters;
+				return false;
+			}
+			
+			// Check to see if the note has at least two words
+			if (GetWordCount (title) <= 1) {
+				// Allow single WikiWord titles to be okay
+				if (!NoteWikiWatcher.IsWikiWord (title)) {
+					error = NoteTitleError.NotEnoughWords;
+					return false;
+				}
+			}
+			
+			return true;
+		}
+		
+		int GetWordCount (string title)
+		{
+			char[] delims = {' '};
+			string[] words = title.Split (delims);
+			return words.Length;
+		}
+		
+		void ShowNameTitleError (string title, NoteTitleError error)
+		{
 			// Select text from TitleStart to TitleEnd
 			Buffer.MoveMark (Buffer.SelectionBound, TitleStart);
 			Buffer.MoveMark (Buffer.InsertMark, TitleEnd);
-
-			string message = 
-				String.Format (Catalog.GetString ("A note with the title " +
+			
+			string message = string.Empty;
+			string description = string.Empty;
+			switch (error) {
+			case NoteTitleError.AlreadyExists:
+				message = Catalog.GetString ("Note title taken");
+				description =
+					String.Format (Catalog.GetString ("A note with the title " +
 								  "<b>{0}</b> already exists. " +
 								  "Please choose another name " +
 								  "for this note before " +
 								  "continuing."),
 					       title);
-
+				break;
+			case NoteTitleError.NotEnoughCharacters:
+				message = Catalog.GetString ("Note title too short");
+				description =
+					Catalog.GetString ("The note title you've " +
+							"chosen is too short.  Please use a title with " +
+							"at least four (4) characters.");
+				break;
+			case NoteTitleError.NotEnoughWords:
+				message = Catalog.GetString ("Not enough words in the tile");
+				description =
+					Catalog.GetString ("You should choose a note title that is " +
+							"at least two (2) words.");
+				break;
+			}
+			
 			HIGMessageDialog dialog = 
 				new HIGMessageDialog (Window,
 						      Gtk.DialogFlags.DestroyWithParent,
 						      Gtk.MessageType.Warning,
 						      Gtk.ButtonsType.Ok,
-						      Catalog.GetString ("Note title taken"),
-						      message);
+						      message,
+						      description);
 
 			dialog.Run ();
 			dialog.Destroy ();
@@ -558,6 +618,14 @@
 		}
 	}
 
+	enum NoteTitleError
+	{
+		None = 0,
+		NotEnoughCharacters,
+		NotEnoughWords,
+		AlreadyExists
+	};
+
 	public class NoteLinkWatcher : NotePlugin
 	{
 		NoteTag url_tag;
@@ -565,7 +633,7 @@
 		NoteTag broken_link_tag;
 
 		static bool text_event_connected;
-
+		
 		protected override void Initialize () 
 		{
 			Manager.NoteDeleted += OnNoteDeleted;
@@ -918,6 +986,16 @@
 
 			ApplyWikiwordToBlock (start, args.Pos);
 		}
+		
+		public static bool IsWikiWord (string word)
+		{
+			Match match = regex.Match (word);
+			
+			if (match.Success)
+				return true;
+
+			return false;
+		}
 	}
 
 	public class MouseHandWatcher : NotePlugin
