Regenerated code with changes
diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestRpcInterop.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestRpcInterop.cs
index 3c5e930..c85403f 100644
--- a/src/ProtocolBuffers.Test/TestProtos/UnitTestRpcInterop.cs
+++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestRpcInterop.cs
@@ -83,7 +83,7 @@
   [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

   [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

   public sealed partial class SearchRequest : pb::GeneratedMessage<SearchRequest, SearchRequest.Builder> {

-    private static readonly SearchRequest defaultInstance = new Builder().BuildPartial();

+    private static readonly SearchRequest defaultInstance = new SearchRequest().MakeReadOnly();

     private static readonly string[] _searchRequestFieldNames = new string[] { "Criteria" };

     private static readonly uint[] _searchRequestFieldTags = new uint[] { 10 };

     public static SearchRequest DefaultInstance {

@@ -91,7 +91,7 @@
     }

     

     public override SearchRequest DefaultInstanceForType {

-      get { return defaultInstance; }

+      get { return DefaultInstance; }

     }

     

     protected override SearchRequest ThisMessage {

@@ -184,6 +184,11 @@
     public static SearchRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

       return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

     }

+    private SearchRequest MakeReadOnly() {

+      criteria_.MakeReadOnly();

+      return this;

+    }

+    

     public static Builder CreateBuilder() { return new Builder(); }

     public override Builder ToBuilder() { return CreateBuilder(this); }

     public override Builder CreateBuilderForType() { return new Builder(); }

@@ -199,22 +204,22 @@
         get { return this; }

       }

       public Builder() {

-        result = DefaultInstance ?? new SearchRequest();

-        builderIsReadOnly = result == DefaultInstance;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

       }

       internal Builder(SearchRequest cloneFrom) {

         result = cloneFrom;

-        builderIsReadOnly = true;

+        resultIsReadOnly = true;

       }

       

-      bool builderIsReadOnly;

-      SearchRequest result;

+      private bool resultIsReadOnly;

+      private SearchRequest result;

       

       private SearchRequest PrepareBuilder() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           SearchRequest original = result;

           result = new SearchRequest();

-          builderIsReadOnly = false;

+          resultIsReadOnly = false;

           MergeFrom(original);

         }

         return result;

@@ -229,13 +234,13 @@
       }

       

       public override Builder Clear() {

-        result = DefaultInstance ?? new SearchRequest();

-        builderIsReadOnly = true;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

         return this;

       }

       

       public override Builder Clone() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return new Builder(result);

         } else {

           return new Builder().MergeFrom(result);

@@ -251,12 +256,11 @@
       }

       

       public override SearchRequest BuildPartial() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return result;

         }

-        result.criteria_.MakeReadOnly();

-        builderIsReadOnly = true;

