diff --git a/rfb/CMsgReaderV3.cxx b/rfb/CMsgReaderV3.cxx
index b8242a0..9370804 100644
--- a/rfb/CMsgReaderV3.cxx
+++ b/rfb/CMsgReaderV3.cxx
@@ -58,8 +58,15 @@
     case msgTypeSetColourMapEntries: readSetColourMapEntries(); break;
     case msgTypeBell:                readBell(); break;
     case msgTypeServerCutText:       readServerCutText(); break;
+
     case msgTypeFileListData:
+    case msgTypeFileDownloadData:
+    case msgTypeFileUploadCancel:
+    case msgTypeFileDownloadFailed:
+    case msgTypeFileDirSizeData:
+    case msgTypeFileLastRequestFailed:
       handler->processFTMsg(type); break;
+
     default:
       fprintf(stderr, "unknown message type %d\n", type);
       throw Exception("unknown message type");
diff --git a/rfb/FileManager.cxx b/rfb/FileManager.cxx
index 1bd3ab6..44d7890 100644
--- a/rfb/FileManager.cxx
+++ b/rfb/FileManager.cxx
@@ -43,7 +43,7 @@
   strcpy(m_szFilename, pFilename);
 
   m_pFile = fopen(m_szFilename, m_szMode);
-  
+
   if (m_pFile == NULL) {
     return false;
   } else {
diff --git a/rfb/FileReader.cxx b/rfb/FileReader.cxx
index 13c677f..063b742 100644
--- a/rfb/FileReader.cxx
+++ b/rfb/FileReader.cxx
@@ -33,7 +33,7 @@
 bool 
 FileReader::read(void *pBuf, unsigned int count, unsigned int *pBytesRead)
 {
-  if (m_pFile == NULL) return false;
+  if (!isCreated()) return false;
 
   *pBytesRead = fread(pBuf, 1, count, m_pFile);
   
@@ -41,3 +41,9 @@
  
   return true;
 }
+
+unsigned int 
+FileReader::getTime()
+{
+  return 0;
+}
diff --git a/rfb/FileReader.h b/rfb/FileReader.h
index e6ec064..12cdfa1 100644
--- a/rfb/FileReader.h
+++ b/rfb/FileReader.h
@@ -32,6 +32,8 @@
     FileReader();
 
     bool read(void *pBuf, unsigned int count, unsigned int *pBytesRead);
+
+    unsigned int getTime();
   };
 }
 #endif // __RFB_FILEREADER_H__
diff --git a/rfb/FileWriter.cxx b/rfb/FileWriter.cxx
index 9d8c4a5..9c06c37 100644
--- a/rfb/FileWriter.cxx
+++ b/rfb/FileWriter.cxx
@@ -33,7 +33,7 @@
 bool 
 FileWriter::write(const void *pBuf, unsigned int count, unsigned int *pBytesWritten)
 {
-  if (m_pFile == NULL) return false;
+  if (!isCreated()) return false;
 
   unsigned int bytesWritten = fwrite(pBuf, 1, count, m_pFile);
 
@@ -42,3 +42,9 @@
   *pBytesWritten = bytesWritten;
   return true;
 }
+
+bool 
+FileWriter::setTime(unsigned int modTime)
+{
+  return false;
+}
diff --git a/rfb/FileWriter.h b/rfb/FileWriter.h
index 3b3318a..e522ae1 100644
--- a/rfb/FileWriter.h
+++ b/rfb/FileWriter.h
@@ -32,6 +32,7 @@
     FileWriter();
 
     bool write(const void *pBuf, unsigned int count, unsigned int *pBytesWritten);
+    bool setTime(unsigned int modTime);
   };
 }
 
diff --git a/vncviewer/FTMsgReader.cxx b/vncviewer/FTMsgReader.cxx
index e3652d0..7f0c330 100644
--- a/vncviewer/FTMsgReader.cxx
+++ b/vncviewer/FTMsgReader.cxx
@@ -63,24 +63,27 @@
   return numFiles;
 }
 
-int 
-FTMsgReader::readFileDownloadData(void *pFile, unsigned int *pModTime)
+void * 
+FTMsgReader::readFileDownloadData(unsigned int *pSize, unsigned int *pModTime)
 {
   unsigned char compressLevel = m_pInStream->readU8();
   int realSize = m_pInStream->readU16();
   int compressedSize = m_pInStream->readU16();
 
   if ((realSize == 0) && (compressedSize == 0)) {
+    *pSize = 0;
     *pModTime = m_pInStream->readU32();
-    return 0;
+    return NULL;
   } else {
-    pFile = malloc(compressedSize);
+    char *pFile = new char [compressedSize];
     if (pFile == NULL) {
       m_pInStream->skip(compressedSize);
-      return -1;
+      *pModTime = 0;
+      return NULL;
     } else {
       m_pInStream->readBytes(pFile, compressedSize);
-      return compressedSize;
+      *pSize = compressedSize;
+      return pFile;
     }
   }
 }
