diff --git a/Program.cs b/Program.cs
index 0c951bf3..31b3b774 100644
--- a/Program.cs
+++ b/Program.cs
@@ -33,10 +33,15 @@ static class Program{
 
         public static readonly Version Version = new Version(VersionTag);
 
-        public static readonly string StoragePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), BrandName);
-        public static readonly string PluginPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins");
-        public static readonly string TemporaryPath = Path.Combine(Path.GetTempPath(), BrandName);
+        public static readonly bool IsPortable = File.Exists("makeportable");
+
+        public static readonly string ProgramPath = AppDomain.CurrentDomain.BaseDirectory;
+        public static readonly string StoragePath = IsPortable ? Path.Combine(ProgramPath, "portable", "storage") : Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), BrandName);
+        public static readonly string TemporaryPath = IsPortable ? Path.Combine(ProgramPath, "portable", "tmp") : Path.Combine(Path.GetTempPath(), BrandName);
         public static readonly string ConfigFilePath = Path.Combine(StoragePath, "TD_UserConfig.cfg");
+        
+        public static readonly string ScriptPath = Path.Combine(ProgramPath, "scripts");
+        public static readonly string PluginPath = Path.Combine(ProgramPath, "plugins");
 
         public static uint WindowRestoreMessage;
 
@@ -47,7 +52,7 @@ static class Program{
 
         public static string LogFile{
             get{
-                return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "td-log.txt");
+                return Path.Combine(ProgramPath, "td-log.txt");
             }
         }
 
diff --git a/Resources/ScriptLoader.cs b/Resources/ScriptLoader.cs
index 3c68b286..0cc749b8 100644
--- a/Resources/ScriptLoader.cs
+++ b/Resources/ScriptLoader.cs
@@ -11,7 +11,7 @@ static class ScriptLoader{
 
         public static string LoadResource(string name){
             try{
-                return File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "scripts", name), Encoding.UTF8);
+                return File.ReadAllText(Path.Combine(Program.ScriptPath, name), Encoding.UTF8);
             }catch(Exception ex){
                 MessageBox.Show("Unfortunately, "+Program.BrandName+" could not load the "+name+" file. The program will continue running with limited functionality.\r\n\r\n"+ex.Message, Program.BrandName+" Has Failed :(", MessageBoxButtons.OK, MessageBoxIcon.Error);
                 return null;