diff --git a/rfb_win32/FolderManager.cxx b/rfb_win32/FolderManager.cxx
index 5e079d7..7eec8f9 100644
--- a/rfb_win32/FolderManager.cxx
+++ b/rfb_win32/FolderManager.cxx
@@ -211,3 +211,39 @@
   pftime->dwLowDateTime = (DWORD) ll;
   pftime->dwHighDateTime = (DWORD) (ll >> 32);
 }
+
+bool
+FolderManager::getDirSize(char *pFullPath, DWORD64 *dirSize)
+{
+  char fullPath[FT_FILENAME_SIZE];
+  FileInfo fi;
+  fi.add(pFullPath, 0, 0, FT_ATTR_DIR);
+  DWORD64 dirFileSize64 = 0;
+  do {
+    sprintf(fullPath, "%s\\*", fi.getNameAt(0));
+    WIN32_FIND_DATA FindFileData;
+    SetErrorMode(SEM_FAILCRITICALERRORS);
+    HANDLE hFile = FindFirstFile(fullPath, &FindFileData);
+    SetErrorMode(0);
+    
+    if (hFile != INVALID_HANDLE_VALUE) {
+      do {
+        if (strcmp(FindFileData.cFileName, ".") != 0 &&
+          strcmp(FindFileData.cFileName, "..") != 0) {
+          char buff[MAX_PATH];
+          if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {	
+            sprintf(buff, "%s\\%s", fi.getNameAt(0), FindFileData.cFileName);
+            fi.add(buff, 0, 0, FT_ATTR_DIR);
+          } else {
+            dirFileSize64 += FindFileData.nFileSizeLow;
+          }
+        }
+      } while (FindNextFile(hFile, &FindFileData));
+      FindClose(hFile);
+    }
+    fi.deleteAt(0);
+  } while (fi.getNumEntries() > 0);
+  
+  *dirSize = dirFileSize64;
+  return true;
+}
\ No newline at end of file
diff --git a/rfb_win32/FolderManager.h b/rfb_win32/FolderManager.h
index ea2a716..c7c086b 100644
--- a/rfb_win32/FolderManager.h
+++ b/rfb_win32/FolderManager.h
@@ -49,6 +49,8 @@
       unsigned int getTime70(FILETIME ftime);
       void getFiletime(unsigned int time70, FILETIME *pftime);
 
+      bool getDirSize(char *pFullPath, DWORD64 *dirSize);
+
     private:
       bool getFolderInfoWithPrefix(char *pPrefix, FileInfo *pFileInfo);
     };
diff --git a/vncviewer/FTDialog.cxx b/vncviewer/FTDialog.cxx
index 47e0c24..164de96 100644
--- a/vncviewer/FTDialog.cxx
+++ b/vncviewer/FTDialog.cxx
@@ -622,7 +622,11 @@
 }
 
 void 
-FTDialog::setStatusText(char *pText)
+FTDialog::setStatusText(LPCSTR format,...)
 {
-  SetDlgItemText(m_hwndFTDialog, IDC_FTSTATUS, pText);
+  char text[1024];
+  va_list args;
+  va_start(args, format);
+  int nSize = _vsnprintf(text, sizeof(text), format, args);
+  SetDlgItemText(m_hwndFTDialog, IDC_FTSTATUS, text);
 }
diff --git a/vncviewer/FTDialog.h b/vncviewer/FTDialog.h
index 2c9ebfa..2e70db3 100644
--- a/vncviewer/FTDialog.h
+++ b/vncviewer/FTDialog.h
@@ -52,7 +52,9 @@
       void addRemoteLVItems(FileInfo *pFI);
       void reqFolderUnavailable();
 
-      void setStatusText(char *pText);
+      void setStatusText(LPCSTR format,...);
+
+      HWND getWndHandle() { return m_hwndFTDialog; }
 
       FTProgress *m_pProgress;
       
diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx
index 2eacee3..5b01334 100644
--- a/vncviewer/FileTransfer.cxx
+++ b/vncviewer/FileTransfer.cxx
@@ -35,6 +35,9 @@
 
   m_pReader = NULL;
   m_pWriter = NULL;
+
+  m_dw64SizeSending = 0;
+  m_dirSizeRqstNum = 0;
 }
 
 FileTransfer::~FileTransfer()
@@ -108,7 +111,8 @@
   m_TransferQueue.add(pTransQueue);
 
   resizeSending();
-  
+
+  checkTransferQueue();
 }
 
 void 
@@ -123,6 +127,87 @@
 
 }
 
