diff --git a/rfb_win32/ProgressControl.cxx b/rfb_win32/ProgressControl.cxx
new file mode 100644
index 0000000..c22c4f3
--- /dev/null
+++ b/rfb_win32/ProgressControl.cxx
@@ -0,0 +1,78 @@
+/* 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/
+ *
+ */
+
+// -=- ProgressControl.h
+
+#include <rfb_win32/ProgressControl.h>
+
+using namespace rfb;
+using namespace rfb::win32;
+
+#define MAX_RANGE 0xFFFF
+
+ProgressControl::ProgressControl(HWND hwndProgress)
+{
+  m_hwndProgress = hwndProgress;
+}
+
+ProgressControl::~ProgressControl()
+{
+}
+
+bool
+ProgressControl::init(DWORD64 maxValue, DWORD64 position)
+{
+  if (m_dw64CurrentValue > m_dw64MaxValue) return false;
+  
+  m_dw64CurrentValue = position;
+  m_dw64MaxValue = maxValue;
+  
+  SendMessage(m_hwndProgress, PBM_SETRANGE, (WPARAM) 0, MAKELPARAM(0, MAX_RANGE)); 
+  
+  return true;
+}
+
+bool
+ProgressControl::clear()
+{
+  m_dw64CurrentValue = 0;
+  return show();
+}
+
+bool
+ProgressControl::increase(DWORD64 value)
+{
+  if ((m_dw64MaxValue - m_dw64CurrentValue) > value) {
+    m_dw64CurrentValue += value;
+  } else {
+    m_dw64CurrentValue = m_dw64MaxValue;
+  }
+  return show();
+}
+
+bool
+ProgressControl::show()
+{
+	DWORD curPos = (DWORD) ((m_dw64CurrentValue * MAX_RANGE) / m_dw64MaxValue);
+	SendMessage(m_hwndProgress, PBM_SETPOS, (WPARAM) curPos, (LPARAM) 0);
+	
+	return true;
+}
diff --git a/rfb_win32/ProgressControl.h b/rfb_win32/ProgressControl.h
new file mode 100644
index 0000000..480c4c8
--- /dev/null
+++ b/rfb_win32/ProgressControl.h
@@ -0,0 +1,58 @@
+/* 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/
+ *
+ */
+
+// -=- ProgressControl.h
+
+#ifndef __RFB_WIN32_PROGRESSCONTROL_H__
+#define __RFB_WIN32_PROGRESSCONTROL_H__
+
+#include <windows.h>
+#include <commctrl.h>
+
+namespace rfb {
+  namespace win32 {
+    class ProgressControl
+    {
+    public:
+      ProgressControl(HWND hwndProgress);
+      ~ProgressControl();
+      
+      bool init(DWORD64 maxValue, DWORD64 position);
+      
+      bool increase(DWORD64 value);
+      bool clear();
+      
+    private:
+      HWND m_hwndProgress;
+      
+      DWORD m_dwBarValue;
+      DWORD m_dwBarValueMax;
+      
+      DWORD64 m_dw64MaxValue;
+      DWORD64 m_dw64CurrentValue;
+      
+      bool show();
+      
+    };
+  }
+}
+
+#endif // __RFB_WIN32_PROGRESSCONTROL_H__
diff --git a/rfb_win32/rfb_win32.dsp b/rfb_win32/rfb_win32.dsp
index 5c13036..83b0096 100644
--- a/rfb_win32/rfb_win32.dsp
+++ b/rfb_win32/rfb_win32.dsp
@@ -166,6 +166,10 @@
 # End Source File
 # Begin Source File
 
+SOURCE=.\ProgressControl.cxx
+# End Source File
+# Begin Source File
+
 SOURCE=.\RegConfig.cxx
 # End Source File
 # Begin Source File
@@ -294,6 +298,10 @@
 # End Source File
 # Begin Source File
 
+SOURCE=.\ProgressControl.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\RegConfig.h
 # End Source File
 # Begin Source File