-        return result;

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

       }

       

       public override Builder MergeFrom(pb::IMessage other) {

@@ -372,7 +376,7 @@
   [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

   [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

   public sealed partial class SearchResponse : pb::GeneratedMessage<SearchResponse, SearchResponse.Builder> {

-    private static readonly SearchResponse defaultInstance = new Builder().BuildPartial();

+    private static readonly SearchResponse defaultInstance = new SearchResponse().MakeReadOnly();

     private static readonly string[] _searchResponseFieldNames = new string[] { "results" };

     private static readonly uint[] _searchResponseFieldTags = new uint[] { 10 };

     public static SearchResponse DefaultInstance {

@@ -380,7 +384,7 @@
     }

     

     public override SearchResponse DefaultInstanceForType {

-      get { return defaultInstance; }

+      get { return DefaultInstance; }

     }

     

     protected override SearchResponse ThisMessage {

@@ -404,7 +408,7 @@
       [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

       [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

       public sealed partial class ResultItem : pb::GeneratedMessage<ResultItem, ResultItem.Builder> {

-        private static readonly ResultItem defaultInstance = new Builder().BuildPartial();

+        private static readonly ResultItem defaultInstance = new ResultItem().MakeReadOnly();

         private static readonly string[] _resultItemFieldNames = new string[] { "name", "url" };

         private static readonly uint[] _resultItemFieldTags = new uint[] { 18, 10 };

         public static ResultItem DefaultInstance {

@@ -412,7 +416,7 @@
         }

         

         public override ResultItem DefaultInstanceForType {

-          get { return defaultInstance; }

+          get { return DefaultInstance; }

         }

         

         protected override ResultItem ThisMessage {

@@ -515,6 +519,10 @@
         public static ResultItem ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

           return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

         }

+        private ResultItem MakeReadOnly() {

+          return this;

+        }

+        

         public static Builder CreateBuilder() { return new Builder(); }

         public override Builder ToBuilder() { return CreateBuilder(this); }

         public override Builder CreateBuilderForType() { return new Builder(); }

@@ -530,22 +538,22 @@
             get { return this; }

           }

           public Builder() {

-            result = DefaultInstance ?? new ResultItem();

-            builderIsReadOnly = result == DefaultInstance;

+            result = DefaultInstance;

+            resultIsReadOnly = true;

           }

           internal Builder(ResultItem cloneFrom) {

             result = cloneFrom;

-            builderIsReadOnly = true;

+            resultIsReadOnly = true;

           }

           

-          bool builderIsReadOnly;

-          ResultItem result;

+          private bool resultIsReadOnly;

+          private ResultItem result;

           

           private ResultItem PrepareBuilder() {

-            if (builderIsReadOnly) {

+            if (resultIsReadOnly) {

               ResultItem original = result;

               result = new ResultItem();

-              builderIsReadOnly = false;

+              resultIsReadOnly = false;

               MergeFrom(original);

             }

             return result;

@@ -560,13 +568,13 @@
           }

           

           public override Builder Clear() {

-            result = DefaultInstance ?? new ResultItem();

-            builderIsReadOnly = true;

+            result = DefaultInstance;

+            resultIsReadOnly = true;

             return this;

           }

           

           public override Builder Clone() {

-            if (builderIsReadOnly) {

+            if (resultIsReadOnly) {

               return new Builder(result);

             } else {

               return new Builder().MergeFrom(result);

@@ -582,11 +590,11 @@
           }

           

           public override ResultItem BuildPartial() {

-            if (builderIsReadOnly) {

+            if (resultIsReadOnly) {

               return result;

             }

-            builderIsReadOnly = true;

-            return result;

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

           }

           

           public override Builder MergeFrom(pb::IMessage other) {

@@ -794,6 +802,11 @@
     public static SearchResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

       return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

     }

+    private SearchResponse MakeReadOnly() {

+      results_.MakeReadOnly();

+      return this;

+    }

+    

     public static Builder CreateBuilder() { return new Builder(); }

     public override Builder ToBuilder() { return CreateBuilder(this); }

     public override Builder CreateBuilderForType() { return new Builder(); }

@@ -809,22 +822,22 @@
         get { return this; }

       }

       public Builder() {

-        result = DefaultInstance ?? new SearchResponse();

-        builderIsReadOnly = result == DefaultInstance;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

       }

       internal Builder(SearchResponse cloneFrom) {

         result = cloneFrom;

-        builderIsReadOnly = true;

+        resultIsReadOnly = true;

       }

       

-      bool builderIsReadOnly;

-      SearchResponse result;

+      private bool resultIsReadOnly;

+      private SearchResponse result;

       

       private SearchResponse PrepareBuilder() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           SearchResponse original = result;

           result = new SearchResponse();

-          builderIsReadOnly = false;

+          resultIsReadOnly = false;

           MergeFrom(original);

         }

         return result;

@@ -839,13 +852,13 @@
       }

       

       public override Builder Clear() {

-        result = DefaultInstance ?? new SearchResponse();

-        builderIsReadOnly = true;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

         return this;

       }

       

       public override Builder Clone() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return new Builder(result);

         } else {

           return new Builder().MergeFrom(result);

@@ -861,12 +874,11 @@
       }

       

       public override SearchResponse BuildPartial() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return result;

         }

-        result.results_.MakeReadOnly();

-        builderIsReadOnly = true;

-        return result;

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

       }

       

       public override Builder MergeFrom(pb::IMessage other) {

@@ -994,7 +1006,7 @@
   [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

   [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]

   public sealed partial class RefineSearchRequest : pb::GeneratedMessage<RefineSearchRequest, RefineSearchRequest.Builder> {

-    private static readonly RefineSearchRequest defaultInstance = new Builder().BuildPartial();

+    private static readonly RefineSearchRequest defaultInstance = new RefineSearchRequest().MakeReadOnly();

     private static readonly string[] _refineSearchRequestFieldNames = new string[] { "Criteria", "previous_results" };

     private static readonly uint[] _refineSearchRequestFieldTags = new uint[] { 10, 18 };

     public static RefineSearchRequest DefaultInstance {

@@ -1002,7 +1014,7 @@
     }

     

     public override RefineSearchRequest DefaultInstanceForType {

-      get { return defaultInstance; }

+      get { return DefaultInstance; }

     }

     

     protected override RefineSearchRequest ThisMessage {

@@ -1031,12 +1043,12 @@
     

     public const int PreviousResultsFieldNumber = 2;

     private bool hasPreviousResults;

-    private global::Google.ProtocolBuffers.TestProtos.SearchResponse previousResults_ = global::Google.ProtocolBuffers.TestProtos.SearchResponse.DefaultInstance;

+    private global::Google.ProtocolBuffers.TestProtos.SearchResponse previousResults_;

     public bool HasPreviousResults {

       get { return hasPreviousResults; }

     }

     public global::Google.ProtocolBuffers.TestProtos.SearchResponse PreviousResults {

-      get { return previousResults_; }

+      get { return previousResults_ ?? global::Google.ProtocolBuffers.TestProtos.SearchResponse.DefaultInstance; }

     }

     

     public override bool IsInitialized {

@@ -1113,6 +1125,11 @@
     public static RefineSearchRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

       return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

     }

+    private RefineSearchRequest MakeReadOnly() {

+      criteria_.MakeReadOnly();

+      return this;

+    }

+    

     public static Builder CreateBuilder() { return new Builder(); }

     public override Builder ToBuilder() { return CreateBuilder(this); }

     public override Builder CreateBuilderForType() { return new Builder(); }

@@ -1128,22 +1145,22 @@
         get { return this; }

       }

       public Builder() {

-        result = DefaultInstance ?? new RefineSearchRequest();

-        builderIsReadOnly = result == DefaultInstance;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

       }

       internal Builder(RefineSearchRequest cloneFrom) {

         result = cloneFrom;

-        builderIsReadOnly = true;

+        resultIsReadOnly = true;

       }

       

-      bool builderIsReadOnly;

-      RefineSearchRequest result;

+      private bool resultIsReadOnly;

+      private RefineSearchRequest result;

       

       private RefineSearchRequest PrepareBuilder() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           RefineSearchRequest original = result;

           result = new RefineSearchRequest();

-          builderIsReadOnly = false;

+          resultIsReadOnly = false;

           MergeFrom(original);

         }

         return result;

@@ -1158,13 +1175,13 @@
       }

       

       public override Builder Clear() {

-        result = DefaultInstance ?? new RefineSearchRequest();

-        builderIsReadOnly = true;

+        result = DefaultInstance;

+        resultIsReadOnly = true;

         return this;

       }

       

       public override Builder Clone() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return new Builder(result);

         } else {

           return new Builder().MergeFrom(result);

@@ -1180,12 +1197,11 @@
       }

       

       public override RefineSearchRequest BuildPartial() {

-        if (builderIsReadOnly) {

+        if (resultIsReadOnly) {

           return result;

         }

-        result.criteria_.MakeReadOnly();

-        builderIsReadOnly = true;

-        return result;

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

       }

       

       public override Builder MergeFrom(pb::IMessage other) {

@@ -1340,7 +1356,7 @@
       public Builder ClearPreviousResults() {

         PrepareBuilder();

         result.hasPreviousResults = false;

-        result.previousResults_ = global::Google.ProtocolBuffers.TestProtos.SearchResponse.DefaultInstance;

+        result.previousResults_ = null;

         return this;

       }

     }