Refactoring of public property names in Mod, ModVersion, User, and KerbalStuff. Relocate Cookies from KerbalStuffReadOnly to KerbalStuff. Add XML documentation hints to public API members.
Refactoring of public property names in Mod, ModVersion, User, and KerbalStuff. Relocate Cookies from KerbalStuffReadOnly to KerbalStuff. Add XML documentation hints to public API members.

--- a/KerbalStuff/KerbalStuff.cs
+++ b/KerbalStuff/KerbalStuff.cs
@@ -48,6 +48,24 @@
 {
 	public class KerbalStuff : KerbalStuffReadOnly
 	{
+
+		/// <summary>
+		/// The cookies returned by KerbalStuff after a Login request, and assigned to successive Create and Update
+		/// requests.
+		/// </summary>
+		public static CookieCollection Cookies
+		{
+			get;
+			protected set;
+		}
+
+		/// <summary>
+		/// <para>Performs a Login request to KerbalStuff with the given username and password, returning a Dictionary of
+		/// deserialized JSON objects received from KerbalStuff after the request, or null if an error occurs.</para>
+		/// <para>Sets <see cref="KerbalStuff.KerbalStuff.Cookies"/> on success.</para>
+		/// </summary>
+		/// <param name="username">A valid KerbalStuff username, exact and case-sensitive.</param>
+		/// <param name="password">A valid KerbalStuff password associated with the username, exact and case-sensitive.</param>
 		public static Dictionary<string, object> Login(string username, string password)
 		{
 			string uri = KerbalStuffAction.Login.UriFormat;
@@ -60,7 +78,7 @@
 
 			if (currentResponse.Cookies.Count > 0)
 			{
-				cookies = currentResponse.Cookies;
+				Cookies = currentResponse.Cookies;
 			}
 
 			if (currentJson != null && currentJson is Dictionary<string, object>)
@@ -71,6 +89,15 @@
 			return null;
 		}
 
+		/// <summary>
+		/// <para>Performs a creation request to KerbalStuff, creating a new mod described by the given
+		/// <see cref="KerbalStuff.Mod"/> object and uploading the file with the given name and path.</para>
+		/// <para>Returns a Dictionary of deserialized JSON objects received from KerbalStuff after the request, or null
+		/// if an error occurs.</para>
+		/// </summary>
+		/// <param name="mod">The Mod to be created on KerbalStuff</param>
+		/// <param name="fileName">The name of the file to be uploaded</param>
+		/// <param name="filePath">The program-relative path of the file to be uploaded</param>
 		public static Dictionary<string, object> Create(Mod mod, string fileName, string filePath)
 		{
 			if (mod == null)
@@ -79,28 +106,28 @@
 			}
 			else
 			{
-				if (mod.name == string.Empty)
+				if (mod.Name == string.Empty)
 					throw new ArgumentException("mod.name cannot be empty.");
-				if (mod.license == string.Empty)
+				if (mod.License == string.Empty)
 					throw new ArgumentException("mod.license cannot be empty.");
-				if (mod.short_description == string.Empty)
+				if (mod.ShortDescription == string.Empty)
 					throw new ArgumentException("mod.short_description cannot be empty.");
-				if (mod.versions.Count < 1)
+				if (mod.Versions.Count < 1)
 					throw new ArgumentException("mod must have a single version to create.");
-				else if (mod.versions[0] == null)
+				else if (mod.Versions[0] == null)
 				{
 					throw new ArgumentNullException("mod.versions[0] cannot be null.");
 				}
 				else
 				{
-					if (mod.versions[0].friendly_version == string.Empty)
+					if (mod.Versions[0].FriendlyVersion == string.Empty)
 						throw new ArgumentException("mod.versions[0].friendly_version cannot be empty.");
-					if (mod.versions[0].ksp_version == string.Empty)
+					if (mod.Versions[0].KspVersion == string.Empty)
 						throw new ArgumentException("mod.versions[0].ksp_version cannot be empty.");
 				}
 			}
 
-			if (cookies == null)
+			if (Cookies == null)
 			{
 				throw new Exception("KerbalStuffWrapper.Create: Must log in first.");
 			}
@@ -111,14 +138,14 @@
 			}
 
 			Dictionary<string, object> postParams = new Dictionary<string, object>();
-			postParams.Add("name", mod.name);
-			postParams.Add("short-description", mod.short_description);
-			postParams.Add("license", mod.license);
-			postParams.Add("version", mod.versions[0].friendly_version);
-			postParams.Add("ksp-version", mod.versions[0].ksp_version);
+			postParams.Add("name", mod.Name);
+			postParams.Add("short-description", mod.ShortDescription);
+			postParams.Add("license", mod.License);
+			postParams.Add("version", mod.Versions[0].FriendlyVersion);
+			postParams.Add("ksp-version", mod.Versions[0].KspVersion);
 			postParams.Add("zipball", ReadZipballParameter(fileName, filePath));
 
-			ExecutePostRequest(KerbalStuffAction.Create.UriFormat, postParams, cookies);
+			ExecutePostRequest(KerbalStuffAction.Create.UriFormat, postParams, Cookies);
 
 			if (currentJson != null && currentJson is Dictionary<string, object>)
 			{
@@ -135,18 +162,30 @@
 			return null;
 		}
 
+		/// <summary>
+		/// <para>Performs and Update request to KerbalStuff, uploading a new version described in the given
+		/// <see cref="KerbalStuff.ModVersion"/> of the mod with the given Id, uploading the file with the given name
+		/// and path.  KerbalStuff will notify followers of the mod if requested.</para>
+		/// <para>Returns a Dictionary of deserialized JSON objects received from KerbalStuff after the request, or null
+		/// if an error occurs.</para>
+		/// </summary>
+		/// <param name="modId">The Id of Mod to be updated on KerbalStuff.</param>
+		/// <param name="version">The ModVersion to be added to the Mod.</param>
+		/// <param name="notifyFollowers">If set to <c>true</c> KerbalStuff will notify followers of the mod.</param>
+		/// <param name="fileName">The name of the file to be uploaded</param>
+		/// <param name="filePath">The program-relative path of the file to be uploaded</param>
 		public static Dictionary<string, object> Update(long modId, ModVersion version, bool notifyFollowers, string fileName, string filePath)
 		{
 			if (version == null)
 			{
 				throw new ArgumentNullException("KerbalStuffWrapper.Update: version cannot be null");
 			}
-			if (version.friendly_version == string.Empty)
+			if (version.FriendlyVersion == string.Empty)
 				throw new ArgumentException("KerbalStuffWrapper.Update: version.friendly_version cannot be empty");
-			if (version.ksp_version == string.Empty)
+			if (version.KspVersion == string.Empty)
 				throw new ArgumentException("KerbalStuffWrapper.Update: version.ksp_version cannot be empty");
 
-			if (cookies == null)
+			if (Cookies == null)
 			{
 				throw new Exception("KerbalStuffWrapper.Update: Must log in first.");
 			}
@@ -159,19 +198,19 @@
 			string uri = string.Format(KerbalStuffAction.Update.UriFormat, modId);
 
 			Dictionary<string, object> postParams = new Dictionary<string, object>();
-			postParams.Add("version", version.friendly_version);
-			postParams.Add("ksp-version", version.ksp_version);
-
-			if (version.changelog != null && version.changelog != string.Empty)
-			{
-				postParams.Add("changelog", version.changelog);
+			postParams.Add("version", version.FriendlyVersion);
+			postParams.Add("ksp-version", version.KspVersion);
+
+			if (version.ChangeLog != null && version.ChangeLog != string.Empty)
+			{
+				postParams.Add("changelog", version.ChangeLog);
 			}
 
 			postParams.Add("notify-followers", notifyFollowers ? "yes" : "no");
 
 			postParams.Add("zipball", ReadZipballParameter(fileName, filePath));
 
-			ExecutePostRequest(uri, postParams, cookies);
+			ExecutePostRequest(uri, postParams, Cookies);
 
 			if (currentJson != null && currentJson is Dictionary<string, object>)
 			{

--- a/KerbalStuffReadOnly/KerbalStuffReadOnly.cs
+++ b/KerbalStuffReadOnly/KerbalStuffReadOnly.cs
@@ -48,12 +48,45 @@
 {
 	public class KerbalStuffReadOnly
 	{
+		/// <summary>
+		/// The root URI of the KerbalStuff website, including protocol.
+		/// </summary>
 		public const string RootUri = "https://kerbalstuff.com";
 
+		/// <summary>
+		/// The URI of the KerbalStuff API, relative to the KerbalStuff root.
+		/// </summary>
+		/// <seealso cref="KerbalStuffReadOnly.RootUri"/>
 		public const string APIUri = RootUri + "/api";
 
-		public const string UserAgent = "KerbalStuffWrapper by toadicus";
-
+		private const string UserAgent = "KerbalStuffWrapper by toadicus";
+
+		/// <summary>
+		/// The response received from KerbalStuff after the current request.  Reset to null at the beginning of each
+		/// new request.
+		/// </summary>
+		public static HttpWebResponse currentResponse
+		{
+			get;
+			protected set;
+		}
+
+		/// <summary>
+		/// The List or Dictionary of deserialized JSON objects received from KerbalStuff after the current request.
+		/// Reset to null at the beginning of each new request.
+		/// </summary>
+		/// <value>The current json.</value>
+		public static object currentJson
+		{
+			get;
+			protected set;
+		}
+
+		/// <summary>
+		/// Queries KerbalStuff for the mod with the given Id, returning a <see cref="KerbalStuff.Mod"/> object,
+		/// or null if an error occured.
+		/// </summary>
+		/// <param name="modId">The Id of Mod to be queried on KerbalStuff.</param>
 		public static Mod ModInfo(long modId)
 		{
 			string uri = string.Format(KerbalStuffAction.ModInfo.UriFormat, modId);
@@ -70,6 +103,11 @@
 			return mod;
 		}
 
+		/// <summary>
+		/// Queries KerbalStuff for the latest version of the mod with then given Id, returning a
+		/// <see cref="KerbalStuff.ModVersion"/> object, or null if an error occured.
+		/// </summary>
+		/// <param name="modId">The Id of the Mod to be queried on KerbalStuff.</param>
 		public static ModVersion ModLatest(long modId)
 		{
 			string uri = string.Format(KerbalStuffAction.ModLatest.UriFormat, modId);
@@ -86,6 +124,11 @@
 			return ver;
 		}
 
+		/// <summary>
+		/// Searches KerbalStuff for a mod containing the given query string, returning a List of
+		/// <see cref="KerbalStuff.Mod"/> objects, or an empty List if none are found or an error occurs.
+		/// </summary>
+		/// <param name="query">The search query</param>
 		public static List<Mod> ModSearch(string query)
 		{
 			string uri = string.Format(KerbalStuffAction.ModSearch.UriFormat, query);
@@ -108,6 +151,11 @@
 			return rList;
 		}
 
+		/// <summary>
+		/// Queries KerbalStuff for a user with the given username, returning a <see cref="KerbalStuff.User"/> object,
+		/// or null if an error occurs.
+		/// </summary>
+		/// <param name="username">The exact, case-sensitive username to query.</param>
 		public static User UserInfo(string username)
 		{
 			ExecuteGetRequest(KerbalStuffAction.UserInfo, false, username);
@@ -123,6 +171,12 @@
 			return user;
 		}
 
+		/// <summary>
+		/// Searches KerbalStuff for a user containing the query string, returning a List of
+		/// <see cref="KerbalStuff.User"/> objects, or an empty List if none are found or an error occurs.
+		/// </summary>
+		/// <returns>The search.</returns>
+		/// <param name="query">Query.</param>
 		public static List<User> UserSearch(string query)
 		{
 			ExecuteGetRequest(KerbalStuffAction.UserSearch, false, query);
@@ -140,25 +194,7 @@
 			return users;
 		}
 
-		public static HttpWebResponse currentResponse
-		{
-			get;
-			protected set;
-		}
-
-		public static CookieCollection cookies
-		{
-			get;
-			protected set;
-		}
-
 		protected static HttpWebRequest currentRequest;
-
-		public static object currentJson
-		{
-			get;
-			protected set;
-		}
 
 		protected static void ExecuteGetRequest(KerbalStuffAction action, bool assignCookies, params object[] formatArgs)
 		{

--- a/KerbalStuffReadOnly/Mod.cs
+++ b/KerbalStuffReadOnly/Mod.cs
@@ -42,71 +42,110 @@
 
 namespace KerbalStuff
 {
+	/// <summary>
+	/// Class representing a KerbalStuff Mod as presented by the KerbalStuff API.
+	/// </summary>
 	public class Mod
 	{
-		public long downloads
-		{
-			get;
-			private set;
-		}
-
-		public string name
-		{
-			get;
-			private set;
-		}
-
-		public long followers
-		{
-			get;
-			private set;
-		}
-
-		public string author
-		{
-			get;
-			private set;
-		}
-
-		public long default_version_id
-		{
-			get;
-			private set;
-		}
-
-		public List<ModVersion> versions
-		{
-			get;
-			private set;
-		}
-
-		public long id
-		{
-			get;
-			private set;
-		}
-
-		public string short_description
-		{
-			get;
-			private set;
-		}
-
-		public string license
-		{
-			get;
-			private set;
-		}
-
+		/// <summary>
+		/// The number of times all versions of this Mod have been downloaded.
+		/// </summary>
+		public long Downloads
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// The name of the Mod.
+		/// </summary>
+		public string Name
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// The number of followers subscribed to this Mod on KerbalStuff.
+		/// </summary>
+		public long Followers
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// The name of the <see cref="KerbalStuff.User"/> that authors this Mod.
+		/// </summary>
+		public string Author
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// The ID of the default <see cref="KerbalStuff.ModVersion"/> of this Mod.
+		/// </summary>
+		public long DefaultVersionId
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// A read-only list of the available versions of this Mod.
+		/// </summary>
+		/// <seealso cref="KerbalStuff.ModVersion"/>
+		public IList<ModVersion> Versions
+		{
+			get
+			{
+				return (versions == null) ? null : versions.AsReadOnly();
+			}
+		}
+
+		/// <summary>
+		/// The Id of this Mod on KerbalStuff.
+		/// </summary>
+		public long Id
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// A short (1000 characters or less) description of this Mod.
+		/// </summary>
+		public string ShortDescription
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// The name or title (128 characters or less) of the License under which this Mod is released.
+		/// </summary>
+		public string License
+		{
+			get;
+			private set;
+		}
+
+		private List<ModVersion> versions;
+
+		/// <summary>
+		/// Initializes a new instance of the <see cref="KerbalStuff.Mod"/> class from a Dictionary of JSON objects.
+		/// </summary>
+		/// <param name="jsonDict">Dictionary containing the deserialized JSON response from KerbalStuff.</param>
 		public Mod(Dictionary<string, object> jsonDict) : this()
 		{
-			this.downloads = (long)jsonDict["downloads"];
-			this.name = (string)jsonDict["name"];
-			this.followers = (long)jsonDict["followers"];
-			this.author = (string)jsonDict["author"];
-			this.default_version_id = (long)jsonDict["default_version_id"];
-			this.id = (long)jsonDict["id"];
-			this.short_description = (string)jsonDict["short_description"];
+			this.Downloads = (long)jsonDict["downloads"];
+			this.Name = (string)jsonDict["name"];
+			this.Followers = (long)jsonDict["followers"];
+			this.Author = (string)jsonDict["author"];
+			this.DefaultVersionId = (long)jsonDict["default_version_id"];
+			this.Id = (long)jsonDict["id"];
+			this.ShortDescription = (string)jsonDict["short_description"];
 
 			if (jsonDict.ContainsKey("versions"))
 			{
@@ -120,13 +159,23 @@
 			}
 		}
 
-		public Mod(string name, string short_description, string version, string ksp_version, string license) : this()
-		{
-			this.name = name;
-			this.short_description = short_description;
-			this.license = license;
-
-			this.versions.Add(new ModVersion(version, ksp_version));
+		/// <summary>
+		/// Initializes a new instance of the <see cref="KerbalStuff.Mod"/> class from strings describing the Mod.
+		/// Useful for creating new Mods for upload.
+		/// </summary>
+		/// <seealso cref="KerbalStuff.KerbalStuff.Create"/>
+		/// <param name="name">The name of the Mod</param>
+		/// <param name="shortDescription">A short (1000 characters or less) description of this Mod.</param>
+		/// <param name="version">Version.</param>
+		/// <param name="kspVersion">Ksp version.</param>
+		/// <param name="license">The name or title (128 characters or less) of the License under which this Mod is released.</param>
+		public Mod(string name, string shortDescription, string version, string kspVersion, string license) : this()
+		{
+			this.Name = name;
+			this.ShortDescription = shortDescription;
+			this.License = license;
+
+			this.versions.Add(new ModVersion(version, kspVersion));
 		}
 
 		private Mod()
@@ -134,69 +183,138 @@
 			this.versions = new List<ModVersion>();
 		}
 
+		/// <summary>
+		/// Returns a <see cref="System.String"/> that represents the current <see cref="KerbalStuff.Mod"/>.
+		/// </summary>
 		public override string ToString()
 		{
-			return string.Format("Mod: {1}\nid: {6}\nauthor: {3}\ndownloads: {0}\nfollowers: {2}\nshort_description: {7}\ndefault_version_id: {4}\nversions:\n[\n{5}\n]\n", downloads, name, followers, author, default_version_id, string.Join("\n", versions.Select(v => v.ToString()).ToArray()), id, short_description);
+			return string.Format(
+				"Mod: {1}\n" +
+				"id: {6}\n" +
+				"author: {3}\n" +
+				"downloads: {0}\n" +
+				"followers: {2}\n" +
+				"short_description: {7}\n" +
+				"default_version_id: {4}\n" +
+				"versions:\n[\n{5}\n]\n",
+				Downloads,
+				Name,
+				Followers,
+				Author,
+				DefaultVersionId,
+				string.Join("\n", Versions.Select(v => v.ToString()).ToArray()),
+				Id,
+				ShortDescription
+			);
 		}
 	}
 
+	/// <summary>
+	/// Class representing a single version of a KerbalStuff Mod as presented by the KerbalStuff API.
+	/// </summary>
 	public class ModVersion
 	{
-		public string changelog
-		{
-			get;
-			private set;
-		}
-
-		public string ksp_version
-		{
-			get;
-			private set;
-		}
-
-		public string download_path
-		{
-			get;
-			private set;
-		}
-
-		public long id
-		{
-			get;
-			private set;
-		}
-
-		public string friendly_version
-		{
-			get;
-			private set;
-		}
-
+		/// <summary>
+		/// An optional log describing the changes made in this ModVersion 
+		/// </summary>
+		public string ChangeLog
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// The primary version of KSP for which this ModVersion was developed.
+		/// </summary>
+		public string KspVersion
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// The path of the download archive for this ModVersion, relative to the KerbalStuff
+		/// root.
+		/// </summary>
+		/// <seealso cref="KerbalStuff.KerbalStuff.RootUri"/>
+		public string DownloadPath
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// The Id of this ModVersion on KerbalStuff.
+		/// </summary>
+		public long Id
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// The human-friendly (or not) name or number of this ModVersion.
+		/// </summary>
+		/// <value>The friendly version.</value>
+		public string FriendlyVersion
+		{
+			get;
+			private set;
+		}
+
+		/// <summary>
+		/// Initializes a new instance of the <see cref="KerbalStuff.ModVersion"/> class from a Dictionary of JSON
+		/// objects.
+		/// </summary>
+		/// <param name="jsonDict">Dictionary containing the deserialized JSON response from KerbalStuff.</param>
 		public ModVersion(Dictionary<string, object> jsonDict) : this()
 		{
-			this.changelog = (string)jsonDict["changelog"];
-			this.ksp_version = (string)jsonDict["ksp_version"];
-			this.download_path = (string)jsonDict["download_path"];
-			this.id = (long)jsonDict["id"];
-			this.friendly_version = (string)jsonDict["friendly_version"];
-		}
-
-		public ModVersion(string version, string ksp_version, string changelog) : this(version, ksp_version)
-		{
-			this.changelog = changelog;
-		}
-
-		public ModVersion(string version, string ksp_version) : this()
-		{
-			this.friendly_version = version;
-			this.ksp_version = ksp_version;
+			this.ChangeLog = (string)jsonDict["changelog"];
+			this.KspVersion = (string)jsonDict["ksp_version"];
+			this.DownloadPath = (string)jsonDict["download_path"];
+			this.Id = (long)jsonDict["id"];
+			this.FriendlyVersion = (string)jsonDict["friendly_version"];
+		}
+
+		/// <summary>
+		/// Initializes a new instance of the <see cref="KerbalStuff.ModVersion"/> class from strings describing the
+		/// Version.
+		/// </summary>
+		/// <param name="version">The human-friendly (or not) name or number of this ModVersion.</param>
+		/// <param name="kspVersion">The primary version of KSP for which this ModVersion was developed.</param>
+		/// <param name="changeLog">An optional log describing the changes made in this ModVersion </param>
+		public ModVersion(string version, string kspVersion, string changeLog) : this(version, kspVersion)
+		{
+			this.ChangeLog = changeLog;
+		}
+
+		/// <summary>
+		/// Initializes a new instance of the <see cref="KerbalStuff.ModVersion"/> class from strings describing the
+		/// Version.
+		/// </summary>
+		/// <param name="version">The human-friendly (or not) name or number of this ModVersion.</param>
+		/// <param name="kspVersion">The primary version of KSP for which this ModVersion was developed.</param>
+		public ModVersion(string version, string kspVersion) : this()
+		{
+			this.FriendlyVersion = version;
+			this.KspVersion = kspVersion;
 		}
 
 		private ModVersion() {}
 
+		/// <summary>
+		/// Returns a <see cref="System.String"/> that represents the current <see cref="KerbalStuff.ModVersion"/>.
+		/// </summary>
 		public override string ToString()
 		{
-			return string.Format("ModVersion {4}:\nid: {3}\nksp_version: {1}\ndownload_path: {2}\nchangelog: {0}", changelog, ksp_version, download_path, id, friendly_version);
+			return string.Format(
+				"ModVersion {4}:\nid: {3}\nksp_version: {1}\ndownload_path: {2}\nchangelog: {0}",
+				ChangeLog,
+				KspVersion,
+				DownloadPath,
+				Id,
+				FriendlyVersion
+			);
 		}
 	}
 }

--- a/KerbalStuffReadOnly/User.cs
+++ b/KerbalStuffReadOnly/User.cs
@@ -42,59 +42,91 @@
 
 namespace KerbalStuff
 {
+	/// <summary>
+	/// Class representing a KerbalStuff user as presented by the KerbalStuff API.
+	/// </summary>
 	public class User
 	{
-		public string username
+		/// <summary>
+		/// The user's KerbalStuff username.
+		/// </summary>
+		public string Username
 		{
 			get;
 			private set;
 		}
 
-		public string twitterUsername
+		/// <summary>
+		/// The user's Twitter username.
+		/// </summary>
+		public string TwitterUsername
 		{
 			get;
 			private set;
 		}
 
-		public List<Mod> mods
+		/// <summary>
+		/// A read-only list of <see cref="KerbalStuff.Mod"/> objects maintained by the user.
+		/// </summary>
+		public IList<Mod> Mods
+		{
+			get
+			{
+				return (this.mods == null) ? null : this.mods.AsReadOnly();
+			}
+		}
+
+		/// <summary>
+		/// The user's Reddit username.
+		/// </summary>
+		public string RedditUsername
 		{
 			get;
 			private set;
 		}
 
-		public string redditUsername
+		/// <summary>
+		/// The user's IRC nickname.
+		/// </summary>
+		public string IrcNick
 		{
 			get;
 			private set;
 		}
 
-		public string ircNick
+		/// <summary>
+		/// The user's profile description.
+		/// </summary>
+		public string Description
 		{
 			get;
 			private set;
 		}
 
-		public string description
+		/// <summary>
+		/// The user's KSP Forum username.
+		/// </summary>
+		public string ForumUsername
 		{
 			get;
 			private set;
 		}
 
-		public string forumUsername
-		{
-			get;
-			private set;
-		}
+		private List<Mod> mods;
 
+		/// <summary>
+		/// Initializes a new instance of the <see cref="KerbalStuff.User"/> class from a dictionary of JSON objects.
+		/// </summary>
+		/// <param name="jsonDict">Dictionary containing the deserialized JSON response from KerbalStuff.</param>
 		public User(Dictionary<string, object> jsonDict) : this()
 		{
-			this.username = (string)jsonDict["username"];
-			this.twitterUsername = (string)jsonDict["twitterUsername"];
-			this.redditUsername = (string)jsonDict["redditUsername"];
-			this.ircNick = (string)jsonDict["ircNick"];
-			this.forumUsername = (string)jsonDict["forumUsername"];
+			this.Username = (string)jsonDict["username"];
+			this.TwitterUsername = (string)jsonDict["twitterUsername"];
+			this.RedditUsername = (string)jsonDict["redditUsername"];
+			this.IrcNick = (string)jsonDict["ircNick"];
+			this.ForumUsername = (string)jsonDict["forumUsername"];
 
-			this.description = (string)jsonDict["description"];
+			this.Description = (string)jsonDict["description"];
 
 			this.mods = new List<Mod>();
 
@@ -104,24 +136,33 @@
 			}
 		}
 
+		/// <summary>
+		/// Initializes a new instance of the <see cref="KerbalStuff.User"/> class from an ambiguously-typed dictionary
+		/// of JSON objects.
+		/// </summary>
+		/// <param name="jsonDict">Dictionary containing the JSON response from KerbalStuff.</param>
 		public User(object jsonObj) : this((Dictionary<string, object>)jsonObj) {}
 
 		private User() {}
 
+		/// <summary>
+		/// Returns a <see cref="System.String"/> that represents the current <see cref="KerbalStuff.User"/>.
+		/// </summary>
+		/// <returns>A <see cref="System.String"/> that represents the current <see cref="KerbalStuff.User"/>.</returns>
 		public override string ToString()
 		{
 			return string.Format(
 				"User: username={0}, twitterUsername={1}, redditUsername={3}, ircNick={4}, description={5}, forumUsername={6}\nmods:\n{2}",
-				username,
-				twitterUsername,
+				Username,
+				TwitterUsername,
 				string.Join(
 					"\n",
-					mods.Select(m => m.ToString()).ToArray()
+					Mods.Select(m => m.ToString()).ToArray()
 				),
-				redditUsername,
-				ircNick,
-				description,
-				forumUsername
+				RedditUsername,
+				IrcNick,
+				Description,
+				ForumUsername
 			);
 		}
 	}

--- a/KerbalStuffWrapper.sln
+++ b/KerbalStuffWrapper.sln
@@ -67,6 +67,7 @@
 		$0.TextStylePolicy = $5

 		$5.FileWidth = 120

 		$5.TabsToSpaces = False

+		$5.EolMarker = Unix

 		$5.inheritsSet = VisualStudio

 		$5.inheritsScope = text/plain

 		$5.scope = text/plain