diff --git a/Make-MinGW.bat b/Make-MinGW.bat
index fb6d6ecb1..d130a888f 100644
--- a/Make-MinGW.bat
+++ b/Make-MinGW.bat
@@ -60,9 +60,11 @@ REM Main function Ends
 :SET_PGADMIN4_ENVIRONMENT
     IF "%PYTHON_HOME%" == ""   SET "PYTHON_HOME=C:\Python27"
     IF "%PYTHON_DLL%" == ""    SET "PYTHON_DLL=C:\Windows\SysWOW64\python27.dll"
-    IF "%QTDIR%" == ""         SET "QTDIR=C:\Qt\5.8\mingw53_32"
+    IF "%QTDIR%" == ""         SET "QTDIR=C:\Qt\5.9.1\mingw53_32"
     IF "%PGDIR%" == ""         SET "PGDIR=C:\Program Files (x86)\PostgreSQL\9.6"
     IF "%INNOTOOL%" == ""      SET "INNOTOOL=C:\Program Files (x86)\Inno Setup 5"
+    IF "%YARNDIR%" == ""       SET "YARNDIR=C:\Program Files\Yarn"
+    IF "%NODEJSDIR%" == ""     SET "NODEJSDIR=C:\Program Files\nodejs"
     IF "%VCDIR%" == ""         SET "VCDIR=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC"
     IF "%VCREDIST%" == ""      SET "VCREDIST=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\1033\vcredist_x86.exe"
     IF "%SIGNTOOL%" == ""      SET "SIGNTOOL=C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe"
@@ -104,6 +106,8 @@ REM Main function Ends
     ECHO QTDIR       = %QTDIR%
     ECHO QMAKE       = %QMAKE%
     ECHO QT_VERSION  = %QT_VERSION%
+    ECHO YARNDIR     = %YARNDIR%
+    ECHO NODEJSDIR   = %NODEJSDIR%
     ECHO BROWSER     = QtWebKit
     ECHO PYTHON_HOME = %PYTHON_HOME%
     ECHO PYTHON_DLL  = %PYTHON_DLL%
@@ -119,6 +123,8 @@ REM Main function Ends
     IF NOT EXIST "%PYTHON_HOME%"       GOTO err_handle_python
     IF NOT EXIST "%PYTHON_DLL%"        GOTO err_handle_python
     IF NOT EXIST "%PGDIR%"             GOTO err_handle_pg
+    IF NOT EXIST "%YARNDIR%"           GOTO err_handle_yarn
+    IF NOT EXIST "%NODEJSDIR%"         GOTO err_handle_nodejs
 
     REM get Python version ex. 2.7.1 will get as 27
     FOR /f "tokens=1 DELims=." %%G IN ('%PYTHON_HOME%/python.exe -c "import sys; print(sys.version.split(' ')[0])"') DO SET PYTHON_MAJOR=%%G
@@ -127,8 +133,7 @@ REM Main function Ends
 
     IF NOT EXIST "%PYTHON_HOME%\Scripts\virtualenv.exe" GOTO err_handle_pythonvirtualenv
 
-    SET PATH=%PGDIR%;%PGDIR%\bin;%PATH%
-
+    SET PATH=%PGDIR%;%PGDIR%\bin;%QTDIR%\..\..\Tools\mingw530_32\bin;%NODEJSDIR%;%YARNDIR%\bin;%PATH%;
     GOTO:eof
 
 :CREATE_VIRTUAL_ENV
@@ -448,6 +453,20 @@ REM Main function Ends
     exit /B 1
     GOTO EXIT
 
+:err_handle_yarn
+    ECHO %YARNDIR% does not exist.
+	ECHO Please Install YARN and SET the YARNDIR enviroment variable.
+	ECHO SET "YARNDIR=<YARN PATH>"
+    exit /B 1
+    GOTO EXIT
+
+:err_handle_nodejs
+    ECHO %NODEJSDIR% does not exist.
+	ECHO Please Install NodeJs and SET the NODEJSDIR enviroment variable.
+	ECHO SET "NODEJSDIR=<NODEJS PATH>"
+    exit /B 1
+    GOTO EXIT
+
 :err_handle_pg
     ECHO %PGDIR% does not exist.
     ECHO Please Install Postgres and SET enviroment Variable
diff --git a/pkg/win32/README.txt b/pkg/win32/README.txt
index 9a1004f2a..cf33a2b68 100644
--- a/pkg/win32/README.txt
+++ b/pkg/win32/README.txt
@@ -12,7 +12,7 @@ To generate a pgAdmin 4 installer for Windows bit, the following packages must b
 3. PostgreSQL installation
   - PostgreSQL 9.1 or above from http://www.postgresql.org/
 
-4. Inno Setup Installer
+4. Inno Setup Installer (unicode)
    - 5.0 and above from http://www.jrsoftware.org/isdl.php
 
 5. Microsoft visual studio (2008 and above)
diff --git a/pkg/win32/installer.iss.in b/pkg/win32/installer.iss.in
index 4b939a8ed..16dd0b770 100644
--- a/pkg/win32/installer.iss.in
+++ b/pkg/win32/installer.iss.in
@@ -7,6 +7,8 @@
 #define MyAppFullVersion MYAPP_FULLVERSION
 #define MyAppArchitecturesMode MYAPP_ARCHITECTURESMODE
 #define MyAppVCDist MYAPP_VCDIST
