diff --git a/data/patches/linux/linux-common-ra2.patch b/data/patches/linux/linux-common-ra2.patch
new file mode 100644
index 0000000..e7bf53c
--- /dev/null
+++ b/data/patches/linux/linux-common-ra2.patch
@@ -0,0 +1,42 @@
+--- a/mods/all/mod.yaml
++++ b/mods/all/mod.yaml
+@@ -20,6 +20,7 @@
+ ./mods/d2k/OpenRA.Mods.D2k.dll
+ ./mods/cnc/OpenRA.Mods.Cnc.dll
+ ./mods/ts/OpenRA.Mods.TS.dll
++ ./mods/ra2/OpenRA.Mods.RA2.dll
+
+ ChromeLayout:
+
+
+--- a/mods/ra2/mod.yaml
++++ b/mods/ra2mod.yaml
+@@ -5,7 +5,7 @@
+ Author: RA2 team
+
+ RequiresMods:
+- modchooser: {DEV_VERSION}
++
+
+ Packages:
+ ~^Content/ra2
+@@ -172,7 +172,7 @@
+ ra2:languages/english.yaml
+
+ LoadScreen: LogoStripeLoadScreen
+- Image: ra2:uibits/loadscreen.png
++ Image: ./mods/ra2/uibits/loadscreen.png
+ Text: Carving wooden nickels..., Preparing paratroopers..., Welcoming you to Texas..., Optimizing helium mix..., Receiving thoughts..., Igniting boosters...
+
+ ContentInstaller:
+
+--- a/utility.cmd
++++ b/utility.cmd
+@@ -16,6 +16,7 @@
+ if /I "%mod%" EQU "ra" (goto help)
+ if /I "%mod%" EQU "cnc" (goto help)
+ if /I "%mod%" EQU "ts" (goto help)
++if /I "%mod%" EQU "ra2" (goto help)
+ if /I "%mod%" EQU "d2k" (goto help)
+ echo.
+ echo Unknown mod: %mod%
diff --git a/data/patches/tibsun_ra2.patch b/data/patches/linux/linux-make.patch
old mode 100755
new mode 100644
similarity index 53%
rename from data/patches/tibsun_ra2.patch
rename to data/patches/linux/linux-make.patch
index 1bbf78a..337a23f
--- a/data/patches/tibsun_ra2.patch
+++ b/data/patches/linux/linux-make.patch
@@ -56,67 +56,4 @@
@$(INSTALL_DATA) "global mix database.dat" "$(DATA_INSTALL_DIR)/global mix database.dat"
@$(INSTALL_DATA) "GeoLite2-Country.mmdb.gz" "$(DATA_INSTALL_DIR)/GeoLite2-Country.mmdb.gz"
-
---- a/make.ps1
-+++ b/make.ps1
-@@ -136,6 +136,8 @@
- echo "Testing mods..."
- echo "Testing Tiberian Sun mod MiniYAML..."
- ./OpenRA.Utility.exe ts --check-yaml
-+ echo "Testing Red Alert 2 mod MiniYAML..."
-+ ./OpenRA.Utility.exe ra2 --check-yaml
- echo "Testing Dune 2000 mod MiniYAML..."
- ./OpenRA.Utility.exe d2k --check-yaml
- echo "Testing Tiberian Dawn mod MiniYAML..."
-@@ -170,6 +172,8 @@
- ./OpenRA.Utility.exe cnc --check-code-style OpenRA.Mods.D2k
- echo "Checking for code style violations in OpenRA.Mods.TS..."
- ./OpenRA.Utility.exe cnc --check-code-style OpenRA.Mods.TS
-+ echo "Checking for code style violations in OpenRA.Mods.RA2..."
-+ ./OpenRA.Utility.exe cnc --check-code-style OpenRA.Mods.RA2
- echo "Checking for code style violations in OpenRA.Utility..."
- ./OpenRA.Utility.exe cnc --check-code-style OpenRA.Utility
- echo "Checking for code style violations in OpenRA.Test..."
-
---- a/mods/all/mod.yaml
-+++ b/mods/all/mod.yaml
-@@ -20,6 +20,7 @@
- ./mods/d2k/OpenRA.Mods.D2k.dll
- ./mods/cnc/OpenRA.Mods.Cnc.dll
- ./mods/ts/OpenRA.Mods.TS.dll
-+ ./mods/ra2/OpenRA.Mods.RA2.dll
- ChromeLayout:
-
-
---- a/mods/ra2/mod.yaml
-+++ b/mods/ra2mod.yaml
-@@ -5,7 +5,7 @@
- Author: RA2 team
-
- RequiresMods:
-- modchooser: {DEV_VERSION}
-+
-
- Packages:
- ~^Content/ra2
-@@ -172,7 +172,7 @@
- ra2:languages/english.yaml
-
- LoadScreen: LogoStripeLoadScreen
-- Image: ra2:uibits/loadscreen.png
-+ Image: ./mods/ra2/uibits/loadscreen.png
- Text: Carving wooden nickels..., Preparing paratroopers..., Welcoming you to Texas..., Optimizing helium mix..., Receiving thoughts..., Igniting boosters...
-
- ContentInstaller:
-
---- a/utility.cmd
-+++ b/utility.cmd
-@@ -16,6 +16,7 @@
- if /I "%mod%" EQU "ra" (goto help)
- if /I "%mod%" EQU "cnc" (goto help)
- if /I "%mod%" EQU "ts" (goto help)
-+if /I "%mod%" EQU "ra2" (goto help)
- if /I "%mod%" EQU "d2k" (goto help)
- echo.
- echo Unknown mod: %mod%
diff --git a/data/patches/windows/windows-common-ra2.patch b/data/patches/windows/windows-common-ra2.patch
new file mode 100644
index 0000000..fa1f0c6
--- /dev/null
+++ b/data/patches/windows/windows-common-ra2.patch
@@ -0,0 +1,42 @@
+--- a/mods/all/mod.yaml
++++ b/mods/all/mod.yaml
+@@ -20,6 +20,7 @@
+ ./mods/d2k/OpenRA.Mods.D2k.dll
+ ./mods/cnc/OpenRA.Mods.Cnc.dll
+ ./mods/ts/OpenRA.Mods.TS.dll
++ ./mods/ra2/OpenRA.Mods.RA2.dll
+
+ ChromeLayout:
+
+
+--- a/mods/ra2/mod.yaml
++++ b/mods/ra2mod.yaml
+@@ -5,7 +5,7 @@
+ Author: RA2 team
+
+ RequiresMods:
+- modchooser: {DEV_VERSION}
++
+
+ Packages:
+ ~^Content/ra2
+@@ -172,7 +172,7 @@
+ ra2:languages/english.yaml
+
+ LoadScreen: LogoStripeLoadScreen
+- Image: ra2:uibits/loadscreen.png
++ Image: ./mods/ra2/uibits/loadscreen.png
+ Text: Carving wooden nickels..., Preparing paratroopers..., Welcoming you to Texas..., Optimizing helium mix..., Receiving thoughts..., Igniting boosters...
+
+ ContentInstaller:
+
+--- a/utility.cmd
++++ b/utility.cmd
+@@ -16,6 +16,7 @@
+ if /I "%mod%" EQU "ra" (goto help)
+ if /I "%mod%" EQU "cnc" (goto help)
+ if /I "%mod%" EQU "ts" (goto help)
++if /I "%mod%" EQU "ra2" (goto help)
+ if /I "%mod%" EQU "d2k" (goto help)
+ echo.
+ echo Unknown mod: %mod%
diff --git a/data/patches/windows/windows-make.patch b/data/patches/windows/windows-make.patch
new file mode 100644
index 0000000..e856687
--- /dev/null
+++ b/data/patches/windows/windows-make.patch
@@ -0,0 +1,29 @@
+--- a/make.ps1
++++ b/make.ps1
+@@ -108,7 +108,7 @@
+
+ if ($version -ne $null)
+ {
+- $mods = @("mods/ra/mod.yaml", "mods/cnc/mod.yaml", "mods/d2k/mod.yaml", "mods/ts/mod.yaml", "mods/modchooser/mod.yaml", "mods/all/mod.yaml")
++ $mods = @("mods/ra/mod.yaml", "mods/cnc/mod.yaml", "mods/d2k/mod.yaml", "mods/ts/mod.yaml", "mods/ra2/mod.yaml", "mods/modchooser/mod.yaml", "mods/all/mod.yaml")
+ foreach ($mod in $mods)
+ {
+ $replacement = (gc $mod) -Replace "Version:.*", ("Version: {0}" -f $version)
+@@ -136,6 +136,8 @@
+ echo "Testing mods..."
+ echo "Testing Tiberian Sun mod MiniYAML..."
+ ./OpenRA.Utility.exe ts --check-yaml
++ echo "Testing Red Alert 2 mod MiniYAML..."
++ ./OpenRA.Utility.exe ra2 --check-yaml
+ echo "Testing Dune 2000 mod MiniYAML..."
+ ./OpenRA.Utility.exe d2k --check-yaml
+ echo "Testing Tiberian Dawn mod MiniYAML..."
+@@ -170,6 +172,8 @@
+ ./OpenRA.Utility.exe cnc --check-code-style OpenRA.Mods.D2k
+ echo "Checking for code style violations in OpenRA.Mods.TS..."
+ ./OpenRA.Utility.exe cnc --check-code-style OpenRA.Mods.TS
++ echo "Checking for code style violations in OpenRA.Mods.RA2..."
++ ./OpenRA.Utility.exe cnc --check-code-style OpenRA.Mods.RA2
+ echo "Checking for code style violations in OpenRA.Utility..."
+ ./OpenRA.Utility.exe cnc --check-code-style OpenRA.Utility
+ echo "Checking for code style violations in OpenRA.Test..."
diff --git a/data/patches/openra-solution.patch b/data/patches/windows/windows-openra-solution.patch
old mode 100755
new mode 100644
similarity index 100%
rename from data/patches/openra-solution.patch
rename to data/patches/windows/windows-openra-solution.patch
diff --git a/data/patches/ra2-csproj.patch b/data/patches/windows/windows-ra2-csproj.patch
old mode 100755
new mode 100644
similarity index 96%
rename from data/patches/ra2-csproj.patch
rename to data/patches/windows/windows-ra2-csproj.patch
index 5fa6a98..53e77b1
--- a/data/patches/ra2-csproj.patch
+++ b/data/patches/windows/windows-ra2-csproj.patch
@@ -1,110 +1,108 @@
---- a/OpenRA.Mods.RA2/OpenRA.Mods.RA2.csproj
-+++ b/OpenRA.Mods.RA2/OpenRA.Mods.RA2.csproj
-@@ -1,33 +1,74 @@
-
--
-+
-
-- {7E1263D2-BA04-48D0-85DB-26C68B782608}
- Debug
- AnyCPU
-+ 10.0.0
-+ 2.0
-+ {7E1263D2-BA04-48D0-85DB-26C68B782608}
- Library
- OpenRA.Mods.RA2
- OpenRA.Mods.RA2
-- v4.0
-- ..
-
--
-+
-+ true
-+ bin\Debug\
-+ TRACE;DEBUG
- x86
-+ prompt
-+
-+
-+
-+
-+
-+
-+ AllRules.ruleset
-+ full
-+ true
-
--
-- True
-- Full
-- False
-- True
-- DEBUG;TRACE
--
--
-- False
-- None
-- True
-- False
-+
-+ true
-+ bin\Release\
- TRACE
-+ true
-+ pdbonly
-+ x86
-+ prompt
-+ AllRules.ruleset
-+ true
-+
-+
-+
-+
-+
-+
-
-
-+
-+
-+
-+
-+ ..\thirdparty\download\Eluant.dll
-+ False
-+
-+
-+
-+
-+
-+ {0DFB103F-2962-400F-8C6D-E2C28CCBA633}
-+ OpenRA.Game
-+ False
-+
-+
-+ {fe6c8cc0-2f07-442a-b29f-17617b3b7fc6}
-+ OpenRA.Mods.Common
-+ False
-+
-+
-+
-+
-+
-+
-
- 4.0
-
-@@ -52,8 +93,9 @@
- 3.5
-
-
--
--
--
--
--
-+
-+ mkdir "$(SolutionDir)mods/ra2/"
-+copy "$(TargetPath)" "$(SolutionDir)mods/ra2/"
-+cd "$(SolutionDir)"
-+
-+
-\ No newline at end of file
+--- a/OpenRA.Mods.RA2/OpenRA.Mods.RA2.csproj
++++ b/OpenRA.Mods.RA2/OpenRA.Mods.RA2.csproj
+@@ -1,33 +1,74 @@
+
+-
++
+
+- {7E1263D2-BA04-48D0-85DB-26C68B782608}
+ Debug
+ AnyCPU
++ 10.0.0
++ 2.0
++ {7E1263D2-BA04-48D0-85DB-26C68B782608}
+ Library
+ OpenRA.Mods.RA2
+ OpenRA.Mods.RA2
+- v4.0
+- ..
+
+-
++
++ true
++ bin\Debug\
++ TRACE;DEBUG
+ x86
++ prompt
++
++
++
++
++
++
++ AllRules.ruleset
++ full
++ true
+
+-
+- True
+- Full
+- False
+- True
+- DEBUG;TRACE
+-
+-
+- False
+- None
+- True
+- False
++
++ true
++ bin\Release\
+ TRACE
++ true
++ pdbonly
++ x86
++ prompt
++ AllRules.ruleset
++ true
++
++
++
++
++
++
+
+
++
++
++
++
++ ..\thirdparty\download\Eluant.dll
++ False
++
++
++
++
++
++ {0DFB103F-2962-400F-8C6D-E2C28CCBA633}
++ OpenRA.Game
++ False
++
++
++ {fe6c8cc0-2f07-442a-b29f-17617b3b7fc6}
++ OpenRA.Mods.Common
++ False
++
++
++
++
++
++
+
+ 4.0
+
+@@ -52,8 +93,9 @@
+ 3.5
+
+
+-
+-
+-
+-
++
++ mkdir "$(SolutionDir)mods/ra2/"
++copy "$(TargetPath)" "$(SolutionDir)mods/ra2/"
++cd "$(SolutionDir)"
++
+