diff --git a/Resources/PostBuild.ps1 b/Resources/PostBuild.ps1
index 139129c9..66564dbb 100644
--- a/Resources/PostBuild.ps1
+++ b/Resources/PostBuild.ps1
@@ -1,41 +1,71 @@
-Param([Parameter(Mandatory = $True, Position = 1)][string] $dir)
+Param(
+  [Parameter(Mandatory = $True, Position = 1)][string] $targetDir,
+  [Parameter(Mandatory = $True, Position = 2)][string] $projectDir
+)
+
 $ErrorActionPreference = "Stop"
 
-Set-Location $dir
-
-$version = (Get-Item TweetDuck.exe).VersionInfo.FileVersion
-Write-Host "TweetDuck version" $version
-
-function Check-Carriage-Return{
-  Param([Parameter(Mandatory = $True, Position = 1)] $fname)
-  
-  $file = @(Get-ChildItem -Include $fname -Recurse)[0]
-  
-  if ((Get-Content -Path $file.FullName -Raw).Contains("`r")){
-    Throw "$fname cannot contain carriage return"
-  }
-  
-  Write-Host "Verified" $file.FullName.Substring($dir.Length)
-}
-
-function Rewrite-File{
-  [CmdletBinding()]
-  Param([Parameter(Mandatory = $True, ValueFromPipeline = $True)][array] $lines, [Parameter(Mandatory = $True, Position = 1)] $file)
-  
-  $relative = $file.FullName.Substring($dir.Length)
-  
-  if ($relative.StartsWith("scripts\")){
-    $lines = (,("#" + $version) + $lines)
-  }
-  
-  $lines | Where { $_ -ne '' } | Set-Content -Path $file.FullName
-  Write-Host "Processed" $relative
-}
-
 try{
+  Write-Host "------------------------------"
+  
+  $version = (Get-Item (Join-Path $targetDir "TweetDuck.exe")).VersionInfo.FileVersion
+  Write-Host "TweetDuck version" $version
+  
+  Write-Host "------------------------------"
+  
+  # Cleanup
+  
+  Remove-Item -Path (Join-Path $targetDir "locales\*.pak") -Exclude "en-US.pak"
+  
+  # Copy resources
+  
+  Copy-Item (Join-Path $projectDir "bld\Resources\CEFSHARP-LICENSE.txt") -Destination $targetDir -Force
+  Copy-Item (Join-Path $projectDir "LICENSE.md") -Destination (Join-Path $targetDir "LICENSE.txt") -Force      
+  
+  New-Item -ItemType directory -Path $targetDir -Name "scripts" | Out-Null
+  New-Item -ItemType directory -Path $targetDir -Name "plugins" | Out-Null
+  New-Item -ItemType directory -Path $targetDir -Name "plugins\official" | Out-Null
+  New-Item -ItemType directory -Path $targetDir -Name "plugins\user" | Out-Null
+  
+  Copy-Item (Join-Path $projectDir "Resources\Scripts\*") -Destination (Join-Path $targetDir "scripts") -Recurse
+  Copy-Item (Join-Path $projectDir "Resources\Plugins\*") -Exclude ".debug", "emoji-instructions.txt" -Destination (Join-Path $targetDir "plugins\official") -Recurse
+  
+  # Post processing
+  
+  function Check-Carriage-Return{
+    Param(
+      [Parameter(Mandatory = $True, Position = 1)] $fname
+    )
+    
+    $file = @(Get-ChildItem -Path $targetDir -Include $fname -Recurse)[0]
+    
+    if ((Get-Content -Path $file.FullName -Raw).Contains("`r")){
+      Throw "$fname cannot contain carriage return"
+    }
+    
+    Write-Host "Verified" $file.FullName.Substring($targetDir.Length)
+  }
+  
+  function Rewrite-File{
+    [CmdletBinding()]
+    Param(
+      [Parameter(Mandatory = $True, ValueFromPipeline = $True)][array] $lines,
+      [Parameter(Mandatory = $True, Position = 1)] $file
+    )
+    
+    $relativePath = $file.FullName.Substring($targetDir.Length)
+    
+    if ($relativePath.StartsWith("scripts\")){
+      $lines = (,("#" + $version) + $lines)
+    }
+    
+    $lines | Where { $_ -ne '' } | Set-Content -Path $file.FullName
+    Write-Host "Processed" $relativePath
+  }
+  
   Check-Carriage-Return("emoji-ordering.txt")
 
-  ForEach($file in Get-ChildItem -Filter *.js -Exclude configuration.default.js -Recurse){
+  ForEach($file in Get-ChildItem -Path $targetDir -Filter "*.js" -Exclude "configuration.default.js" -Recurse){
     $lines = Get-Content -Path $file.FullName
     $lines = $lines | % { $_.TrimStart() }
     $lines = $lines -Replace '^(.*?)((?<=^|[;{}()])\s?//(?:\s.*|$))?$', '$1'
@@ -43,7 +73,7 @@ try{
     ,$lines | Rewrite-File $file
   }
 
-  ForEach($file in Get-ChildItem -Filter *.css -Recurse){
+  ForEach($file in Get-ChildItem -Path $targetDir -Filter "*.css" -Recurse){
     $lines = Get-Content -Path $file.FullName
     $lines = $lines -Replace '\s*/\*.*?\*/', ''
     $lines = $lines -Replace '^\s+(.+):\s?(.+?)(?:\s?(!important))?;$', '$1:$2$3;'
@@ -51,10 +81,12 @@ try{
     @(($lines | Where { $_ -ne '' }) -Join ' ') | Rewrite-File $file
   }
 
-  ForEach($file in Get-ChildItem -Filter *.html -Recurse){
+  ForEach($file in Get-ChildItem -Path $targetDir -Filter "*.html" -Recurse){
     $lines = Get-Content -Path $file.FullName
     ,($lines | % { $_.TrimStart() }) | Rewrite-File $file
   }
+  
+  Write-Host "------------------------------"
 }catch{
   Write-Host "Encountered an error while running PostBuild.ps1 on line" $_.InvocationInfo.ScriptLineNumber
   Write-Host $_
diff --git a/TweetDuck.csproj b/TweetDuck.csproj
index 6dda928c..ec1ac52b 100644
--- a/TweetDuck.csproj
+++ b/TweetDuck.csproj
@@ -402,37 +402,20 @@
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
-    <PostBuildEvent>xcopy "$(ProjectDir)LICENSE.md" "$(TargetDir)" /Y
-del "$(TargetDir)LICENSE.txt"
-ren "$(TargetDir)LICENSE.md" "LICENSE.txt"
-xcopy "$(ProjectDir)bld\Resources\CEFSHARP-LICENSE.txt" "$(TargetDir)" /Y
-
-rmdir "$(TargetDir)scripts" /S /Q
-mkdir "$(TargetDir)scripts"
-xcopy "$(ProjectDir)Resources\Scripts\*" "$(TargetDir)scripts\" /E /Y
-
-rmdir "$(TargetDir)plugins" /S /Q
-mkdir "$(TargetDir)plugins"
-mkdir "$(TargetDir)plugins\official"
-mkdir "$(TargetDir)plugins\user"
-xcopy "$(ProjectDir)Resources\Plugins\*" "$(TargetDir)plugins\official\" /E /Y
-rmdir "$(TargetDir)plugins\official\.debug" /S /Q
-del "$(TargetDir)plugins\official\emoji-keyboard\emoji-instructions.txt"
-
-rmdir "$(ProjectDir)bin\Debug"
+    <PostBuildEvent>rmdir "$(ProjectDir)bin\Debug"
 rmdir "$(ProjectDir)bin\Release"
 
-attrib +R "$(TargetDir)locales\en-US.pak"
-del /Q /A:-R "$(TargetDir)locales\*.pak"
-attrib -R "$(TargetDir)locales\en-US.pak"
+rmdir "$(TargetDir)scripts" /S /Q
+rmdir "$(TargetDir)plugins" /S /Q
+
+powershell -ExecutionPolicy Unrestricted -File "$(ProjectDir)Resources\PostBuild.ps1" "$(TargetDir)\" "$(ProjectDir)\"
 
 if $(ConfigurationName) == Debug (
   rmdir "$(TargetDir)plugins\official\.debug" /S /Q
   mkdir "$(TargetDir)plugins\user\.debug"
   xcopy "$(ProjectDir)Resources\Plugins\.debug\*" "$(TargetDir)plugins\user\.debug\" /E /Y
 )
-
-powershell -ExecutionPolicy Unrestricted -File "$(ProjectDir)Resources\PostBuild.ps1" "$(TargetDir)\"</PostBuildEvent>
+</PostBuildEvent>
   </PropertyGroup>
   <Target Name="AfterBuild" Condition="$(ConfigurationName) == Release">
     <Exec Command="del &quot;$(TargetDir)*.pdb&quot;" />