diff --git a/Tomboy.mdp b/Tomboy.mdp
index 20565d7..deefaad 100644
--- a/Tomboy.mdp
+++ b/Tomboy.mdp
@@ -185,6 +185,8 @@
     <File name="Tomboy/Addins/WebSyncService/OAuth/Mono.Rocks/IEnumerable.cs" subtype="Code" buildaction="Compile" />
     <File name="Tomboy/Addins/WebSyncService/Api/RootInfo.cs" subtype="Code" buildaction="Compile" />
     <File name="Tomboy/gtk-sharp-beans/Global.cs" subtype="Code" buildaction="Compile" />
+    <File name="Tomboy/Hyena/XdgBaseDirectorySpec.cs" subtype="Code" buildaction="Compile" />
+    <File name="Tomboy/MacApplication.cs" subtype="Code" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Gac" localcopy="True" refto="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
diff --git a/Tomboy/AddinManager.cs b/Tomboy/AddinManager.cs
index fc2efa8..faec6bf 100644
--- a/Tomboy/AddinManager.cs
+++ b/Tomboy/AddinManager.cs
@@ -31,20 +31,45 @@ namespace Tomboy
 
 		public event System.EventHandler ApplicationAddinListChanged;
 
-		public AddinManager (string tomboy_conf_dir)
+		public AddinManager (string tomboy_conf_dir) : this (tomboy_conf_dir, null)
+		{
+		}
+
+		public AddinManager (string tomboy_conf_dir, string old_tomboy_conf_dir)
 		{
 			this.tomboy_conf_dir = tomboy_conf_dir;
 			app_addins = new Dictionary<string, ApplicationAddin> ();
 			note_addins = new Dictionary<Note, List<NoteAddinInfo>> ();
 			note_addin_infos = new Dictionary<string, List<NoteAddinInfo>> ();
 
-			InitializeMonoAddins ();
+			InitializeMonoAddins (old_tomboy_conf_dir);
+		}
+		
+		// TODO: Move to Utils.cs
+		private void CopyDirectory (string old_path, string new_path)
+		{
+			// NOTE: Assume that old_path exists and new_path doesn't
+			Directory.CreateDirectory (new_path);
+			foreach (string file_path in Directory.GetFiles (old_path))
+				File.Copy (file_path, Path.Combine (new_path, Path.GetFileName (file_path)));
+			foreach (string dir_path in Directory.GetDirectories (old_path))
+				CopyDirectory (dir_path, Path.Combine (new_path, Path.GetFileName (dir_path)));
 		}
 
-		void InitializeMonoAddins ()
+		void InitializeMonoAddins (string old_conf_dir)
 		{
 			Logger.Info ("Initializing Mono.Addins");
 
+			// Perform migration if necessary
+			if (!String.IsNullOrEmpty (old_conf_dir)) {
+				foreach (string dir_path in Directory.GetDirectories (old_conf_dir, "addin*")) {
+					string new_dir_path =
+						Path.Combine (tomboy_conf_dir, Path.GetFileName (dir_path));
+					if (!Directory.Exists (new_dir_path))
+						CopyDirectory (dir_path, new_dir_path);
+				}
+			}
+
 			string addins_dir = Path.Combine (tomboy_conf_dir, "addins");
 			if (!Directory.Exists (addins_dir))
 				Directory.CreateDirectory (addins_dir);
diff --git a/Tomboy/Addins/Bugzilla/BugzillaLink.cs b/Tomboy/Addins/Bugzilla/BugzillaLink.cs
index a85f510..152c979 100644
--- a/Tomboy/Addins/Bugzilla/BugzillaLink.cs
+++ b/Tomboy/Addins/Bugzilla/BugzillaLink.cs
@@ -1,4 +1,6 @@
 using System;
+using System.IO;
+
 using Tomboy;
 
 namespace Tomboy.Bugzilla
@@ -60,9 +62,8 @@ namespace Tomboy.Bugzilla
 			}
 
 			string host = uri.Host;
