diff --git a/contrib/win32/openssh/OpenSSHTestHelper.psm1 b/contrib/win32/openssh/OpenSSHTestHelper.psm1
index 1d46420bb..a2a8a9774 100644
--- a/contrib/win32/openssh/OpenSSHTestHelper.psm1
+++ b/contrib/win32/openssh/OpenSSHTestHelper.psm1
@@ -20,6 +20,8 @@ $Script:UnitTestResultsFile = Join-Path $TestDataPath $UnitTestResultsFileName
 $Script:TestSetupLogFile = Join-Path $TestDataPath $TestSetupLogFileName
 $Script:E2ETestDirectory = Join-Path $repositoryRoot.FullName -ChildPath "regress\pesterTests"
 $Script:WindowsInBox = $false
+$Script:EnableAppVerifier = $true
+$Script:PostmortemDebugging = $false
 
 <#
     .Synopsis
@@ -32,8 +34,10 @@ function Set-OpenSSHTestEnvironment
     param
     (   
         [string] $OpenSSHBinPath,
-        [string] $TestDataPath = "$env:SystemDrive\OpenSSHTests",
-        [Boolean] $DebugMode = $false
+        [string] $TestDataPath = "$env:SystemDrive\OpenSSHTests",        
+        [Boolean] $DebugMode = $false,
+        [Switch] $NoAppVerifier,
+        [Switch] $PostmortemDebugging
     )
     
     if($PSBoundParameters.ContainsKey("Verbose"))
@@ -51,7 +55,11 @@ function Set-OpenSSHTestEnvironment
     $Script:UnitTestResultsFile = Join-Path $TestDataPath "UnitTestResults.txt"
     $Script:TestSetupLogFile = Join-Path $TestDataPath "TestSetupLog.txt"
     $Script:UnitTestDirectory = Get-UnitTestDirectory
-    
+    $Script:EnableAppVerifier = -not ($NoAppVerifier.IsPresent)
+    if($Script:EnableAppVerifier)
+    {
+        $Script:PostmortemDebugging = $PostmortemDebugging.IsPresent
+    }
 
     $Global:OpenSSHTestInfo = @{        
         "Target"= "localhost";                                 # test listener name
@@ -67,6 +75,8 @@ function Set-OpenSSHTestEnvironment
         "E2ETestDirectory" = $Script:E2ETestDirectory          # the directory of E2E tests
         "UnitTestDirectory" = $Script:UnitTestDirectory        # the directory of unit tests
         "DebugMode" = $DebugMode                               # run openssh E2E in debug mode
+        "EnableAppVerifier" = $Script:EnableAppVerifier
+        "PostmortemDebugging" = $Script:PostmortemDebugging
         }
         
     #if user does not set path, pick it up
@@ -237,6 +247,24 @@ WARNING: Following changes will be made to OpenSSH configuration
     cmd /c "ssh-add -D 2>&1 >> $Script:TestSetupLogFile"
     Repair-UserKeyPermission -FilePath $testPriKeypath -confirm:$false
     cmd /c "ssh-add $testPriKeypath 2>&1 >> $Script:TestSetupLogFile"
