diff --git a/scripts/Windows/Collections/Personal.ps1 b/scripts/Windows/Collections/Personal.ps1
index 9f47acaa..53ef3f8f 100644
--- a/scripts/Windows/Collections/Personal.ps1
+++ b/scripts/Windows/Collections/Personal.ps1
@@ -32,4 +32,5 @@ function Restore-PersonalApps([Context] $context) {
     Restore-Git $context;
     Restore-LogitechGHUB $context;
     Restore-TmNations $context;
+    Restore-TmUnited $context;
 }
diff --git a/scripts/Windows/Software/TrackMania United Forever/Manage.ps1 b/scripts/Windows/Software/TrackMania United Forever/Manage.ps1
index a23f1d9b..a279357d 100644
--- a/scripts/Windows/Software/TrackMania United Forever/Manage.ps1	
+++ b/scripts/Windows/Software/TrackMania United Forever/Manage.ps1	
@@ -8,4 +8,31 @@ $null = New-Module {
         Write-Host "Backing up TrackMania United Forever";
         $context.Backup($path, $context.SoftwareArchive($softwareName), @("-i@`"$PSScriptRoot/include.txt`""));
     }
+
+    function Restore-TmUnited([Context] $context) {
+        $feature = "DirectPlay";
+        Write-Host "Restoring TrackMania United Forever";
+
+        if (-not (Get-WindowsOptionalFeature -Online -FeatureName $feature).State) {
+            Enable-WindowsOptionalFeature -Online -FeatureName $feature;
+        }
+
+        Write-Information "Determining location of setup file";
+        $exePath;
+
+        while (-not (Test-Path $exePath)) {
+            $exePath = Read-Host "Please drag'n'drop the setup file here or type the absolute path to the file";
+
+            if (-not (Test-Path $exePath)) {
+                Write-Error "A file at the specified path could not be found.";
+            }
+        }
+
+        Write-Information "Installing TrackMania United Forever";
+        Start-Process -Wait -FilePath $exePath -ArgumentList @("/Silent");
+        Write-Information "Removing desktop icon";
+        Remove-Item "$env:PUBLIC\Desktop\*TmUnitedForever*";
+        Write-Information "Restoring files";
+        $context.Restore($context.SoftwareArchive($softwareName), $path);
+    }
 }