Index: /FalconView/trunk/public/fvw_core/GeodataDataSources/KMLNetworkLinkResource.cpp
===================================================================
--- /FalconView/trunk/public/fvw_core/GeodataDataSources/KMLNetworkLinkResource.cpp (revision 2286)
+++ /FalconView/trunk/public/fvw_core/GeodataDataSources/KMLNetworkLinkResource.cpp (revision 2306)
@@ -21,4 +21,6 @@
       WriteToLogFile(_bstr_t(msg.c_str()));
    }
+
+   CLibkmlDataSource::MaybeDumpKML(kml_data);
 
    std::string errors;
Index: /FalconView/trunk/public/fvw_core/GeodataDataSources/LibkmlDataSource.h
===================================================================
--- /FalconView/trunk/public/fvw_core/GeodataDataSources/LibkmlDataSource.h (revision 2279)
+++ /FalconView/trunk/public/fvw_core/GeodataDataSources/LibkmlDataSource.h (revision 2306)
@@ -130,4 +130,5 @@
    static kmldom::GeometryPtr WrapGeometryInGeometry(IGeometry* geometry, kmldom::KmlFactory* factory);
    static kmldom::PlacemarkPtr WrapFeatureInPlacemark(IFeature* feature, kmldom::KmlFactory* factory);
+   static void MaybeDumpKML(std::string& kml);
 
    static void FireDataSourceChanged(LONG sourceHandle);
@@ -219,5 +220,4 @@
    static BOOL s_bEnvironmentTested;
    static std::string s_dumpFile;
-   static void MaybeDumpKML(std::string& kml);
 };
 
Index: /FalconView/trunk/public/fvw_core/GeodataDataSources/LibkmlDataSource.cpp
===================================================================
--- /FalconView/trunk/public/fvw_core/GeodataDataSources/LibkmlDataSource.cpp (revision 2279)
+++ /FalconView/trunk/public/fvw_core/GeodataDataSources/LibkmlDataSource.cpp (revision 2306)
@@ -591,8 +591,37 @@
       if (s_dumpFile.length() > 0)
       {
-         // dump kml to a file
-         std::ofstream f(s_dumpFile.c_str(), std::ios::app);
-         f << kml << "\n\n********\n\n";
-         f.close();
+         std::string todump = kml;
+
+         // if this is KMZ, unpack it
+         if (kmlengine::KmzFile::IsKmz(kml))
+         {
+            kmlengine::KmzFilePtr kmz_file = kmlengine::KmzFile::OpenFromString(kml);
+            ASSERT(kmz_file);
+            bool b = kmz_file->ReadKml(&todump);
+            ASSERT(b);
+         }
+
+		   // make sure only one person writing to the file at a time
+		   HANDLE h = ::CreateMutexW(NULL, false, L"MaybeDumpKMLSem");
+         if (h == NULL)
+         {
+            //DWORD rc = GetLastError();
+            ASSERT(0);
+         }
+		   DWORD d = ::WaitForSingleObject(h, INFINITE);
+		   _ASSERT(d == WAIT_OBJECT_0);
+
+         try
+         {
+            // dump kml to a file
+            std::ofstream f(s_dumpFile.c_str(), std::ios::app);
+            f << todump << "\n\n********\n\n";
+            f.close();
+         }
+         catch (...) { } // rare exception to rule about ignoring exceptions
+
+         // release mutex
+         ::ReleaseMutex(h);
+		   ::CloseHandle(h);
       }
    }
