diff --git a/aegisub/libaegisub/common/path.cpp b/aegisub/libaegisub/common/path.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3e7b19cd72c598ada867412d69e7253a09761bf6
--- /dev/null
+++ b/aegisub/libaegisub/common/path.cpp
@@ -0,0 +1,35 @@
+// Copyright (c) 2010, Amar Takhar <verm@aegisub.org>
+//
+// Permission to use, copy, modify, and distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+//
+// $Id$
+
+/// @file path.cpp
+/// @brief Common paths.
+/// @ingroup libaegisub
+
+
+#include <libaegisub/path.h>
+
+namespace agi {
+
+Path::Path(const std::string &file, const std::string& default_path): path_file(file), path_default(default_path) {
+	opt = new agi::Options(file, default_path);
+	opt->ConfigUser();
+}
+
+Path::~Path() {
+	opt->Flush();
+}
+
+} // namespace agi
diff --git a/aegisub/libaegisub/include/libaegisub/path.h b/aegisub/libaegisub/include/libaegisub/path.h
new file mode 100644
index 0000000000000000000000000000000000000000..a22a4d981395aaa6f34cfedfb204c04de16771b6
--- /dev/null
+++ b/aegisub/libaegisub/include/libaegisub/path.h
@@ -0,0 +1,56 @@
+// Copyright (c) 2010, Amar Takhar <verm@aegisub.org>
+//
+// Permission to use, copy, modify, and distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+//
+// $Id$
+
+/// @file path.h
+/// @brief Common paths.
+/// @ingroup libaegisub
+
+#ifndef AGI_PRE
+#endif
+
+#include <libaegisub/option.h>
+
+namespace agi {
+
+/// @class Path
+// Internal representation of all paths in aegisub.
+class Path {
+public:
+
+	/// Constructor
+	Path(const std::string &file, const std::string& default_path);
+
+	/// Destructor
+	~Path();
+
+private:
+	/// Location of path config file.
+	const std::string path_file;
+
+	/// Internal default config.
+	const std::string path_default;
+
+	/// Options object.
+	Options *opt;
+
+	const char *Data();		///< Shared resources
+	const char *Doc();		///< Documents
+	const char *User();		///< User config directory
+	const char *Locale();	///< Locale files
+	const char *Temp();		///< Temporary storage
+};
+
+} // namespace agi
diff --git a/aegisub/libaegisub/unix/path.cpp b/aegisub/libaegisub/unix/path.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4820340dea3be1a86ec60418b20d3323f66ebe1a
--- /dev/null
+++ b/aegisub/libaegisub/unix/path.cpp
@@ -0,0 +1,63 @@
+// Copyright (c) 2010, Amar Takhar <verm@aegisub.org>
+//
+// Permission to use, copy, modify, and distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+//
+// $Id$
+
+/// @file path.cpp
+/// @brief Common paths.
+/// @ingroup libaegisub
+
+#include "acconf.h"
+
+#include <libaegisub/path.h>
+
+namespace agi {
+
+const char *Path::Data() {
+	std::string tmp;
+	tmp.assign(INSTALL_PREFIX);
+	tmp.append("-");
+	tmp.append(AEGISUB_VERSION_DATA);
+	return tmp.c_str();
+}
+
+const char *Path::Doc() {
+	std::string tmp;
+	tmp.assign(INSTALL_PREFIX);
+	tmp.append("-");
+	tmp.append(AEGISUB_VERSION_DATA);
+	return tmp.c_str();
+}
+
+const char *Path::User() {
+	std::string tmp;
+	tmp.assign("~/.aegisub-");
+	tmp.append(AEGISUB_VERSION_DATA);
+	return tmp.c_str();
+}
+
+const char *Path::Locale() {
+	std::string tmp;
+	tmp.assign("~/.aegisub-");
+	tmp.append(AEGISUB_VERSION_DATA);
+	return tmp.c_str();
+}
+
+
+const char *Path::Temp() {
+	const char *tmp = "/tmp";
+	return tmp;
+}
+
+} // namespace agi
diff --git a/aegisub/src/libresrc/default_path.json b/aegisub/src/libresrc/default_path.json
new file mode 100644
index 0000000000000000000000000000000000000000..b20bba6c537bcebaf5c270acaa926a1a9ef8a185
--- /dev/null
+++ b/aegisub/src/libresrc/default_path.json
@@ -0,0 +1,27 @@
+{
+	"Backup" : "^USER/backup",
+	"Autosave" : "^USER/autosave",
+	"Data" : "^DATA",
+	"User" : "^USER",
+	"Temp" : "^TEMP",
+	"Dictionary" : {
+		"Local" {
+			"Lang" : "^CONFIG/dictionary/lang",
+			"Thesarus" : "^CONFIG/dictionary/thesaurus",
+			"Personal" : "^CONFIG/dictionary/personal"
+		}
+		"Lang" : [],
+		"Thesaurus" : []
+	},
+	"Automation" {
+		"Autoload" : [],
+		"Include" : []
+	}
+	"Crash" : "^CONFIG/crash",
+	"Font" {
+		"FontConfig" {
+				"Cache" : "^CONFIG/fontconfig_cache"
+		}
+	},
+	"Log" : "^CONFIG/log"
+}