diff --git a/vncviewer/FTDialog.cxx b/vncviewer/FTDialog.cxx
index b37554f..67d2f64 100644
--- a/vncviewer/FTDialog.cxx
+++ b/vncviewer/FTDialog.cxx
@@ -111,6 +111,7 @@
   setIcon(IDC_FTREMOTERELOAD, IDI_FTRELOAD);
 
   showLocalLVItems();
+  showRemoteLVItems();
 
   return true;
 }
@@ -255,9 +256,20 @@
   }
 }
 
+void
+FTDialog::showRemoteLVItems()
+{
+  m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
+}
+
 void 
 FTDialog::addRemoteLVItems(FileInfo *pFI)
 {
+  pFI->sort();
+  m_pRemoteLV->deleteAllItems();
+  m_pRemoteLV->addItems(pFI);
+  strcpy(m_szRemotePath, m_szRemotePathTmp);
+  SetWindowText(m_hwndRemotePath, m_szRemotePath);
 }
 
 void 
@@ -273,6 +285,12 @@
 {
 }
 
+void 
+FTDialog::reqFolderUnavailable()
+{
+  strcpy(m_szRemotePathTmp, m_szRemotePath);
+}
+
 int
 FTDialog::makeOneUpFolder(char *pPath)
 {
diff --git a/vncviewer/FTDialog.h b/vncviewer/FTDialog.h
index 81c3ba7..7c577ed 100644
--- a/vncviewer/FTDialog.h
+++ b/vncviewer/FTDialog.h
@@ -49,8 +49,8 @@
       
       static BOOL CALLBACK FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
       
-      void showLocalLVItems();
       void addRemoteLVItems(FileInfo *pFI);
+      void reqFolderUnavailable();
       
     private:
       FileTransfer *m_pFileTransfer;
@@ -60,6 +60,9 @@
       HWND m_hwndRemotePath;
       HINSTANCE m_hInstance;
       
+      void showLocalLVItems();
+      void showRemoteLVItems();
+
       void onLocalItemActivate(LPNMITEMACTIVATE lpnmia);
       void onRemoteItemActivate(LPNMITEMACTIVATE lpnmia);
 
diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx
index 44cfb13..2cc84ef 100644
--- a/vncviewer/FileTransfer.cxx
+++ b/vncviewer/FileTransfer.cxx
@@ -93,6 +93,41 @@
 bool 
 FileTransfer::procFileListDataMsg()
 {
+  FileInfo fileInfo;
+  int res = m_pReader->readFileListData(&fileInfo);
+
+  bool bResult;
+  switch (m_queueFileListRqst.getFlagsAt(0))
+  {
+  case FT_FLR_DEST_MAIN:
+    if (!m_bFTDlgShown) break;
+    
+    if (res < 0) {
+      m_pFTDialog->reqFolderUnavailable();
+      bResult = true;
+    } else {
+      bResult = procFLRMain(&fileInfo);
+    }
+    break;
+  case FT_FLR_DEST_BROWSE:
+    bResult = procFLRBrowse(&fileInfo);
+    break;
+  case FT_FLR_DEST_UPLOAD:
+    bResult = procFLRUpload(&fileInfo);
+    break;
+  case FT_FLR_DEST_DOWNLOAD:
+    bResult = procFLRDownload(&fileInfo);
+    break;
+  case FT_FLR_DEST_DELETE:
+    bResult = procFLRDelete(&fileInfo);
+    break;
+  case FT_FLR_DEST_RENAME:
+    bResult = procFLRRename(&fileInfo);
+    break;
+  }
+  m_queueFileListRqst.deleteAt(0);
+  return bResult;
+  
   return false;
 }
 
@@ -125,3 +160,48 @@
 {
   return false;
 }
+
+bool 
+FileTransfer::procFLRMain(FileInfo *pFI)
+{
+  if (m_bFTDlgShown) m_pFTDialog->addRemoteLVItems(pFI);
+  return true;
+}
+
+bool 
+FileTransfer::procFLRBrowse(FileInfo *pFI)
+{
+  return false;
+}
+
+bool 
+FileTransfer::procFLRUpload(FileInfo *pFI)
+{
+  return false;
+}
+
+bool 
+FileTransfer::procFLRDownload(FileInfo *pFI)
+{
+  return false;
+}
+
+bool 
+FileTransfer::procFLRDelete(FileInfo *pFI)
+{
+  return false;
+}
+
+bool 
+FileTransfer::procFLRRename(FileInfo *pFI)
+{
+  return false;
+}
+
+void 
+FileTransfer::requestFileList(char *pPath, int dest, bool bDirOnly)
+{
+  m_queueFileListRqst.add(pPath, 0, 0, dest);
+
+  m_pWriter->writeFileListRqst(pPath, bDirOnly);
+}
\ No newline at end of file
diff --git a/vncviewer/FileTransfer.h b/vncviewer/FileTransfer.h
index 7df0c18..6bf36c9 100644
--- a/vncviewer/FileTransfer.h
+++ b/vncviewer/FileTransfer.h
@@ -27,6 +27,8 @@
 #include <rdr/InStream.h>
 #include <rdr/OutStream.h>
 #include <rfb/msgTypes.h>
+#include <rfb/FileInfo.h>
+#include <rfb/TransferQueue.h>
 #include <vncviewer/FTDialog.h>
 #include <vncviewer/FTMsgReader.h>
 #include <vncviewer/FTMsgWriter.h>
@@ -45,6 +47,8 @@
       bool processFTMsg(int type);
       bool show();
 
+      void requestFileList(char *pPath, int dest, bool bDirOnly);
+
     private:
       bool m_bFTDlgShown;
       bool m_bInitialized;
@@ -53,14 +57,23 @@
 
       FTMsgReader *m_pReader;
       FTMsgWriter *m_pWriter;
+
+      FileInfo m_queueFileListRqst;
       
       bool procFileListDataMsg();
-      bool procFileSpecDirDataMsg();
       bool procFileDownloadDataMsg();
       bool procFileUploadCancelMsg();
       bool procFileDownloadFailedMsg();
       bool procFileDirSizeDataMsg();
       bool procFileLastRqstFailedMsg();
+      
+      bool procFLRMain(FileInfo *pFI);
+      bool procFLRBrowse(FileInfo *pFI);
+      bool procFLRUpload(FileInfo *pFI);
+      bool procFLRDownload(FileInfo *pFI);
+      bool procFLRDelete(FileInfo *pFI);
+      bool procFLRRename(FileInfo *pFI);
+      
     };
   }
 }