diff --git a/vncviewer/FTMsgReader.h b/vncviewer/FTMsgReader.h
index 549dc0c..ed51d51 100644
--- a/vncviewer/FTMsgReader.h
+++ b/vncviewer/FTMsgReader.h
@@ -38,11 +38,11 @@
       ~FTMsgReader();
 
       int readFileListData(FileInfo *pFileInfo);
-      int readFileDownloadData(void *pFile, unsigned int *pModTime);
       int readFileUploadCancel(void *pReason);
       int readFileDownloadFailed(void *pReason);
       int readFileDirSizeData(DWORD64 *pdw64DirSize);
       int readFileLastRqstFailed(int *pTypeOfRequest, void *pReason);
+      void *readFileDownloadData(unsigned int *pSize, unsigned int *pModTime);
       
     private:
       rdr::InStream *m_pInStream;
diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx
index 9319519..f607bbb 100644
--- a/vncviewer/FileTransfer.cxx
+++ b/vncviewer/FileTransfer.cxx
@@ -244,7 +244,6 @@
             char *pRemPath = m_TransferQueue.getFullRemPathAt(0);
             m_queueFileListRqst.add(pRemPath, 0, 0, FT_FLR_DEST_DOWNLOAD);
             m_pWriter->writeFileListRqst(strlen(pRemPath), pRemPath, 0);
-            m_TransferQueue.deleteAt(0);
             return;
           }
         }
@@ -270,6 +269,13 @@
 bool
 FileTransfer::downloadFile()
 {
+  if (m_TransferQueue.getFlagsAt(0) & FT_ATTR_FILE) {
+    if (m_fileWriter.create(m_TransferQueue.getFullLocPathAt(0))) {
+      m_pWriter->writeFileDownloadRqst(strlen(m_TransferQueue.getFullRemPathAt(0)),
+                                       m_TransferQueue.getFullRemPathAt(0), 0);
+      return true;
+    } else return false;
+  }
   return false;
 }
 
@@ -345,6 +351,43 @@
 bool 
 FileTransfer::procFileDownloadDataMsg()
 {
+  unsigned int bufSize = 0;
+  unsigned int modTime = 0;
+
+  void *pFile = m_pReader->readFileDownloadData(&bufSize, &modTime);
+
+  if ((!m_fileWriter.isCreated()) || (!isTransferEnable())) {
+    if (pFile != NULL) delete pFile;
+    return false;
+  }
+
+  if (bufSize > 0) {
+    unsigned int bytesWritten = 0;
+    m_fileWriter.write(pFile, bufSize, &bytesWritten);
+    delete pFile;
+    if (bytesWritten != bufSize) {
+      char reason[] = "Error File Writting";
+      m_pWriter->writeFileDownloadCancel(strlen(reason), reason);
+      m_TransferQueue.deleteAt(0);
+      m_pFTDialog->postCheckTransferQueueMsg();
+      return false;
+    }
+    return true;
+  } else {
+    if (modTime != 0) {
+      m_fileWriter.setTime(modTime);
+      m_fileWriter.close();
+      m_TransferQueue.deleteAt(0);
+      m_pFTDialog->postCheckTransferQueueMsg();
+      return true;
+    } else {
+      m_fileWriter.close();
+      char reason[] = "Error File Writting";
+      m_pWriter->writeFileDownloadCancel(strlen(reason), reason);
+      m_TransferQueue.deleteAt(0);
+      m_pFTDialog->postCheckTransferQueueMsg();
+    }
+  }
   return false;
 }
 
@@ -430,8 +473,8 @@
   unsigned int flags = m_TransferQueue.getFlagsAt(0);
   
   if ((flags & FT_ATTR_DIR) && (flags & FT_ATTR_FLR_DOWNLOAD_ADD)) {
-    m_TransferQueue.add(m_TransferQueue.getLocPathAt(0), 
-                        m_TransferQueue.getRemPathAt(0), 
+    m_TransferQueue.add(m_TransferQueue.getFullLocPathAt(0), 
+                        m_TransferQueue.getFullRemPathAt(0), 
                         pFI, FT_ATTR_COPY_DOWNLOAD);
     m_TransferQueue.deleteAt(0);
     m_pFTDialog->postCheckTransferQueueMsg();
