Index: src/PreferencesDialog.cs
===================================================================
--- src/PreferencesDialog.cs	(revision 310)
+++ src/PreferencesDialog.cs	(working copy)
@@ -53,6 +53,7 @@
 		Gtk.TreeModelFilter		filteredCategories;
 		List<string>			categoriesToShow;
 		Gtk.TreeView			categoriesTree;
+		Gtk.CheckButton parseDateCheckButton;
 		
 		//
 		// Backend Page Widgets
@@ -287,8 +288,42 @@
 			sectionVBox.Show ();
 			vbox.PackStart (sectionVBox, false, false, 0);
 			
+			//
+			// Date parsing
+			//
+			sectionVBox = new VBox (false, 4);
+			l = new Label ();
+			l.Markup = string.Format ("<span size=\"large\" weight=\"bold\">{0}</span>",
+									  Catalog.GetString ("Cleverness"));
+			l.UseUnderline = false;
+			l.UseMarkup = true;
+			l.Wrap = false;
+			l.Xalign = 0;
+			
+			l.Show ();
+			sectionVBox.PackStart (l, false, false, 0);
+			
+			bool parseDate = Application.Preferences.GetBool (Preferences.ParseDateEnabledKey);
+			parseDateCheckButton =
+				new CheckButton (Catalog.GetString ("Get _due date from task name"));
+			parseDateCheckButton.UseUnderline = true;
+			parseDateCheckButton.Active = parseDate;
+			parseDateCheckButton.Show ();
+			
+			hbox = new HBox (false, 6);
+			l = new Label (string.Empty); // spacer
+			l.Show ();
+			hbox.PackStart (l, false, false, 0);
+			hbox.PackStart (parseDateCheckButton, false, false, 0);
+			hbox.Show ();
+			sectionVBox.PackStart (hbox, false, false, 0);
+			sectionVBox.Show ();
+			vbox.PackStart (sectionVBox, false, false, 0);
+			
 			return vbox;
 		}
+		
+		
 
 		///<summary>
 		///	WindowDeleted
@@ -318,6 +353,13 @@
 					Preferences.ShowCompletedTasksKey,
 					showCompletedTasksCheckButton.Active);
 			};
+			
+			// parseDateCheckButton delegate
+			parseDateCheckButton.Toggled += delegate {
+				Application.Preferences.SetBool (
+					Preferences.ParseDateEnabledKey,
+					parseDateCheckButton.Active);
+			};
 		}
 		
 		private void OnBackendComboBoxChanged (object sender, EventArgs args)
Index: src/Preferences.cs
===================================================================
--- src/Preferences.cs	(revision 310)
+++ src/Preferences.cs	(working copy)
@@ -47,6 +47,7 @@
 		public static string CurrentBackend = "CurrentBackend";
 		public static string InactivateTimeoutKey = "InactivateTimeout";
 		public static string SelectedCategoryKey = "SelectedCategory";
+		public static string ParseDateEnabledKey = "ParseDateEnabled";
 		
 		/// <summary>
 		/// A list of category names to show in the TaskWindow when the "All"
Index: src/TaskyTreeView.cs
===================================================================
--- src/TaskyTreeView.cs	(revision 310)
+++ src/TaskyTreeView.cs	(working copy)
@@ -3,6 +3,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.Text.RegularExpressions;
 using Gtk;
 using Mono.Unix;
 
@@ -350,8 +351,10 @@
 				return;
 			}
 			
-			crc.Text = 	date.ToString(Catalog.GetString("M/d - ddd"));
-			
+			if (date.Year == DateTime.Today.Year)
+				crc.Text = date.ToString(Catalog.GetString("M/d - ddd"));
+			else
+				crc.Text = date.ToString(Catalog.GetString("M/d/yy - ddd"));
 			//Utilities.GetPrettyPrintDate (task.DueDate, false);
 		}
 		
@@ -541,10 +544,83 @@
 			if (task == null)
 				return;
 			
-			task.Name = args.NewText;
+			string newText = args.NewText;
+			if (Application.Preferences.GetBool (Preferences.ParseDateEnabledKey) &&
+			    task.State == TaskState.Active &&
+			    task.DueDate == DateTime.MinValue)
+				newText = ParseTaskText (newText, task);
+			task.Name = newText;
 		}
 		
 		/// <summary>
+		/// Parse the task name in order to derive due date information.
+		/// </summary>
+		/// <param name="taskText">
+		/// A <see cref="System.String"/> representing the text entered
+		/// into the task name field.
+		/// </param>
+		/// <param name="task">
+		/// The <see cref="ITask"/> object to which due date information
+		/// should be added, if any is found.
+		/// </param>
+		/// <returns>
+		/// The taskText with the due date section of the string removed.
+		/// </returns>
+		string ParseTaskText (string taskText, ITask task)
+		{
+			// First, look for ways that the right side of the entered
+			// text can be directly parsed as a date
+			string[] words = taskText.Split (' ');
+			for (int i = 1; i < words.Length; i++) {
+				string possibleDate = string.Join (" ", words, i, words.Length - i);
+				DateTime result;
+				if (DateTime.TryParse (possibleDate, out result)) {
+					// Favor future dates, unless year was specifically mentioned
+					if (!possibleDate.Contains (result.Year.ToString ()))
+						while (result < DateTime.Today)
+							result = result.AddYears (1);
+					
+					// Set task due date and return the task
+					// name with the date part removed.
+					task.DueDate = result;
+					return string.Join (" ", words, 0, i);
+				}
+			}
+			
+			// Then try some more natural language parsing
+			
+			// A regular expression to capture a task that is due today
+			string today = Catalog.GetString (@"^(?<task>.+)\s+today\W*$");
+			// A regular expression to capture a task that is due tomorrow
+			string tomorrow = Catalog.GetString (@"^(?<task>.+)\s+tomorrow\W*$");
+			
+			// Additional regular expressions to consider using
+			//string abbrevDate = Catalog.GetString (@"^(?<task>.+)(on )?(the )?(?<day>\d{1,2})((th)|(nd)|(rd)|(st))\W*$");
+			//string nextDayName = Catalog.GetString (@"^(?<task>.+)(on )?next\s+(?<day>[a-z]+)\W*$");
+			//string dayName = Catalog.GetString (@"^(?<task>.+)\s+(on )?(?<day>[a-z]+)\W*$");
+			
+			Match match = Regex.Match (taskText, today, RegexOptions.IgnoreCase);
+			if (match.Success) {
+				string trimmedTaskText = match.Groups ["task"].Value;
+				if (!string.IsNullOrEmpty (trimmedTaskText)) {
+					task.DueDate = DateTime.Now;
+					return trimmedTaskText;
+				}
+			}
+			
+			match = Regex.Match (taskText, tomorrow, RegexOptions.IgnoreCase);
+			if (match.Success) {
+				string trimmedTaskText = match.Groups ["task"].Value;
+				if (!string.IsNullOrEmpty (trimmedTaskText)) {
+					task.DueDate = DateTime.Now.AddDays (1);
+					return trimmedTaskText;
+				}
+			}
+			
+			return taskText;
+		}
+		
+		/// <summary>
 		/// Modify the due date or completion date depending on whether the
 		/// task being modified is completed or active.
 		/// </summary>
