Index: /OpenSceneGraph/trunk/include/osgDB/Serializer
===================================================================
--- /OpenSceneGraph/trunk/include/osgDB/Serializer (revision 11902)
+++ /OpenSceneGraph/trunk/include/osgDB/Serializer (revision 11903)
@@ -21,7 +21,8 @@
 #include <osgDB/InputStream>
 #include <osgDB/OutputStream>
+
 #include <string>
 #include <sstream>
-
+#include <limits.h>
 
 namespace osgDB
@@ -127,5 +128,6 @@
     };
 
-    BaseSerializer() : _version(0) {}
+    BaseSerializer() : _firstVersion(0), _lastVersion(INT_MAX) {}
+
     virtual bool read( InputStream&, osg::Object& ) = 0;
     virtual bool write( OutputStream&, const osg::Object& ) = 0;
@@ -133,5 +135,6 @@
 
 protected:
-    int _version;  // Library version when the serializer is added, or removed (neg value)
+    int _firstVersion;  // Library version when the serializer is first introduced
+    int _lastVersion;  // Library version when the serializer is last required.
 };
 
Index: /OpenSceneGraph/trunk/include/osgDB/ObjectWrapper
===================================================================
--- /OpenSceneGraph/trunk/include/osgDB/ObjectWrapper (revision 11902)
+++ /OpenSceneGraph/trunk/include/osgDB/ObjectWrapper (revision 11903)
@@ -57,7 +57,5 @@
     const StringList& getAssociates() const { return _associates; }
 
-    void addSerializer( BaseSerializer* s, BaseSerializer::Type t=BaseSerializer::RW_UNDEFINED )
-    { s->_version = _version; _serializers.push_back(s); _typeList.push_back(static_cast<int>(t)); }
-
+    void addSerializer( BaseSerializer* s, BaseSerializer::Type t=BaseSerializer::RW_UNDEFINED );
     void markSerializerAsRemoved( const std::string& name );
     BaseSerializer* getSerializer( const std::string& name );
Index: /OpenSceneGraph/trunk/src/osgDB/ObjectWrapper.cpp
===================================================================
--- /OpenSceneGraph/trunk/src/osgDB/ObjectWrapper.cpp (revision 11902)
+++ /OpenSceneGraph/trunk/src/osgDB/ObjectWrapper.cpp (revision 11903)
@@ -92,4 +92,11 @@
 }
 
+void ObjectWrapper::addSerializer( BaseSerializer* s, BaseSerializer::Type t )
+{
+    s->_firstVersion = _version;
+    _serializers.push_back(s);
+    _typeList.push_back(static_cast<int>(t));
+}
+
 void ObjectWrapper::markSerializerAsRemoved( const std::string& name )
 {
@@ -100,5 +107,5 @@
         // will thus ignore it according to the sign and value of the _version variable.
         if ( (*itr)->getName()==name )
-            (*itr)->_version = -_version;
+            (*itr)->_lastVersion = _version-1;
     }
 }
@@ -139,27 +146,19 @@
           itr!=_serializers.end(); ++itr )
     {
-        int serializerVersion = (*itr)->_version;
-        if ( serializerVersion!=0 )
-        {
-            if ( serializerVersion<0 )
+        BaseSerializer* serializer = itr->get();
+        if ( serializer->_firstVersion <= is.getFileVersion() &&
+             is.getFileVersion() <= serializer->_lastVersion)
+        {
+            if ( !serializer->read(is, obj) )
             {
-                serializerVersion = -serializerVersion;
-                
-                // The serializer is removed from a specified version,
-                // and the file in reading is at the same or higher version, ignore it.
-                if ( is.getFileVersion()>=serializerVersion ) continue;
+                OSG_WARN << "ObjectWrapper::read(): Error reading property "
+                                    << _name << "::" << (*itr)->getName() << std::endl;
+                readOK = false;
             }
-            else
-            {
-                // The serializer is added at a specified version,
-                // but the file in reading is at a lower version, ignore it.
-                if ( is.getFileVersion()<serializerVersion ) continue;
-            }
-        }
-        
-        if ( (*itr)->read(is, obj) ) continue;
-        OSG_WARN << "ObjectWrapper::read(): Error reading property "
-                               << _name << "::" << (*itr)->getName() << std::endl;
-        readOK = false;
+        }
+        else
+        {
+            // OSG_NOTICE<<"Ignoring serializer due to version mismatch"<<std::endl;
+        }
     }
 