+
+    #Enable AppVerifier
+    if($EnableAppVerifier)
+    {        
+        # clear all applications in application verifier first
+        &  $env:windir\System32\appverif.exe -disable * -for *  | out-null
+        Get-ChildItem "$($script:OpenSSHBinPath)\*.exe" | % {
+            & $env:windir\System32\appverif.exe -verify $_.Name  | out-null
+        }
+
+        if($Script:PostmortemDebugging -and (Test-path $Script:WindbgPath))
+        {            
+            # enable Postmortem debugger            
+            New-ItemProperty "HKLM:Software\Microsoft\Windows NT\CurrentVersion\AeDebug" -Name Debugger -Type String -Value "`"$Script:WindbgPath`" -p %ld -e %ld -g" -Force -ErrorAction SilentlyContinue | Out-Null
+            New-ItemProperty "HKLM:Software\Microsoft\Windows NT\CurrentVersion\AeDebug" -Name Auto -Type String -Value "1" -Force -ErrorAction SilentlyContinue | Out-Null
+        }
+    }
+
     Backup-OpenSSHTestInfo
 }
 #TODO - this is Windows specific. Need to be in PAL
@@ -294,6 +322,31 @@ function Install-OpenSSHTestDependencies
         Write-Log -Message "Installing Pester..." 
         choco install Pester -y --force --limitoutput 2>&1 >> $Script:TestSetupLogFile
     }
+
+    if($Script:PostmortemDebugging -or (($OpenSSHTestInfo -ne $null) -and ($OpenSSHTestInfo["PostmortemDebugging"])))
+    {
+        $folderName = "x86"
+        $pathroot = $env:ProgramFiles
+        if($env:PROCESSOR_ARCHITECTURE -ieq "AMD64")
+        {
+            $folderName = "x64"
+            $pathroot = ${env:ProgramFiles(x86)}
+        }
+        $Script:WindbgPath = "$pathroot\Windows Kits\8.1\Debuggers\$folderName\windbg.exe"
+        if(-not (Test-Path $Script:WindbgPath))
+        {
+            $Script:WindbgPath = "$pathroot\Windows Kits\10\Debuggers\$folderName\windbg.exe"
+            if(-not (Test-Path $Script:WindbgPath))
+            {
+                choco install windbg -y --force --limitoutput 2>&1 >> $Script:TestSetupLogFile
+            }            
+        }        
+    }
+
+    if(($Script:EnableAppVerifier -or (($OpenSSHTestInfo -ne $null) -and ($OpenSSHTestInfo["EnableAppVerifier"]))) -and (-not (Test-path $env:windir\System32\appverif.exe)))
+    {
+        choco install appverifier -y --force --limitoutput 2>&1 >> $Script:TestSetupLogFile
+    }
 }
 
 function Install-OpenSSHUtilsModule
@@ -396,6 +449,18 @@ function Clear-OpenSSHTestEnvironment
     Get-ChildItem "$sshBinPath\sshtest*hostkey*.pub"| % {
         ssh-add-hostkey.ps1 -Delete_key $_.FullName
     }
+
+    if($Global:OpenSSHTestInfo["EnableAppVerifier"] -and (Test-path $env:windir\System32\appverif.exe))
+    {
+        # clear all applications in application verifier
+        &  $env:windir\System32\appverif.exe -disable * -for * | out-null
+    }
+
+    if($Global:OpenSSHTestInfo["PostmortemDebugging"])
+    {
+        Remove-ItemProperty "HKLM:Software\Microsoft\Windows NT\CurrentVersion\AeDebug" -Name Debugger -ErrorAction SilentlyContinue -Force | Out-Null
+        Remove-ItemProperty "HKLM:Software\Microsoft\Windows NT\CurrentVersion\AeDebug" -Name Auto -ErrorAction SilentlyContinue -Force | Out-Null
+    }
     
     Remove-Item $sshBinPath\sshtest*hostkey* -Force -ErrorAction SilentlyContinue    
     #Restore sshd_config
@@ -442,7 +507,7 @@ function Clear-OpenSSHTestEnvironment
     {      
         Write-Log -Message "Uninstalling Module OpenSSHUtils..."
         Uninstall-OpenSSHUtilsModule
-    }    
+    }
 }
 
 <#
diff --git a/contrib/win32/win32compat/termio.c b/contrib/win32/win32compat/termio.c
index 3a14812bb..5494befca 100644
--- a/contrib/win32/win32compat/termio.c
+++ b/contrib/win32/win32compat/termio.c
@@ -109,6 +109,7 @@ ReadThread(_In_ LPVOID lpParameter)
 				pio->read_details.buf_size, &read_status.transferred, NULL)) {
 				read_status.error = GetLastError();
 				debug("ReadThread - ReadFile failed %d, io:%p", GetLastError(), pio);
+				return -1;
 			}
 
 			char *p = NULL;
@@ -128,6 +129,7 @@ ReadThread(_In_ LPVOID lpParameter)
 		    pio->read_details.buf_size, &read_status.transferred, NULL)) {
 			read_status.error = GetLastError();
 			debug("ReadThread - ReadFile failed %d, io:%p", GetLastError(), pio);
+			return -1;
 		}
 	}
 	if (0 == QueueUserAPC(ReadAPCProc, main_thread, (ULONG_PTR)pio)) {
diff --git a/sftp.c b/sftp.c
index b89ae9dff..6b1eefb06 100644
--- a/sftp.c
+++ b/sftp.c
@@ -2518,7 +2518,8 @@ main(int argc, char **argv)
 			usage();
 
 		userhost = xstrdup(argv[optind]);
-		file2 = argv[optind+1];
+		if(argc > optind + 1)
+			file2 = argv[optind+1];
 
 		if ((host = strrchr(userhost, '@')) == NULL)
 			host = userhost;