Index: trunk/BNC/src/bncrinex.cpp
===================================================================
--- trunk/BNC/src/bncrinex.cpp	(revision 10961)
+++ trunk/BNC/src/bncrinex.cpp	(revision 10979)
@@ -447,5 +447,26 @@
   // Read Skeleton Header
   // --------------------
-  if (readSkeleton()) {
+  bool sklUsable = readSkeleton();
+  if (sklUsable && intHeaderVers >= 3) {
+    // A skeleton carrying only 2-char (v2-style) observation codes cannot
+    // supply the attribute-specific codes a v3 file needs. Judge this from
+    // the actual codes rather than _sklHeader.version(), which is often
+    // left at 0.0 for skeleton files that omit "RINEX VERSION / TYPE".
+    bool haveV3Types = false;
+    for (int iSys = 0; iSys < _sklHeader.numSys() && !haveV3Types; iSys++) {
+      char sys = _sklHeader.system(iSys);
+      QStringList types = _sklHeader.obsTypes(sys);
+      for (int iType = 0; iType < types.size(); iType++) {
+        if (types.at(iType).length() >= 3) {
+          haveV3Types = true;
+          break;
+        }
+      }
+    }
+    if (!haveV3Types) {
+      sklUsable = false;
+    }
+  }
+  if (sklUsable) {
     _header.set(_sklHeader, intHeaderVers);
   }
