diff --git a/rfb/TransferQueue.cxx b/rfb/TransferQueue.cxx
new file mode 100644
index 0000000..820ca68
--- /dev/null
+++ b/rfb/TransferQueue.cxx
@@ -0,0 +1,290 @@
+/* Copyright (C) 2005 TightVNC Team.  All Rights Reserved.
+ *    
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- TransferQueue.
+
+#include <rfb/TransferQueue.h>
+
+using namespace rfb;
+
+TransferQueue::TransferQueue()
+{
+	 m_numEntries = 0;
+     m_pEntries = NULL;
+}
+
+TransferQueue::~TransferQueue()
+{
+  free();
+}
+
+void
+TransferQueue::add(TransferQueue *pTQ)
+{
+  for (unsigned int i = 0; i < pTQ->getNumEntries(); i++) {
+    add(pTQ->getLocPathAt(i), pTQ->getRemPathAt(i),	pTQ->getLocNameAt(i), 
+      pTQ->getRemNameAt(i), pTQ->getSizeAt(i), pTQ->getDataAt(i), pTQ->getFlagsAt(i));
+  }
+}
+
+void
+TransferQueue::add(char *pLocPath, char *pRemPath, FileInfo *pFI, unsigned int flags)
+{
+  char locPath[FT_FILENAME_SIZE];
+  char remPath[FT_FILENAME_SIZE];
+  strcpy(locPath, pLocPath);
+  strcpy(remPath, pRemPath);
+  
+  for (unsigned int i = 0; i < pFI->getNumEntries(); i++) {
+    add(locPath, remPath, pFI->getNameAt(i), pFI->getNameAt(i), 
+      pFI->getSizeAt(i), pFI->getDataAt(i), (pFI->getFlagsAt(i) | flags));
+  }
+}
+
+void 
+TransferQueue::add(char *pLocPath, char *pRemPath, char *pLocName, char *pRemName, 
+                   unsigned int size, unsigned int data, unsigned int flags)
+{
+  FILEINFOEX *pTemporary = new FILEINFOEX[m_numEntries + 1];
+  if (m_numEntries != 0) 
+    memcpy(pTemporary, m_pEntries, m_numEntries * sizeof(FILEINFOEX));
+  
+  strcpy(pTemporary[m_numEntries].locPath, pLocPath);
+  strcpy(pTemporary[m_numEntries].locName, pLocName);
+  strcpy(pTemporary[m_numEntries].remPath, pRemPath);
+  strcpy(pTemporary[m_numEntries].remName, pRemName);
+  
+  pTemporary[m_numEntries].info.size = size;
+  pTemporary[m_numEntries].info.data = data;
+  pTemporary[m_numEntries].info.flags = flags;
+  
+  if (m_pEntries != NULL) {
+    delete [] m_pEntries;
+    m_pEntries = NULL;
+  }
+  
+  m_pEntries = pTemporary;
+  pTemporary = NULL;
+  m_numEntries++;
+}
+
+char *
+TransferQueue::getLocPathAt(unsigned int number)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    return m_pEntries[number].locPath;
+  }
+  return NULL;
+}
+
+char *
+TransferQueue::getLocNameAt(unsigned int number)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    return m_pEntries[number].locName;
+  }
+  return NULL;
+}
+
+char *
+TransferQueue::getRemPathAt(unsigned int number)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    return m_pEntries[number].remPath;
+  }
+  return NULL;
+}
+
+char *
+TransferQueue::getRemNameAt(unsigned int number)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    return m_pEntries[number].remName;
+  }
+  return NULL;
+}
+
+char *
+TransferQueue::getFullLocPathAt(unsigned int number)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    sprintf(m_szFullLocPath, "%s\\%s", getLocPathAt(number), getLocNameAt(number));
+    return m_szFullLocPath;
+  }
+  return NULL;
+}
+
+char *
+TransferQueue::getFullRemPathAt(unsigned int number)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    sprintf(m_szFullRemPath, "%s\\%s", getRemPathAt(number), getRemNameAt(number));
+    return m_szFullRemPath;
+  }
+  return NULL;
+}
+
+SIZEDATAFLAGSINFO * 
+TransferQueue::getSizeDataFlagsAt(unsigned int number)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    return &m_pEntries[number].info;
+  }
+  return NULL;
+}
+
+bool 
+TransferQueue::setLocPathAt(unsigned int number, char *pName)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    strcpy(m_pEntries[number].locPath, pName);
+    return true;
+  }
+  return false;
+}
+
+bool 
+TransferQueue::setLocNameAt(unsigned int number, char *pName)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    strcpy(m_pEntries[number].locName, pName);
+    return true;
+  }
+  return false;
+}
+
+bool 
+TransferQueue::setRemPathAt(unsigned int number, char *pName)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    strcpy(m_pEntries[number].remPath, pName);
+    return true;
+  }
+  return false;
+}
+
+bool 
+TransferQueue::setRemNameAt(unsigned int number, char *pName)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    strcpy(m_pEntries[number].remName, pName);
+    return true;
+  }
+  return false;
+}
+
+unsigned int
+TransferQueue::getSizeAt(unsigned int number)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    return m_pEntries[number].info.size;
+  }
+  return 0;
+}
+
+unsigned int
+TransferQueue::getDataAt(unsigned int number)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    return m_pEntries[number].info.data;
+  }
+  return 0;
+}
+
+unsigned int 
+TransferQueue::getFlagsAt(unsigned int number)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    return m_pEntries[number].info.flags;
+  }
+  return 0;
+}
+
+bool 
+TransferQueue::setSizeAt(unsigned int number, unsigned int value)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    m_pEntries[number].info.size = value;
+    return true;
+  }
+  return false;
+}
+
+bool 
+TransferQueue::setDataAt(unsigned int number, unsigned int value)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    m_pEntries[number].info.data = value;
+    return true;
+  }
+  return false;
+}
+
+bool 
+TransferQueue::setFlagsAt(unsigned int number, unsigned int value)
+{
+  if ((number >= 0) && (number < m_numEntries)) {
+    m_pEntries[number].info.flags = value;
+    return true;
+  }
+  return false;
+}
+
+bool 
+TransferQueue::deleteAt(unsigned int number)
+{
+  if ((number >= m_numEntries) || (number < 0)) return false;
+  
+  FILEINFOEX *pTemporary = new FILEINFOEX[m_numEntries - 1];
+  
+  if (number == 0) {
+    memcpy(pTemporary, &m_pEntries[1], (m_numEntries - 1) * sizeof(FILEINFOEX));
+  } else {
+    memcpy(pTemporary, m_pEntries, number * sizeof(FILEINFOEX));
+    if (number != (m_numEntries - 1)) 
+      memcpy(&pTemporary[number], &m_pEntries[number + 1], (m_numEntries - number - 1) * sizeof(FILEINFOEX));
+  }
+  
+  if (m_pEntries != NULL) {
+    delete [] m_pEntries;
+    m_pEntries = NULL;
+  }
+  m_pEntries = pTemporary;
+  pTemporary = NULL;
+  m_numEntries--;
+  return true;
+}
+
+unsigned int 
+TransferQueue::getNumEntries()
+{
+  return m_numEntries;
+}
+
+void 
+TransferQueue::free()
+{
+  if (m_pEntries != NULL) {
+    delete [] m_pEntries;
+    m_pEntries = NULL;
+  }
+  m_numEntries = 0;
+}
diff --git a/rfb/TransferQueue.h b/rfb/TransferQueue.h
new file mode 100644
index 0000000..b12c058
--- /dev/null
+++ b/rfb/TransferQueue.h
@@ -0,0 +1,83 @@
+/* Copyright (C) 2005 TightVNC Team.  All Rights Reserved.
+ *    
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- TransferQueue.
+
+#ifndef __RFB_TRANSFERQUEUE_H__
+#define __RFB_TRANSFERQUEUE_H__
+
+#include <stdlib.h>
+
+#include <rfb/FileInfo.h>
+#include <rfb/fttypes.h>
+
+namespace rfb {
+  class TransferQueue  
+  {
+  public:
+    TransferQueue();
+    ~TransferQueue();
+
+    void add(TransferQueue *pTQ);
+    void add(char *pLocPath, char*pRemPath, FileInfo *pFI, unsigned int flags);
+    void add(char *pLocPath, char *pRemPath, char *pLocName, char *pRemName,
+      unsigned int size, unsigned int data, unsigned int flags);
+    
+    char *getLocPathAt(unsigned int number);
+    char *getLocNameAt(unsigned int number);
+    char *getRemPathAt(unsigned int number);
+    char *getRemNameAt(unsigned int number);
+    
+    char *getFullLocPathAt(unsigned int number);
+    char *getFullRemPathAt(unsigned int number);
+    
+    bool setLocPathAt(unsigned int number, char *pName);
+    bool setLocNameAt(unsigned int number, char *pName);
+    bool setRemPathAt(unsigned int number, char *pName);
+    bool setRemNameAt(unsigned int number, char *pName);
+    
+    unsigned int getSizeAt(unsigned int number);
+    unsigned int getDataAt(unsigned int number);
+    unsigned int getFlagsAt(unsigned int number);
+    
+    SIZEDATAFLAGSINFO * getSizeDataFlagsAt(unsigned int number);
+    
+    
+    bool setSizeAt(unsigned int number, unsigned int value);
+    bool setDataAt(unsigned int number, unsigned int value);
+    bool setFlagsAt(unsigned int number, unsigned int value);
+    
+    bool deleteAt(unsigned int number);
+    
+    unsigned int getNumEntries();
+    
+    void free();
+    
+  private:
+    FILEINFOEX *m_pEntries;
+    unsigned int m_numEntries;
+    
+    char m_szFullLocPath[FT_FILENAME_SIZE];
+    char m_szFullRemPath[FT_FILENAME_SIZE];
+  };
+}
+
+#endif // __RFB_TRANSFERQUEUE_H__
diff --git a/rfb/fttypes.h b/rfb/fttypes.h
index eae3d98..b33d90e 100644
--- a/rfb/fttypes.h
+++ b/rfb/fttypes.h
@@ -18,6 +18,9 @@
 
 // -=- fttypes.h
 
+#ifndef __RFB_FTTYPES_H__
+#define __RFB_FTTYPES_H__
+
 #include "stdio.h"
 #include "stdlib.h"
 #include "string.h"
@@ -58,3 +61,5 @@
 	char remName[FT_FILENAME_SIZE];
 	SIZEDATAFLAGSINFO info;
 } FILEINFOEX;
+
+#endif // __RFB_FTTYPES_H__
\ No newline at end of file
diff --git a/rfb/rfb.dsp b/rfb/rfb.dsp
index 39bc2b9..c6fcd20 100644
--- a/rfb/rfb.dsp
+++ b/rfb/rfb.dsp
@@ -304,6 +304,10 @@
 # End Source File
 # Begin Source File
 
+SOURCE=.\TransferQueue.cxx
+# End Source File
+# Begin Source File
+
 SOURCE=.\TransImageGetter.cxx
 # End Source File
 # Begin Source File
@@ -628,6 +632,10 @@
 # End Source File
 # Begin Source File
 
+SOURCE=.\TransferQueue.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\TransImageGetter.h
 # End Source File
 # Begin Source File
diff --git a/vncviewer/vncviewer.dsp b/vncviewer/vncviewer.dsp
index ba630ee..44fbecd 100644
--- a/vncviewer/vncviewer.dsp
+++ b/vncviewer/vncviewer.dsp
@@ -174,6 +174,10 @@
 # End Source File
 # Begin Source File
 
+SOURCE=..\rfb\TransferQueue.cxx
+# End Source File
+# Begin Source File
+
 SOURCE=.\UserPasswdDialog.cxx
 # End Source File
 # Begin Source File
@@ -222,6 +226,10 @@
 # End Source File
 # Begin Source File
 
+SOURCE=..\rfb\TransferQueue.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\UserPasswdDialog.h
 # End Source File
 # End Group