-			// TODO: Get this in a safer way
-			string imageDir = "~/.tomboy/BugzillaIcons/";
-			string imagePath = imageDir.Replace ("~", Environment.GetEnvironmentVariable ("HOME")) + host + ".png";
+			string imagePath = Path.Combine (BugzillaNoteAddin.ImageDirectory,
+			                                 host + ".png");
 
 			try {
 				Image = new Gdk.Pixbuf (imagePath);
diff --git a/Tomboy/Addins/Bugzilla/BugzillaNoteAddin.cs b/Tomboy/Addins/Bugzilla/BugzillaNoteAddin.cs
index 4360741..61c0b57 100644
--- a/Tomboy/Addins/Bugzilla/BugzillaNoteAddin.cs
+++ b/Tomboy/Addins/Bugzilla/BugzillaNoteAddin.cs
@@ -1,5 +1,6 @@
 
 using System;
+using System.IO;
 using System.Runtime.InteropServices;
 using System.Text;
 using System.Text.RegularExpressions;
@@ -15,6 +16,15 @@ namespace Tomboy.Bugzilla
 	{
 		public const string BugzillaLinkTagName = "link:bugzilla";
 
+		public static string ImageDirectory { get; private set; }
+
+		static BugzillaNoteAddin ()
+		{
+			// TODO: Migration
+			ImageDirectory = Path.Combine (Services.NativeApplication.ConfigurationDirectory,
+			                               "BugzillaIcons");
+		}
+
 		public override void Initialize ()
 		{
 			if (!Note.TagTable.IsDynamicTagRegistered (BugzillaLinkTagName)) {
diff --git a/Tomboy/Addins/Bugzilla/BugzillaPreferences.cs b/Tomboy/Addins/Bugzilla/BugzillaPreferences.cs
index 09e14e9..d398fb2 100644
--- a/Tomboy/Addins/Bugzilla/BugzillaPreferences.cs
+++ b/Tomboy/Addins/Bugzilla/BugzillaPreferences.cs
@@ -14,15 +14,6 @@ namespace Tomboy.Bugzilla
 
 		string last_opened_dir;
 
-		static string IMAGE_DIR = "~/.tomboy/BugzillaIcons";
-		static string image_dir = null;
-
-		static BugzillaPreferences ()
-		{
-			// TODO: Get this in a safer way
-			image_dir = IMAGE_DIR.Replace ("~", Environment.GetEnvironmentVariable ("HOME"));
-		}
-
 		public BugzillaPreferences ()
 : base (false, 12)
 		{
@@ -116,14 +107,14 @@ namespace Tomboy.Bugzilla
 
 		void UpdateIconStore ()
 		{
-			// Read ~/.tomboy/BugzillaIcons/"
+			// Read ~/.config/tomboy/BugzillaIcons/"
 
-			if (!Directory.Exists (image_dir))
+			if (!Directory.Exists (BugzillaNoteAddin.ImageDirectory))
 				return;
 
 			icon_store.Clear (); // clear out the old entries
 
-			string [] icon_files = Directory.GetFiles (image_dir);
+			string [] icon_files = Directory.GetFiles (BugzillaNoteAddin.ImageDirectory);
 			foreach (string icon_file in icon_files) {
 				FileInfo file_info = new FileInfo (icon_file);
 
@@ -272,10 +263,10 @@ run_add_dialog:
 
 			FileInfo file_info = new FileInfo (file_path);
 			string ext = file_info.Extension;
-			string saved_path = System.IO.Path.Combine (image_dir, host + ext);
+			string saved_path = System.IO.Path.Combine (BugzillaNoteAddin.ImageDirectory, host + ext);
 			try {
-				if (!Directory.Exists (image_dir)) {
-					Directory.CreateDirectory (image_dir);
+				if (!Directory.Exists (BugzillaNoteAddin.ImageDirectory)) {
+					Directory.CreateDirectory (BugzillaNoteAddin.ImageDirectory);
 				}
 
 				File.Copy (file_path, saved_path);
diff --git a/Tomboy/Addins/SshSyncService/SshSyncServiceAddin.cs b/Tomboy/Addins/SshSyncService/SshSyncServiceAddin.cs
index c2e2862..f3dba84 100644
--- a/Tomboy/Addins/SshSyncService/SshSyncServiceAddin.cs
+++ b/Tomboy/Addins/SshSyncService/SshSyncServiceAddin.cs
@@ -35,7 +35,7 @@ namespace Tomboy.Sync
 			GetConfigSettings (out server, out folder, out username, out port);
 			if (server == null)
 				server = string.Empty;
-			if (port != 22)
+			if (port > -1 && port != 22)
 				server += ":" + port.ToString ();
 			if (folder == null)
 				folder = string.Empty;
@@ -103,7 +103,7 @@ namespace Tomboy.Sync
 		protected override void ResetConfigurationValues ()
 		{
 			Preferences.Set ("/apps/tomboy/sync_sshfs_server", string.Empty);
-			Preferences.Set ("/apps/tomboy/sync_sshfs_port", 22);
+			Preferences.Set ("/apps/tomboy/sync_sshfs_port", -1);
 			Preferences.Set ("/apps/tomboy/sync_sshfs_folder", string.Empty);
 			Preferences.Set ("/apps/tomboy/sync_sshfs_username", string.Empty);
 		}
@@ -144,15 +144,16 @@ namespace Tomboy.Sync
 
 		protected override string GetFuseMountExeArgs (string mountPath, bool fromStoredValues)
 		{
-			int port = 22;
+			int port = -1;
 			string server, folder, username;
 			if (fromStoredValues)
 				GetConfigSettings (out server, out folder, out username, out port);
 			else
 				GetPrefWidgetSettings (out server, out folder, out username, out port);
+			string portStr = port > -1 ? string.Format ("-p {0}", port) : string.Empty;
 			return string.Format (
-			               "-p {0} {1}@{2}:{3} {4}",
-			               port,
+			               "{0} {1}@{2}:{3} {4}",
+			               portStr,
 			               username,
 			               server,
 			               folder,
@@ -189,7 +190,7 @@ namespace Tomboy.Sync
 		private bool GetConfigSettings (out string server, out string folder, out string username, out int port)
 		{
 			server = Preferences.Get ("/apps/tomboy/sync_sshfs_server") as String;
-			port = 22;
+			port = -1;
 			try {
 				port = (int)Preferences.Get ("/apps/tomboy/sync_sshfs_port");
 			} catch {}
@@ -205,7 +206,7 @@ namespace Tomboy.Sync
 		/// </summary>
 		private bool GetPrefWidgetSettings (out string server, out string folder, out string username, out int port)
 		{
-			port = 22;
+			port = -1;
 			server = serverEntry.Text.Trim ();
 			int lastColonIndex = server.LastIndexOf(":");
 			if (lastColonIndex > 0) {
diff --git a/Tomboy/GnomeApplication.cs b/Tomboy/GnomeApplication.cs
index cb9312e..a8be33f 100644
--- a/Tomboy/GnomeApplication.cs
+++ b/Tomboy/GnomeApplication.cs
@@ -7,17 +7,34 @@ using System.Xml;
 using Mono.Unix;
 using Mono.Unix.Native;
 
+using Hyena;
+
 namespace Tomboy
 {
 	public class GnomeApplication : INativeApplication
 	{
 		private Gnome.Program program;
-		private string confDir;
+		private static string confDir;
+		private static string dataDir;
+		private static string cacheDir;
+		private const string tomboyDirName = "tomboy";
 
-		public GnomeApplication ()
+		static GnomeApplication ()
 		{
-			confDir = Path.Combine (Environment.GetEnvironmentVariable ("HOME"),
-			                        ".tomboy");
+			dataDir = Path.Combine (XdgBaseDirectorySpec.GetUserDirectory ("XDG_DATA_HOME",
+			                                                               Path.Combine (".local", "share")),
+			                        tomboyDirName);
+			confDir = Path.Combine (XdgBaseDirectorySpec.GetUserDirectory ("XDG_CONFIG_HOME",
+			                                                               ".config"),
+			                        tomboyDirName);
+			cacheDir = Path.Combine (XdgBaseDirectorySpec.GetUserDirectory ("XDG_CACHE_HOME",
+			                                                                ".cache"),
+			                         tomboyDirName);
+
+			// NOTE: Other directories created on demand
+			//       (non-existence is an indicator that migration is needed)
+			if (!Directory.Exists (cacheDir))
+				Directory.CreateDirectory (cacheDir);
 		}
 
 		public void Initialize (string locale_dir,
@@ -152,9 +169,26 @@ namespace Tomboy
 			GtkBeans.Global.ShowUri (screen, help_uri);
 		}
 		
-		public string ConfDir {
+		public string DataDirectory {
+			get { return dataDir; }
+		}
+		
+		public string ConfigurationDirectory {
+			get { return confDir; }
+		}
+		
+		public string CacheDirectory {
+			get { return cacheDir; }
+		}
+		
+		public string LogDirectory {
+			get { return confDir; }
+		}
+		
+		public string PreOneDotZeroNoteDirectory {
 			get {
-				return confDir;
+				return Path.Combine (Environment.GetEnvironmentVariable ("HOME"),
+				                     ".tomboy");
 			}
 		}
 	}
diff --git a/Tomboy/Hyena/XdgBaseDirectorySpec.cs b/Tomboy/Hyena/XdgBaseDirectorySpec.cs
new file mode 100644
index 0000000..e92084e
--- /dev/null
+++ b/Tomboy/Hyena/XdgBaseDirectorySpec.cs
@@ -0,0 +1,82 @@
+//
+// XdgBaseDirectorySpec.cs
+//
+// Author:
+//   Aaron Bockover <abockover@novell.com>
+//
+// Copyright (C) 2006-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+
+namespace Hyena
+{
+    public static class XdgBaseDirectorySpec
+    {
+        public static string GetUserDirectory (string key, string fallback)
+        {
+            string home_dir = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
+            string config_dir = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData);
+            
+            string env_path = Environment.GetEnvironmentVariable (key);
+            if (!String.IsNullOrEmpty (env_path)) {
+                return env_path;
+            }
+
+            string user_dirs_path = Path.Combine (config_dir, "user-dirs.dirs");
+
+            if (!File.Exists (user_dirs_path)) {
+                return Path.Combine (home_dir, fallback);
+            }
+
+            try {
+                using (StreamReader reader = new StreamReader (user_dirs_path)) {
+                    string line;
+                    while ((line = reader.ReadLine ()) != null) {
+                        line = line.Trim ();
+                        int delim_index = line.IndexOf ('=');
+                        if (delim_index > 8 && line.Substring (0, delim_index) == key) {
+                            string path = line.Substring (delim_index + 1).Trim ('"');
+                            bool relative = false;
+
+                            if (path.StartsWith ("$HOME/")) {
+                                relative = true;
+                                path = path.Substring (6);
+                            } else if (path.StartsWith ("~")) {
+                                relative = true;
+                                path = path.Substring (1);
+                            } else if (!path.StartsWith ("/")) {
+                                relative = true;
+                            }
+
+                            return relative ? Path.Combine (home_dir, path) : path;
+                        }
+                    }
+                }
+            } catch (FileNotFoundException) {
+            }
+            
+            return Path.Combine (home_dir, fallback);
+        }
+    }
+}
diff --git a/Tomboy/Logger.cs b/Tomboy/Logger.cs
index 54669c8..46314ca 100644
--- a/Tomboy/Logger.cs
+++ b/Tomboy/Logger.cs
@@ -57,17 +57,14 @@ namespace Tomboy
 		{
 			console = new ConsoleLogger ();
 
-#if WIN32
+			string logDir = Services.NativeApplication.LogDirectory;
 			string logfile = Path.Combine(
-				Services.NativeApplication.ConfDir,
+				logDir,
 				"tomboy.log");
-#else
-			string logfile = Path.Combine(
-				Environment.GetEnvironmentVariable ("HOME"),
-				".tomboy.log");
-#endif
 
 			try {
+				if (!Directory.Exists (logDir))
+					Directory.CreateDirectory (logDir);
 				log = File.CreateText (logfile);
 				log.Flush ();
 			} catch (IOException iox) {
diff --git a/Tomboy/Makefile.am b/Tomboy/Makefile.am
index 16a0a46..28c14ef 100644
--- a/Tomboy/Makefile.am
+++ b/Tomboy/Makefile.am
@@ -121,6 +121,8 @@ CSFILES = 					\
 	$(srcdir)/Notebooks/*.cs		\
 	$(srcdir)/Synchronization/*.cs		\
 	\
+	$(srcdir)/Hyena/*.cs			\
+	\
 	$(GNOME_USED_CSFILES)			\
 	$(WIN_USED_CSFILES)			\
 	$(OSX_USED_CSFILES)			\
diff --git a/Tomboy/NativeApplication.cs b/Tomboy/NativeApplication.cs
index 13587aa..e9dfe6b 100644
--- a/Tomboy/NativeApplication.cs
+++ b/Tomboy/NativeApplication.cs
@@ -17,8 +17,16 @@ namespace Tomboy
 
 		void Exit (int exitcode);
 		void StartMainLoop ();
+		
+		string PreOneDotZeroNoteDirectory { get; }
 
-		string ConfDir { get; }
+		string CacheDirectory { get; }
+
+		string ConfigurationDirectory { get; }
+
+		string DataDirectory { get; }
+
+		string LogDirectory { get; }
 
 		void OpenUrl (string url, Gdk.Screen screen);
 
diff --git a/Tomboy/NoteManager.cs b/Tomboy/NoteManager.cs
index c4c6503..f6b8a72 100644
--- a/Tomboy/NoteManager.cs
+++ b/Tomboy/NoteManager.cs
@@ -51,12 +51,52 @@ public NoteManager (string directory) :
 			notes_dir = directory;
 			backup_dir = backup_directory;
 			notes = new List<Note> ();
+			
+			string conf_dir = Services.NativeApplication.ConfigurationDirectory;
+			
+			string old_notes_dir = null;
+			bool migration_needed = false;
 
 			bool first_run = FirstRun ();
+			if (first_run) {
+				old_notes_dir = Services.NativeApplication.PreOneDotZeroNoteDirectory;
+				migration_needed = DirectoryExists (old_notes_dir);
+			}
 			CreateNotesDir ();
+			if (!Directory.Exists (conf_dir))
+				Directory.CreateDirectory (conf_dir);
+			
+			if (migration_needed) {
+				// Copy notes
+				foreach (string noteFile in Directory.GetFiles (old_notes_dir, "*.note"))
+					File.Copy (noteFile, Path.Combine (notes_dir, Path.GetFileName (noteFile)));
+				
+				// Copy deleted notes
+				string old_backup = Path.Combine (old_notes_dir, "Backup");
+				if (DirectoryExists (old_backup)) {
+					Directory.CreateDirectory (backup_dir);
+					foreach (string noteFile in Directory.GetFiles (old_backup, "*.note"))
+						File.Copy (noteFile, Path.Combine (backup_dir, Path.GetFileName (noteFile)));
+				}
+				
+				// Copy configuration data
+				// NOTE: Add-in configuration data copied by AddinManager
+				string sync_manifest_name = "manifest.xml";
+				string old_sync_manifest_path =
+					Path.Combine (old_notes_dir, sync_manifest_name);
+				if (File.Exists (old_sync_manifest_path))
+					File.Copy (old_sync_manifest_path,
+					           Path.Combine (conf_dir, sync_manifest_name));
+				
+				
+				// NOTE: Not copying cached data
+
+				first_run = false;
+			}
 
 			trie_controller = CreateTrieController ();
-			addin_mgr = CreateAddinManager ();
+			addin_mgr = new AddinManager (conf_dir,
+			                              migration_needed ? old_notes_dir : null);
 
 			if (first_run) {
 				// First run. Create "Start Here" notes.
@@ -65,6 +105,39 @@ public NoteManager (string directory) :
 				LoadNotes ();
 			}
 
+			if (migration_needed) {
+				// Create migration notification note
+				// TODO: Finish content, perform duplicate title check...
+				string migration_note_content_template = Catalog.GetString (
+// Translators: {0}, {1}, {2}, and {3} are replaced by directory paths and should not be changed
+@"<note-content version=""0.1"">Your Notes Have Moved!
+
+In the latest version of Tomboy, your note files have moved.  You have probably never cared where your notes are stored, and if you still don't care, please go ahead and <bold>delete this note</bold>.  :-)
+
+Your old note directory is still safe and sound at <link:url>{0}</link:url> .  If you go back to an older version of Tomboy, it will look for notes there.
+
+But we've copied your notes and configuration info into two new directories, which will be used from now on:
+
+<list><list-item dir=""ltr"">Notes can now be found at <link:url>{1}</link:url>
+</list-item><list-item dir=""ltr"">Configuration is at <link:url>{2}</link:url>
+</list-item><list-item dir=""ltr"">You can install add-ins at <link:url>{3}</link:url>
+</list-item><list-item dir=""ltr"">Log files can be found at <link:url>{4}</link:url></list-item></list>
+
+Ciao!</note-content>");
+				string migration_note_content =
+				        Catalog.GetString (string.Format (migration_note_content_template,
+					                                  old_notes_dir + Path.DirectorySeparatorChar,
+					                                  notes_dir + Path.DirectorySeparatorChar,
+					                                  conf_dir + Path.DirectorySeparatorChar,
+					                                  Path.Combine (conf_dir, "addins") + Path.DirectorySeparatorChar,
+					                                  Services.NativeApplication.LogDirectory + Path.DirectorySeparatorChar));
+				// Translators: This string must match the first line of the migration note template string above
+				Note migration_note = Create (Catalog.GetString ("Your Notes Have Moved!"),
+				                              migration_note_content);
+				migration_note.QueueSave (ChangeType.ContentChanged);
+				migration_note.Window.Show ();
+			}
+
 			Tomboy.ExitingEvent += OnExitingEvent;
 		}
 		
@@ -75,13 +148,6 @@ public NoteManager (string directory) :
 			return new TrieController (this);
 		}
 
-		protected virtual AddinManager CreateAddinManager ()
-		{
-			string tomboy_conf_dir = Services.NativeApplication.ConfDir;
-
-			return new AddinManager (tomboy_conf_dir);
-		}
-
 		// For overriding in test methods.
 		protected virtual bool DirectoryExists (string directory)
 		{
diff --git a/Tomboy/Preferences.cs b/Tomboy/Preferences.cs
index 6975091..bba7738 100644
--- a/Tomboy/Preferences.cs
+++ b/Tomboy/Preferences.cs
@@ -20,6 +20,7 @@ namespace Tomboy
 		public const string CUSTOM_FONT_FACE = "/apps/tomboy/custom_font_face";
 		public const string MENU_NOTE_COUNT = "/apps/tomboy/menu_note_count";
 		public const string MENU_PINNED_NOTES = "/apps/tomboy/menu_pinned_notes";
+		public const string MENU_ITEM_MAX_LENGTH = "/apps/tomboy/tray_menu_item_max_length";
 
 		public const string KEYBINDING_SHOW_NOTE_MENU = "/apps/tomboy/global_keybindings/show_note_menu";
 		public const string KEYBINDING_OPEN_START_HERE = "/apps/tomboy/global_keybindings/open_start_here";
@@ -94,6 +95,9 @@ namespace Tomboy
 			case MENU_PINNED_NOTES:
 				return string.Empty;
 
+			case MENU_ITEM_MAX_LENGTH:
+				return 100;
+
 			case KEYBINDING_SHOW_NOTE_MENU:
 				return "<Alt>F12";
 
diff --git a/Tomboy/Synchronization/FileSystemSyncServer.cs b/Tomboy/Synchronization/FileSystemSyncServer.cs
index ed143e6..5cd5315 100644
--- a/Tomboy/Synchronization/FileSystemSyncServer.cs
+++ b/Tomboy/Synchronization/FileSystemSyncServer.cs
@@ -13,7 +13,7 @@ namespace Tomboy.Sync
 		private string serverId;
 
 		private string serverPath;
-		private string notePath;
+		private string cachePath;
 		private string lockPath;
 		private string manifestPath;
 
@@ -32,7 +32,7 @@ namespace Tomboy.Sync
 			if (!Directory.Exists (serverPath))
 				throw new DirectoryNotFoundException (serverPath);
 
-			notePath = Tomboy.DefaultNoteManager.NoteDirectoryPath;
+			cachePath = Services.NativeApplication.CacheDirectory;
 			lockPath = Path.Combine (serverPath, "lock");
 			manifestPath = Path.Combine (serverPath, "manifest.xml");
 
@@ -100,7 +100,7 @@ namespace Tomboy.Sync
 		{
 			Dictionary<string, NoteUpdate> noteUpdates = new Dictionary<string, NoteUpdate> ();
 
-			string tempPath = Path.Combine (notePath, "sync_temp");
+			string tempPath = Path.Combine (cachePath, "sync_temp");
 			if (!Directory.Exists (tempPath)) {
 				Directory.CreateDirectory (tempPath);
 			} else {
@@ -112,7 +112,7 @@ namespace Tomboy.Sync
 				} catch {}
 			}
 
-		if (IsValidXmlFile (manifestPath)) {
+			if (IsValidXmlFile (manifestPath)) {
 				// TODO: Permissions errors
 				using (FileStream fs = new FileStream (manifestPath, FileMode.Open)) {
 					XmlDocument doc = new XmlDocument ();
diff --git a/Tomboy/Synchronization/FuseSyncServiceAddin.cs b/Tomboy/Synchronization/FuseSyncServiceAddin.cs
index da09b0f..1fdcaad 100644
--- a/Tomboy/Synchronization/FuseSyncServiceAddin.cs
+++ b/Tomboy/Synchronization/FuseSyncServiceAddin.cs
@@ -121,9 +121,9 @@ namespace Tomboy.Sync
 					// Test ability to read
 					bool testFileFound = false;
 					foreach (string filePath in Directory.GetFiles (mountPath))
-					if (filePath == testPath) {
-						testFileFound = true;
-						break;
+						if (filePath == testPath) {
+							testFileFound = true;
+							break;
 					}
 					if (!testFileFound)
 						throw new TomboySyncException (Catalog.GetString ("Could not read testfile."));
@@ -265,7 +265,7 @@ namespace Tomboy.Sync
 
 		private void SetUpMountPath ()
 		{
-			string notesPath = Tomboy.DefaultNoteManager.NoteDirectoryPath;
+			string notesPath = Services.NativeApplication.CacheDirectory;
 			mountPath = Path.Combine (notesPath, "sync-" + Id); // TODO: Best mount path name?
 		}
 
diff --git a/Tomboy/Synchronization/TomboySyncClient.cs b/Tomboy/Synchronization/TomboySyncClient.cs
index d85b46b..bf9cb21 100644
--- a/Tomboy/Synchronization/TomboySyncClient.cs
+++ b/Tomboy/Synchronization/TomboySyncClient.cs
@@ -20,12 +20,12 @@ namespace Tomboy.Sync
 		{
 			// TODO: Why doesn't OnChanged ever get fired?!
 			FileSystemWatcher w = new FileSystemWatcher ();
-			w.Path = Tomboy.DefaultNoteManager.NoteDirectoryPath;
+			w.Path = Services.NativeApplication.ConfigurationDirectory;
 			w.Filter = localManifestFileName;
 			w.Changed += OnChanged;
 
 			localManifestFilePath =
-			        Path.Combine (Tomboy.DefaultNoteManager.NoteDirectoryPath,
+			        Path.Combine (Services.NativeApplication.ConfigurationDirectory,
 			                      localManifestFileName);
 			Parse (localManifestFilePath);
 
diff --git a/Tomboy/Tomboy.cs b/Tomboy/Tomboy.cs
index 97d6df9..326c471 100644
--- a/Tomboy/Tomboy.cs
+++ b/Tomboy/Tomboy.cs
@@ -124,7 +124,7 @@ namespace Tomboy
 				RegisterSessionManagerRestart (
 				        Environment.GetEnvironmentVariable ("TOMBOY_WRAPPER_PATH"),
 				        args,
-				        new string [] { "TOMBOY_PATH=" + note_path  });
+				        new string [] { "TOMBOY_PATH=" + note_path  }); // TODO: Pass along XDG_*?
 				StartTrayIcon ();
 			}
 
@@ -143,10 +143,10 @@ namespace Tomboy
 			        override_path :
 			        Environment.GetEnvironmentVariable ("TOMBOY_PATH");
 			if (note_path == null)
-				note_path = Services.NativeApplication.ConfDir;
+				note_path = Services.NativeApplication.DataDirectory;
 
 			// Tilde expand
-			return note_path.Replace ("~", Environment.GetEnvironmentVariable ("HOME"));
+			return note_path.Replace ("~", Environment.GetEnvironmentVariable ("HOME")); // TODO: Wasted work
 		}
 
 		static void RegisterPanelAppletFactory ()
@@ -353,8 +353,10 @@ namespace Tomboy
 			about.Documenters = documenters;
 			about.TranslatorCredits = translators;
 			about.IconName = "tomboy";
-			about.Run ();
-			about.Destroy ();
+			about.Response += delegate {
+				about.Destroy ();
+			};
+			about.Present ();
 		}
 
 		static void OpenSearchAll (object sender, EventArgs args)
diff --git a/Tomboy/Tray.cs b/Tomboy/Tray.cs
index 2c67847..c063287 100644
--- a/Tomboy/Tray.cs
+++ b/Tomboy/Tray.cs
@@ -57,10 +57,10 @@ namespace Tomboy
 		static string GetDisplayName (Note note)
 		{
 			string display_name = note.Title;
-			int max_length = 100;
+			int max_length = (int) Preferences.Get (Preferences.MENU_ITEM_MAX_LENGTH);
 
 			if (note.IsNew) {
-				string new_string = Catalog.GetString(" (new)");
+				string new_string = Catalog.GetString (" (new)");
 				max_length -= new_string.Length;
 				display_name = Ellipsify (display_name, max_length)
 					+ new_string;
diff --git a/data/tomboy.schemas.in b/data/tomboy.schemas.in
index c241042..423b2f2 100644
--- a/data/tomboy.schemas.in
+++ b/data/tomboy.schemas.in
@@ -151,6 +151,21 @@
          </long>
       </locale>
     </schema>
+
+    <schema>
+      <key>/schemas/apps/tomboy/tray_menu_item_max_length</key>
+      <applyto>/apps/tomboy/tray_menu_item_max_length</applyto>
+      <owner>tomboy</owner>
+      <type>int</type>
+      <default>100</default>
+      <locale name="C">
+         <short>Maximum note title length to show in tray menu.</short>
+         <long>
+	   Maximum characters of note title to show in the Tomboy tray or
+	   panel applet note menu.
+         </long>
+      </locale>
+    </schema>
     
     <schema>
       <key>/schemas/apps/tomboy/enable_startup_notes</key>
@@ -491,11 +506,12 @@
       <applyto>/apps/tomboy/sync_sshfs_port</applyto>
       <owner>tomboy</owner>
       <type>int</type>
-      <default>22</default>
+      <default>-1</default>
       <locale name="C">
          <short>SSHFS Synchronization Server Port</short>
          <long>
 	   The port to use when connecting to the synchronization server via SSH.
+	   Set to -1 or less if default SSH port settings should be used instead.
          </long>
       </locale>
     </schema>
