diff --git a/source/config/mh-cygwin-msvc b/source/config/mh-cygwin-msvc
index 89f7f5f..48deb43 100644
--- a/source/config/mh-cygwin-msvc
+++ b/source/config/mh-cygwin-msvc
@@ -1,5 +1,5 @@
 ## Cygwin with Microsoft Visual C++ compiler specific setup
-## Copyright (c) 2001-2008, International Business Machines Corporation and
+## Copyright (c) 2001-2010, International Business Machines Corporation and
 ## others. All Rights Reserved.
 
 # We install sbin tools into the same bin directory because
@@ -221,7 +221,6 @@
 LDLIBRARYPATH_ENVVAR = PATH
 
 # These are needed to allow the pkgdata nmake files to work
-PKGDATA_OPTS = -v
 PKGDATA_INVOKE_OPTS = MAKEFLAGS=
 
 # Include the version information in the shared library
diff --git a/source/tools/pkgdata/pkgdata.cpp b/source/tools/pkgdata/pkgdata.cpp
index d5df6ff..569ce8a 100644
--- a/source/tools/pkgdata/pkgdata.cpp
+++ b/source/tools/pkgdata/pkgdata.cpp
@@ -76,6 +76,9 @@
 #if defined(WINDOWS_WITH_MSVC) || defined(U_LINUX)
 #define CAN_WRITE_OBJ_CODE
 #endif
+#if defined(U_CYGWIN) || defined(CYGWINMSVC)
+#define USING_CYGWIN
+#endif
 
 /*
  * When building the data library without assembly,
@@ -88,7 +91,7 @@
 #endif
 
 /* Need to fix the file seperator character when using MinGW. */
-#ifdef WINDOWS_WITH_GNUC
+#if defined(WINDOWS_WITH_GNUC) || defined(USING_CYGWIN)
 #define PKGDATA_FILE_SEP_STRING "/"
 #else
 #define PKGDATA_FILE_SEP_STRING U_FILE_SEP_STRING
@@ -104,7 +107,7 @@
 #ifdef WINDOWS_WITH_MSVC
 static int32_t pkg_createWindowsDLL(const char mode, const char *gencFilePath, UPKGOptions *o);
 #endif
-static int32_t pkg_createSymLinks(const char *targetDir);
+static int32_t pkg_createSymLinks(const char *targetDir, UBool specialHandling=FALSE);
 static int32_t pkg_installLibrary(const char *installDir, const char *dir);
 static int32_t pkg_installFileMode(const char *installDir, const char *srcDir, const char *fileListName);
 
@@ -118,7 +121,7 @@
 static void createFileNames(UPKGOptions *o, const char mode, const char *version_major, const char *version, const char *libName, const UBool reverseExt);
 
 static int32_t pkg_getOptionsFromICUConfig(UBool verbose, UOption *option);
-static int runCommand(const char* command);
+static int runCommand(const char* command, UBool specialHandling=FALSE);
 
 enum {
     NAME,
@@ -210,6 +213,7 @@
     LIB_FILE_VERSION_TMP,
 #ifdef U_CYGWIN
     LIB_FILE_CYGWIN,
+	LIB_FILE_CYGWIN_VERSION,
 #endif
     LIB_FILENAMES_SIZE
 };
@@ -283,7 +287,7 @@
         }
 
 
