diff --git a/src/ProtocolBuffers/Serialization/AbstractReader.cs b/src/ProtocolBuffers/Serialization/AbstractReader.cs
index eb9baae..3aa54e8 100644
--- a/src/ProtocolBuffers/Serialization/AbstractReader.cs
+++ b/src/ProtocolBuffers/Serialization/AbstractReader.cs
@@ -13,7 +13,7 @@
     public abstract class AbstractReader : ICodedInputStream
     {
         const int MaxDepth = CodedInputStream.DefaultRecursionLimit;
-        protected int _depth;
+        protected int Depth;
 
         /// <summary>
         /// Merges the contents of stream into the provided message builder
@@ -334,10 +334,10 @@
 
         void ICodedInputStream.ReadGroup(int fieldNumber, IBuilderLite builder, ExtensionRegistry extensionRegistry)
         {
-            if (_depth++ > MaxDepth)
+            if (Depth++ > MaxDepth)
                 throw InvalidProtocolBufferException.RecursionLimitExceeded();
             ReadGroup(builder, extensionRegistry);
-            _depth--;
+            Depth--;
         }
 
         void ICodedInputStream.ReadUnknownGroup(int fieldNumber, IBuilderLite builder)
@@ -345,10 +345,10 @@
 
         void ICodedInputStream.ReadMessage(IBuilderLite builder, ExtensionRegistry extensionRegistry)
         {
-            if (_depth++ > MaxDepth)
+            if (Depth++ > MaxDepth)
                 throw InvalidProtocolBufferException.RecursionLimitExceeded(); 
             ReadMessage(builder, extensionRegistry);
-            _depth--;
+            Depth--;
         }
 
         bool ICodedInputStream.ReadBytes(ref ByteString value)
@@ -453,18 +453,18 @@
 
         void ICodedInputStream.ReadMessageArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType, ExtensionRegistry registry)
         {
-            if (_depth++ > MaxDepth)
+            if (Depth++ > MaxDepth)
                 throw InvalidProtocolBufferException.RecursionLimitExceeded(); 
             ReadMessageArray(fieldName, list, messageType, registry);
-            _depth--;
+            Depth--;
         }
 
         void ICodedInputStream.ReadGroupArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType, ExtensionRegistry registry)
         {
-            if (_depth++ > MaxDepth)
+            if (Depth++ > MaxDepth)
                 throw InvalidProtocolBufferException.RecursionLimitExceeded();
             ReadGroupArray(fieldName, list, messageType, registry);
-            _depth--;
+            Depth--;
         }
 
         bool ICodedInputStream.ReadPrimitiveField(FieldType fieldType, ref object value)
diff --git a/src/ProtocolBuffers/Serialization/XmlFormatReader.cs b/src/ProtocolBuffers/Serialization/XmlFormatReader.cs
index fcd83fb..f3ca131 100644
--- a/src/ProtocolBuffers/Serialization/XmlFormatReader.cs
+++ b/src/ProtocolBuffers/Serialization/XmlFormatReader.cs
@@ -74,7 +74,7 @@
         {
             XmlFormatReader copy = new XmlFormatReader(rdr).SetOptions(Options);
             copy._rootElementName = _rootElementName;
-            copy._depth = _depth;
+            copy.Depth = Depth;
             return copy;
 
         }