+void
+FileTransfer::checkTransferQueue()
+{
+  if (!isTransferEnable()) {
+    if (m_bFTDlgShown) {
+      m_pFTDialog->setStatusText("File Transfer Operation Completed Successfully");
+      PostMessage(m_pFTDialog->getWndHandle(), WM_COMMAND, MAKEWPARAM(IDC_FTLOCALRELOAD, 0), 0);
+      PostMessage(m_pFTDialog->getWndHandle(), WM_COMMAND, MAKEWPARAM(IDC_FTREMOTERELOAD, 0), 0);
+      return;
+    }
+  } else {
+    for (unsigned int i = 0; i < m_TransferQueue.getNumEntries(); i++) {
+      unsigned int flags = m_TransferQueue.getFlagsAt(i);
+      if (flags & FT_ATTR_RESIZE_NEEDED) {
+        if (flags & FT_ATTR_FILE) {
+          m_dw64SizeSending += m_TransferQueue.getSizeAt(i);
+          m_TransferQueue.clearFlagAt(i, FT_ATTR_RESIZE_NEEDED);
+        } else {
+          if (flags & FT_ATTR_DIR) {
+            if (flags & FT_ATTR_COPY_DOWNLOAD) {
+              char *pPath = m_TransferQueue.getFullRemPathAt(i);
+              m_dirSizeRqstNum = i;
+              m_pWriter->writeFileDirSizeRqst(strlen(pPath), pPath);
+              return;
+            } else {
+              if (flags & FT_ATTR_COPY_UPLOAD) {
+                FolderManager fm;
+                DWORD64 dw64Size;
+                fm.getDirSize(m_TransferQueue.getFullLocPathAt(i), &dw64Size);
+                m_dw64SizeSending += dw64Size;
+                m_TransferQueue.clearFlagAt(i, FT_ATTR_RESIZE_NEEDED);
+              }
+            } // if (flags & FT_ATTR_COPY_DOWNLOAD)
+          } // if (flags & FT_ATTR_FOLDER)
+        } // if (flags & FT_ATTR_FILE)
+      } // if (flags & FT_ATTR_NEEDED_RESIZE)
+    } // for (unsigned int i = 0; i < m_TransferQueue.getNumEntries(); i++)
+
+    unsigned int flag0 = m_TransferQueue.getFlagsAt(0);
+    
+    if (flag0 & FT_ATTR_COPY_UPLOAD) {
+      if (flag0 & FT_ATTR_FILE) {
+          uploadFile();
+          return;
+      }
+      if (flag0 & FT_ATTR_DIR) {
+        char *pFullPath = m_TransferQueue.getFullRemPathAt(0);
+        if (m_bFTDlgShown) m_pFTDialog->setStatusText("Creating Remote Folder. %s", pFullPath);
+        m_pWriter->writeFileCreateDirRqst(strlen(pFullPath), pFullPath);
+
+        char *pPath = m_TransferQueue.getRemPathAt(0);
+        m_TransferQueue.setFlagsAt(0, (flag0 | FT_ATTR_FLR_UPLOAD_CHECK));
+        m_queueFileListRqst.add(pPath, 0, 0, FT_FLR_DEST_UPLOAD);
+        m_pWriter->writeFileListRqst(strlen(pPath), pPath, 0);
+        return;
+      }
+    } else {
+      if (flag0 & FT_ATTR_COPY_DOWNLOAD) {
+        if (flag0 & FT_ATTR_FILE) {
+        }
+        if (flag0 & FT_ATTR_DIR) {
+        }
+      }
+    }
+    if (m_bFTDlgShown) m_pFTDialog->setStatusText("File Transfer Operation Failed. Unknown data in the transfer queue");
+
+  } // if (!isTransferEnable())
+}
+
+bool
+FileTransfer::uploadFile()
+{
+  return false;
+}
+
+bool
+FileTransfer::downloadFile()
+{
+  return false;
+}
+
 bool 
 FileTransfer::procFileListDataMsg()
 {
@@ -183,7 +268,10 @@
 bool 
 FileTransfer::procFileDirSizeDataMsg()
 {
-  return false;
+  DWORD64 dw64DirSize = 0;
+  m_pReader->readFileDirSizeData(&dw64DirSize);
+  m_TransferQueue.clearFlagAt(m_dirSizeRqstNum, FT_ATTR_RESIZE_NEEDED);
+  return true;
 }
 
 bool 
diff --git a/vncviewer/FileTransfer.h b/vncviewer/FileTransfer.h
index 71ecf0a..53ebbb7 100644
--- a/vncviewer/FileTransfer.h
+++ b/vncviewer/FileTransfer.h
@@ -67,6 +67,10 @@
       FileInfo m_queueFileListRqst;
 
       TransferQueue m_TransferQueue;
+
+      void checkTransferQueue();
+      bool uploadFile();
+      bool downloadFile();
       
       bool procFileListDataMsg();
       bool procFileDownloadDataMsg();
@@ -81,6 +85,9 @@
       bool procFLRDownload(FileInfo *pFI);
       bool procFLRDelete(FileInfo *pFI);
       bool procFLRRename(FileInfo *pFI);
+
+      DWORD64 m_dw64SizeSending;
+      unsigned int m_dirSizeRqstNum;
       
     };
   }