-#ifndef WINDOWS_WITH_MSVC
+#if !defined(WINDOWS_WITH_MSVC) || defined(USING_CYGWIN)
         if(!options[BLDOPT].doesOccur && uprv_strcmp(options[MODE].value, "common") != 0) {
           if (pkg_getOptionsFromICUConfig(options[VERBOSE].doesOccur, &options[BLDOPT]) != 0) {
                 fprintf(stderr, " required parameter is missing: -O is required for static and shared builds.\n");
@@ -382,7 +386,7 @@
     o.verbose   = options[VERBOSE].doesOccur;
 
 
-#ifndef WINDOWS_WITH_MSVC /* on UNIX, we'll just include the file... */
+#if !defined(WINDOWS_WITH_MSVC) || defined(USING_CYGWIN) /* on UNIX, we'll just include the file... */
     if (options[BLDOPT].doesOccur) {
         o.options   = options[BLDOPT].value;
     } else {
@@ -467,9 +471,25 @@
     return result;
 }
 
-static int runCommand(const char* command) { 
-    printf("pkgdata: %s\n", command); 
-    int result = system(command); 
+static int runCommand(const char* command, UBool specialHandling) {
+    char cmd[SMALL_BUFFER_MAX_SIZE];
+
+    if (!specialHandling) {
+#ifdef USING_CYGWIN
+        sprintf(cmd, "bash -c \"%s\"", command);
+
+#elif defined(OS400)
+        sprintf(cmd, "QSH CMD('%s')", command);
+#else
+        goto normal_command_mode;
+#endif
+    } else {
+normal_command_mode:
+        sprintf(cmd, "%s", command);
+    }
+    
+    printf("pkgdata: %s\n", cmd);
+    int result = system(cmd);
     if (result != 0) { 
         printf("-- return status = %d\n", result); 
     }
@@ -587,7 +607,7 @@
               fprintf(stdout, "\n");
             }
 
-#ifndef WINDOWS_WITH_MSVC
+#if !defined(WINDOWS_WITH_MSVC) || defined(USING_CYGWIN)
             /* Read in options file. */
             if(o->verbose) {
               fprintf(stdout, "# Reading options file %s\n", o->options);
@@ -686,7 +706,7 @@
 #ifdef U_LINUX
                 result = pkg_generateLibraryFile(targetDir, mode, gencFilePath);
 #elif defined(WINDOWS_WITH_MSVC)
-                return pkg_createWindowsDLL(mode, gencFilePath, o);
+                result = pkg_createWindowsDLL(mode, gencFilePath, o);
 #endif
 #elif defined(BUILD_DATA_WITHOUT_ASSEMBLY)
                 result = pkg_createWithoutAssemblyCode(o, targetDir, mode);
@@ -716,6 +736,9 @@
                 }
 #endif
             } /* !MODE_STATIC */
+#endif
+
+#if !defined(U_WINDOWS) || defined(USING_CYGWIN)
             /* Install the libraries if option was set. */
             if (o->install != NULL) {
                 if(o->verbose) {
@@ -747,7 +770,10 @@
 
         if (version != NULL) {
 #ifdef U_CYGWIN
-            sprintf(libFileNames[LIB_FILE_CYGWIN], "cyg%s%s.%s",
+            sprintf(libFileNames[LIB_FILE_CYGWIN], "cyg%s.%s",
+                    libName,
+                    pkgDataFlags[SO_EXT]);
+            sprintf(libFileNames[LIB_FILE_CYGWIN_VERSION], "cyg%s%s.%s",
                     libName,
                     version_major,
                     pkgDataFlags[SO_EXT]);
@@ -797,11 +823,13 @@
 }
 
 /* Create the symbolic links for the final library file. */
-static int32_t pkg_createSymLinks(const char *targetDir) {
+static int32_t pkg_createSymLinks(const char *targetDir, UBool specialHandling) {
     int32_t result = 0;
     char cmd[LARGE_BUFFER_MAX_SIZE];
+	char name1[SMALL_BUFFER_MAX_SIZE]; /* symlink file name */
+	char name2[SMALL_BUFFER_MAX_SIZE]; /* file name to symlink */
 
-#ifndef U_CYGWIN
+#ifndef USING_CYGWIN
     /* No symbolic link to make. */
     if (uprv_strlen(libFileNames[LIB_FILE_VERSION]) == 0 || uprv_strlen(libFileNames[LIB_FILE_VERSION_MAJOR]) == 0) {
         return result;
@@ -819,13 +847,27 @@
         return result;
     }
 #endif
-    sprintf(cmd, "cd %s && %s %s.%s && %s %s %s.%s",
+
+    if (specialHandling) {
+#ifdef U_CYGWIN
+        sprintf(name1, "%s", libFileNames[LIB_FILE_CYGWIN]);
+        sprintf(name2, "%s", libFileNames[LIB_FILE_CYGWIN_VERSION]);
+#else
+        goto normal_symlink_mode;
+#endif
+    } else {
+normal_symlink_mode:
+        sprintf(name1, "%s.%s", libFileNames[LIB_FILE], pkgDataFlags[SO_EXT]);
+        sprintf(name2, "%s", libFileNames[LIB_FILE_VERSION]);
+    }
+
+    sprintf(cmd, "cd %s && %s %s && %s %s %s",
             targetDir,
             RM_CMD,
-            libFileNames[LIB_FILE], pkgDataFlags[SO_EXT],
+            name1,
             LN_CMD,
-            libFileNames[LIB_FILE_VERSION],
-            libFileNames[LIB_FILE], pkgDataFlags[SO_EXT]);
+            name2,
+            name1);
 
      result = runCommand(cmd);
 
@@ -849,7 +891,33 @@
         return result;
     }
 
-    return pkg_createSymLinks(installDir);
+#ifdef CYGWINMSVC
+    sprintf(cmd, "cd %s && %s %s.lib %s",
+            targetDir,
+            pkgDataFlags[INSTALL_CMD],
+            libFileNames[LIB_FILE],
+            installDir
+            );
+    result = runCommand(cmd);
+
+    if (result != 0) {
+        return result;
+    }
+#elif defined (U_CYGWIN)
+    sprintf(cmd, "cd %s && %s %s %s",
+            targetDir,
+            pkgDataFlags[INSTALL_CMD],
+            libFileNames[LIB_FILE_CYGWIN_VERSION],
+            installDir
+            );
+    result = runCommand(cmd);
+
+    if (result != 0) {
+        return result;
+    }
+#endif
+
+    return pkg_createSymLinks(installDir, TRUE);
 }
 
 #ifdef U_WINDOWS_MSVC
@@ -996,29 +1064,21 @@
     }
 
     if (mode == MODE_STATIC) {
-#ifdef OS400
-        sprintf(cmd, "QSH CMD('%s %s %s%s %s')",
-#else
         sprintf(cmd, "%s %s %s%s %s",
-#endif
                 pkgDataFlags[AR],
                 pkgDataFlags[ARFLAGS],
                 targetDir,
                 libFileNames[LIB_FILE_VERSION],
                 objectFile);
 
-        result = runCommand(cmd); 
+        result = runCommand(cmd);
         if (result == 0) {
-#ifdef OS400 
-            sprintf(cmd, "QSH CMD('%s %s%s')", 
-#else 
             sprintf(cmd, "%s %s%s", 
-#endif 
                     pkgDataFlags[RANLIB], 
                     targetDir, 
                     libFileNames[LIB_FILE_VERSION]); 
         
-            result = runCommand(cmd); 
+            result = runCommand(cmd);
         }
     } else /* if (mode == MODE_DLL) */ {
 #ifdef U_CYGWIN
@@ -1027,13 +1087,9 @@
                 targetDir,
                 libFileNames[LIB_FILE_VERSION_TMP],
                 pkgDataFlags[LDICUDTFLAGS],
-                targetDir, libFileNames[LIB_FILE_CYGWIN],
-#else
-#ifdef OS400
-        sprintf(cmd, "QSH CMD('%s %s -o %s%s %s %s%s %s %s')",
+                targetDir, libFileNames[LIB_FILE_CYGWIN_VERSION],
 #else
         sprintf(cmd, "%s %s -o %s%s %s %s%s %s %s",
-#endif
                 pkgDataFlags[GENLIB],
                 pkgDataFlags[LDICUDTFLAGS],
                 targetDir,
@@ -1160,11 +1216,7 @@
             uprv_strcpy(tempObjectFile, gencmnFile);
             tempObjectFile[uprv_strlen(tempObjectFile) - 1] = 'o';
             
-#ifdef OS400
-            sprintf(cmd, "QSH CMD('%s %s -o %s %s')",
-#else
             sprintf(cmd, "%s %s -o %s %s"
-#endif
                         pkgDataFlags[COMPILER],
                         pkgDataFlags[LIBFLAGS],
                         tempObjectFile,
@@ -1218,11 +1270,7 @@
 
             writeCCode(file, o->tmpDir, dataName[0] != 0 ? dataName : o->shortName, newName[0] != 0 ? newName : NULL, gencmnFile);
 #ifdef USE_SINGLE_CCODE_FILE
-#ifdef OS400
-            sprintf(cmd, "QSH CMD('cat %s >> %s')", gencmnFile, icudtAll);
-#else
             sprintf(cmd, "cat %s >> %s", gencmnFile, icudtAll);
-#endif
             
             result = runCommand(cmd);
             if (result != 0) {
@@ -1265,11 +1313,8 @@
 #ifdef USE_SINGLE_CCODE_FILE
     uprv_strcpy(tempObjectFile, icudtAll);
     tempObjectFile[uprv_strlen(tempObjectFile) - 1] = 'o';
-#ifdef OS400
-    sprintf(cmd, "QSH CMD('%s %s -o %s %s')",
-#else
+
     sprintf(cmd, "%s %s -o %s %s",
-#endif
         pkgDataFlags[COMPILER],
         pkgDataFlags[LIBFLAGS],
         tempObjectFile,
@@ -1370,7 +1415,7 @@
                 );
     }
 
-    return runCommand(cmd);
+    return runCommand(cmd, TRUE);
 }
 #endif
 