+#define MyAppInvalidPath "Please provide a valid path."
+
 [Setup]
 AppId={#MyAppName}{#MyAppVersion}
 AppName={#MyAppName}
@@ -32,6 +34,15 @@ ArchitecturesInstallIn64BitMode={#MyAppArchitecturesMode}
 [Languages]
 Name: "english"; MessagesFile: "compiler:Default.isl"
 
+;This section will override the standered error message by default which is called internally and  we don't have a controll over this.
+[Messages]
+InvalidPath={#MyAppInvalidPath}
+
+;This section would be used for customized error message display.
+[CustomMessages]
+english.NewerVersionExists=A newer version of {#MyAppName}
+english.InvalidPath={#MyAppInvalidPath}
+
 [Icons]
 Name: {group}\{#MyAppName} {#MyAppVersion}; Filename: {app}\runtime\{#MyAppExeName}; IconFilename: {app}\pgAdmin4.ico; WorkingDir: {app}\runtime;
 
@@ -42,9 +53,6 @@ Source: "..\..\win-build\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdi
 Filename: "{app}\installer\{#MyAppVCDist}"; StatusMsg: "VC runtime redistributable package"; Parameters: "/passive /verysilent /norestart"; Check: InstallVC;
 Filename: "{app}\runtime\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: runascurrentuser nowait postinstall skipifsilent
 
-[CustomMessages]
-english.NewerVersionExists=A newer version of {#MyAppName}
-
 [Registry]
 Root: HKLM; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; Flags: uninsdeletekeyifempty
 Root: HKLM; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; Flags: uninsdeletekey
@@ -52,28 +60,68 @@ Root: HKLM; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; ValueType: string;
 Root: HKLM; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; ValueType: string; ValueName: "Version"; ValueData: "{#MyAppFullVersion}"
 
 [Code]
-// find current version before installation
+var
+  UpgradeMode: Boolean;
+
+function IsPathValid(Path: string): Boolean;
+var
+  I: Integer;
+  Ret: Boolean;
+begin
+  Ret := True;
+  Path := Uppercase(Path);
+  Result :=
+    (Length(Path) >= 3) and
+    (Path[1] >= 'A') and (Path[1] <= 'Z') and
+    (Path[2] = ':') and
+    (Path[3] = '\');
+
+  if Result then
+  begin
+    for I := 3 to Length(Path) do
+      begin
+        case Path[I] of
+          '0'..'9', 'A'..'Z', '\', ' ', '.', '-', '(', ')':
+          else
+          begin
+            Ret := False;
+            break;
+          end;
+      end;
+    end;
+  end;
+  Result := Ret;
+end;
+
+// Find current version before installation
 function InitializeSetup: Boolean;
 var
   Version: String;
 begin
   if RegValueExists(HKEY_LOCAL_MACHINE,'Software\{#MyAppName}\{#MyAppVersion}', 'Version') then
+  begin
+	UpgradeMode := True;
+    RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\{#MyAppName}\{#MyAppVersion}', 'Version', Version);
+    if Version > '{#MyAppFullVersion}' then
     begin
-      RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\{#MyAppName}\{#MyAppVersion}', 'Version', Version);
-      if Version > '{#MyAppFullVersion}' then
-        begin
-          MsgBox(ExpandConstant('{cm:NewerVersionExists}' + '(v' + Version + ') is already installed' ), mbInformation, MB_OK);
-          Result := False;
-        end
-      else
-        begin
-          Result := True;
-        end
+      MsgBox(ExpandConstant('{cm:NewerVersionExists}' + '(v' + Version + ') is already installed' ), mbInformation, MB_OK);
+      Result := False;
     end
-  else
+    else
     begin
       Result := True;
-    end
+    end;
+  end
+  else
+  begin
+    Result := True;
+	UpgradeMode := False;
+  end;
+end;
+
+function IsUpgradeMode(): Boolean;
+begin
+  Result := UpgradeMode;
 end;
 
 function InstallVC: Boolean;
@@ -103,24 +151,45 @@ begin
             end
           end
           else
-          begin
-            DelWebfolder(FilePath);
-            RemoveDir(FilePath);
-          end
-        end;
+            begin
+              DelWebfolder(FilePath);
+              RemoveDir(FilePath);
+            end;
+          end;
         until not FindNext(FindRec);
-    finally
-    FindClose(FindRec);
-    end
-  end
+      finally
+      FindClose(FindRec);
+    end;
+  end;
 end;
 
-procedure CurPageChanged(CurPageID: Integer);
+//procedure CurPageChanged(CurPageID: Integer);
+function NextButtonClick(CurPageID: Integer): Boolean;
+var
+  Ret: Boolean;
 begin
-  if CurPageID=wpReady then
-  begin
-    DelWebfolder(ExpandConstant('{app}\web'));
-  end
+  Ret := True;
+  case CurPageID of
+    wpSelectDir:
+      begin
+        // Validate InstallDir path
+        if Not IsPathValid(ExpandConstant('{app}')) then
+        begin
+          MsgBox(ExpandConstant('{cm:InvalidPath}'), mbError, MB_OK);
+          Ret := False;
+        end;
+      end;
+
+    wpReady:
+	begin
+      if (IsUpgradeMode) then
+      begin
+        DelWebfolder(ExpandConstant('{app}\web'));
+      end;
+	end;
+  end;
+
+  Result := Ret;
 end;
 
 // End of program