Index: Application.cs
===================================================================
--- Application.cs	(revision 88536)
+++ Application.cs	(working copy)
@@ -195,20 +195,34 @@
 
 		public static string CommonAppDataPath {
 			get {
-				return Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData);
+				string basepath = Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData);
+				string company = CompanyName;
+				string product = ProductName;
+				string version = ProductVersion;
+				
+				string path = Path.Combine (basepath, company);
+				path = Path.Combine (path, product);
+				path = Path.Combine (path, version);
+
+				if (!Directory.Exists (path))
+					Directory.CreateDirectory (path);
+				
+				return path;
 			}
 		}
 
 		public static RegistryKey CommonAppDataRegistry {
 			get {
-				return Registry.LocalMachine.OpenSubKey ("Software\\" +
+				return Registry.LocalMachine.CreateSubKey ("Software\\" +
 					Application.CompanyName + "\\" + Application.ProductName +
-					"\\" + Application.ProductVersion, true);
+					"\\" + Application.ProductVersion);
 			}
 		}
 
 		public static string CompanyName {
 			get {
+				string company = null;
+
 				Assembly assembly = Assembly.GetEntryAssembly ();
 				if (assembly == null)
 					assembly = Assembly.GetCallingAssembly ();
@@ -216,9 +230,12 @@
 				AssemblyCompanyAttribute[] attrs = (AssemblyCompanyAttribute[])
 					assembly.GetCustomAttributes (typeof(AssemblyCompanyAttribute), true);
 				if (attrs != null && attrs.Length > 0)
-					return attrs [0].Company;
+					company = attrs [0].Company;
 
-				return assembly.GetName().Name;
+				if (String.IsNullOrEmpty (company))
+					company = assembly.EntryPoint.DeclaringType.Namespace;
+
+				return company;
 			}
 		}
 
@@ -313,17 +330,27 @@
 
 		public static string UserAppDataPath {
 			get {
-				return Path.Combine (Path.Combine (Path.Combine (
-					Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData),
-					CompanyName), ProductName), ProductVersion);
+				string basepath = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData);
+				string company = CompanyName;
+				string product = ProductName;
+				string version = ProductVersion;
+				
+				string path = Path.Combine (basepath, company);
+				path = Path.Combine (path, product);
+				path = Path.Combine (path, version);
+
+				if (!Directory.Exists (path))
+					Directory.CreateDirectory (path);
+				
+				return path;
 			}
 		}
 
 		public static RegistryKey UserAppDataRegistry {
 			get {
-				return Registry.CurrentUser.OpenSubKey ("Software\\" +
+				return Registry.CurrentUser.CreateSubKey ("Software\\" +
 					Application.CompanyName + "\\" + Application.ProductName +
-					"\\" + Application.ProductVersion, true);
+					"\\" + Application.ProductVersion);
 			}
 		}
 
