diff --git a/csharp/src/AddressBook/Addressbook.cs b/csharp/src/AddressBook/Addressbook.cs
index 85fa297..f2be5ba 100644
--- a/csharp/src/AddressBook/Addressbook.cs
+++ b/csharp/src/AddressBook/Addressbook.cs
@@ -189,10 +189,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -335,10 +332,7 @@
           while ((tag = input.ReadTag()) != 0) {
             switch(tag) {
               default:
-                if (pb::WireFormat.IsEndGroupTag(tag)) {
-                  return;
-                }
-                input.ConsumeLastField();
+                input.SkipLastField();
                 break;
               case 10: {
                 Number = input.ReadString();
@@ -441,10 +435,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             people_.AddEntriesFrom(input, _repeated_people_codec);
diff --git a/csharp/src/Google.Protobuf.Conformance/Conformance.cs b/csharp/src/Google.Protobuf.Conformance/Conformance.cs
index 50a6756..e905d4e 100644
--- a/csharp/src/Google.Protobuf.Conformance/Conformance.cs
+++ b/csharp/src/Google.Protobuf.Conformance/Conformance.cs
@@ -321,10 +321,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             ProtobufPayload = input.ReadBytes();
@@ -557,10 +554,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             ParseError = input.ReadString();
@@ -1829,10 +1823,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             OptionalInt32 = input.ReadInt32();
@@ -2256,10 +2247,7 @@
           while ((tag = input.ReadTag()) != 0) {
             switch(tag) {
               default:
-                if (pb::WireFormat.IsEndGroupTag(tag)) {
-                  return;
-                }
-                input.ConsumeLastField();
+                input.SkipLastField();
                 break;
               case 8: {
                 A = input.ReadInt32();
@@ -2373,10 +2361,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             C = input.ReadInt32();
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs b/csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs
index f6835c4..e9e1819 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs
@@ -476,10 +476,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             mapInt32Int32_.AddEntriesFrom(input, _map_mapInt32Int32_codec);
@@ -648,10 +645,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             if (testMap_ == null) {
@@ -748,10 +742,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             mapInt32Message_.AddEntriesFrom(input, _map_mapInt32Message_codec);
@@ -859,10 +850,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             map1_.AddEntriesFrom(input, _map_map1_codec);
@@ -1156,10 +1144,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             mapInt32Int32_.AddEntriesFrom(input, _map_mapInt32Int32_codec);
@@ -1309,10 +1294,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             type_.AddEntriesFrom(input, _map_type_codec);
@@ -1416,10 +1398,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             entry_.AddEntriesFrom(input, _map_entry_codec);
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportProto3.cs b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportProto3.cs
index 646a01a..bf527ac 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportProto3.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportProto3.cs
@@ -139,10 +139,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             D = input.ReadInt32();
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportPublicProto3.cs b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportPublicProto3.cs
index 225775a..ec46090 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportPublicProto3.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportPublicProto3.cs
@@ -125,10 +125,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             E = input.ReadInt32();
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs
index 1bf40ea..63119a3 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs
@@ -142,10 +142,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
         }
       }
@@ -222,10 +219,7 @@
           while ((tag = input.ReadTag()) != 0) {
             switch(tag) {
               default:
-                if (pb::WireFormat.IsEndGroupTag(tag)) {
-                  return;
-                }
-                input.ConsumeLastField();
+                input.SkipLastField();
                 break;
             }
           }
@@ -302,10 +296,7 @@
               while ((tag = input.ReadTag()) != 0) {
                 switch(tag) {
                   default:
-                    if (pb::WireFormat.IsEndGroupTag(tag)) {
-                      return;
-                    }
-                    input.ConsumeLastField();
+                    input.SkipLastField();
                     break;
                 }
               }
@@ -441,10 +432,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             value_ = (global::UnitTest.Issues.TestProtos.NegativeEnum) input.ReadEnum();
@@ -534,10 +522,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
         }
       }
@@ -730,10 +715,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             PrimitiveValue = input.ReadInt32();
@@ -860,10 +842,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Item = input.ReadInt32();
@@ -987,10 +966,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Types_ = input.ReadInt32();
@@ -1075,10 +1051,7 @@
           while ((tag = input.ReadTag()) != 0) {
             switch(tag) {
               default:
-                if (pb::WireFormat.IsEndGroupTag(tag)) {
-                  return;
-                }
-                input.ConsumeLastField();
+                input.SkipLastField();
                 break;
             }
           }
@@ -1343,10 +1316,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             PlainString = input.ReadString();
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs
index 58e5be6..bf4590a 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs
@@ -1211,10 +1211,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             SingleInt32 = input.ReadInt32();
@@ -1546,10 +1543,7 @@
           while ((tag = input.ReadTag()) != 0) {
             switch(tag) {
               default:
-                if (pb::WireFormat.IsEndGroupTag(tag)) {
-                  return;
-                }
-                input.ConsumeLastField();
+                input.SkipLastField();
                 break;
               case 8: {
                 Bb = input.ReadInt32();
@@ -1698,10 +1692,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             if (child_ == null) {
@@ -1818,10 +1809,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             DeprecatedInt32 = input.ReadInt32();
@@ -1923,10 +1911,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             C = input.ReadInt32();
@@ -2006,10 +1991,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
         }
       }
@@ -2110,10 +2092,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             if (foreignNested_ == null) {
@@ -2240,10 +2219,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             A = input.ReadInt32();
@@ -2374,10 +2350,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             if (a_ == null) {
@@ -2489,10 +2462,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             if (bb_ == null) {
@@ -2622,10 +2592,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             if (a_ == null) {
@@ -2859,10 +2826,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             PrimitiveField = input.ReadInt32();
@@ -3066,10 +3030,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             MyInt = input.ReadInt64();
@@ -3209,10 +3170,7 @@
           while ((tag = input.ReadTag()) != 0) {
             switch(tag) {
               default:
-                if (pb::WireFormat.IsEndGroupTag(tag)) {
-                  return;
-                }
-                input.ConsumeLastField();
+                input.SkipLastField();
                 break;
               case 8: {
                 Bb = input.ReadInt32();
@@ -3323,10 +3281,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             sparseEnum_ = (global::Google.Protobuf.TestProtos.TestSparseEnum) input.ReadEnum();
@@ -3428,10 +3383,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Data = input.ReadString();
@@ -3525,10 +3477,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             data_.AddEntriesFrom(input, _repeated_data_codec);
@@ -3630,10 +3579,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Data = input.ReadBytes();
@@ -3735,10 +3681,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Data = input.ReadBytes();
@@ -3840,10 +3783,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Data = input.ReadInt32();
@@ -3945,10 +3885,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Data = input.ReadUInt32();
@@ -4050,10 +3987,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Data = input.ReadInt64();
@@ -4155,10 +4089,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Data = input.ReadUInt64();
@@ -4260,10 +4191,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Data = input.ReadBool();
@@ -4438,10 +4366,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             FooInt = input.ReadInt32();
@@ -4730,10 +4655,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 722:
           case 720: {
@@ -5075,10 +4997,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 722:
           case 720: {
@@ -5308,10 +5227,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 98:
           case 101: {
@@ -5439,10 +5355,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             A = input.ReadString();
@@ -5522,10 +5435,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
         }
       }
@@ -5601,10 +5511,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
         }
       }
@@ -5680,10 +5587,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
         }
       }
@@ -5759,10 +5663,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
         }
       }
@@ -5838,10 +5739,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
         }
       }
@@ -5917,10 +5815,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
         }
       }
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs
index 0840fa2..16634e0 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs
@@ -679,10 +679,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             if (anyField_ == null) {
@@ -1136,10 +1133,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             anyField_.AddEntriesFrom(input, _repeated_anyField_codec);
@@ -1757,10 +1751,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             global::Google.Protobuf.WellKnownTypes.Any subBuilder = new global::Google.Protobuf.WellKnownTypes.Any();
@@ -2205,10 +2196,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             anyField_.AddEntriesFrom(input, _map_anyField_codec);
diff --git a/csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs b/csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs
index d2a0705..fbc0ff0 100644
--- a/csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs
+++ b/csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs
@@ -322,5 +322,28 @@
             // A normal implementation would have 0 now, as the explicit default would have been overwritten the 5.
             Assert.AreEqual(5, message.Int32Field);
         }
+
+        [Test]
+        public void UnknownFieldInWrapper()
+        {
+            var stream = new MemoryStream();
+            var output = new CodedOutputStream(stream);
+            var wrapperTag = WireFormat.MakeTag(TestWellKnownTypes.Int32FieldFieldNumber, WireFormat.WireType.LengthDelimited);
+            var unknownTag = WireFormat.MakeTag(15, WireFormat.WireType.Varint);
+            var valueTag = WireFormat.MakeTag(Int32Value.ValueFieldNumber, WireFormat.WireType.Varint);
+
+            output.WriteTag(wrapperTag);
+            output.WriteLength(4); // unknownTag + value 5 + valueType + value 6, each 1 byte
+            output.WriteTag(unknownTag);
+            output.WriteInt32((int) valueTag); // Sneakily "pretend" it's a tag when it's really a value
+            output.WriteTag(valueTag);
+            output.WriteInt32(6);
+
+            output.Flush();
+            stream.Position = 0;
+            
+            var message = TestWellKnownTypes.Parser.ParseFrom(stream);
+            Assert.AreEqual(6, message.Int32Field);
+        }
     }
 }
diff --git a/csharp/src/Google.Protobuf/InvalidProtocolBufferException.cs b/csharp/src/Google.Protobuf/InvalidProtocolBufferException.cs
index 6905a6a..01d5539 100644
--- a/csharp/src/Google.Protobuf/InvalidProtocolBufferException.cs
+++ b/csharp/src/Google.Protobuf/InvalidProtocolBufferException.cs
@@ -45,6 +45,12 @@
         {
         }
 
+        internal static InvalidProtocolBufferException MoreDataAvailable()
+        {
+            return new InvalidProtocolBufferException(
+                "Completed reading a message while more data was available in the stream.");
+        }
+
         internal static InvalidProtocolBufferException TruncatedMessage()
         {
             return new InvalidProtocolBufferException(
diff --git a/csharp/src/Google.Protobuf/Reflection/DescriptorProtoFile.cs b/csharp/src/Google.Protobuf/Reflection/DescriptorProtoFile.cs
index d66bdb8..59c5e69 100644
--- a/csharp/src/Google.Protobuf/Reflection/DescriptorProtoFile.cs
+++ b/csharp/src/Google.Protobuf/Reflection/DescriptorProtoFile.cs
@@ -242,10 +242,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             file_.AddEntriesFrom(input, _repeated_file_codec);
@@ -539,10 +536,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -833,10 +827,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -1000,10 +991,7 @@
           while ((tag = input.ReadTag()) != 0) {
             switch(tag) {
               default:
-                if (pb::WireFormat.IsEndGroupTag(tag)) {
-                  return;
-                }
-                input.ConsumeLastField();
+                input.SkipLastField();
                 break;
               case 8: {
                 Start = input.ReadInt32();
@@ -1131,10 +1119,7 @@
           while ((tag = input.ReadTag()) != 0) {
             switch(tag) {
               default:
-                if (pb::WireFormat.IsEndGroupTag(tag)) {
-                  return;
-                }
-                input.ConsumeLastField();
+                input.SkipLastField();
                 break;
               case 8: {
                 Start = input.ReadInt32();
@@ -1424,10 +1409,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -1597,10 +1579,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -1741,10 +1720,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -1904,10 +1880,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -2059,10 +2032,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -2288,10 +2258,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -2716,10 +2683,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             JavaPackage = input.ReadString();
@@ -2969,10 +2933,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             MessageSetWireFormat = input.ReadBool();
@@ -3214,10 +3175,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             ctype_ = (global::Google.Protobuf.Reflection.FieldOptions.Types.CType) input.ReadEnum();
@@ -3397,10 +3355,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 16: {
             AllowAlias = input.ReadBool();
@@ -3524,10 +3479,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Deprecated = input.ReadBool();
@@ -3647,10 +3599,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 264: {
             Deprecated = input.ReadBool();
@@ -3770,10 +3719,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 264: {
             Deprecated = input.ReadBool();
@@ -4003,10 +3949,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 18: {
             name_.AddEntriesFrom(input, _repeated_name_codec);
@@ -4155,10 +4098,7 @@
           while ((tag = input.ReadTag()) != 0) {
             switch(tag) {
               default:
-                if (pb::WireFormat.IsEndGroupTag(tag)) {
-                  return;
-                }
-                input.ConsumeLastField();
+                input.SkipLastField();
                 break;
               case 10: {
                 NamePart_ = input.ReadString();
@@ -4261,10 +4201,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             location_.AddEntriesFrom(input, _repeated_location_codec);
@@ -4431,10 +4368,7 @@
           while ((tag = input.ReadTag()) != 0) {
             switch(tag) {
               default:
-                if (pb::WireFormat.IsEndGroupTag(tag)) {
-                  return;
-                }
-                input.ConsumeLastField();
+                input.SkipLastField();
                 break;
               case 10:
               case 8: {
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Any.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Any.cs
index 9fc653b..204b37c 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Any.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Any.cs
@@ -150,10 +150,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             TypeUrl = input.ReadString();
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Api.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Api.cs
index 8a94e7b..a5f9509 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Api.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Api.cs
@@ -213,10 +213,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -439,10 +436,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs
index d74636d..aa34f2d 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs
@@ -151,10 +151,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Seconds = input.ReadInt64();
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs
index 0f1d7f5..7d699c1 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs
@@ -106,10 +106,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
         }
       }
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs b/csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs
index 9bd47a9..0dac440 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs
@@ -120,10 +120,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             paths_.AddEntriesFrom(input, _repeated_paths_codec);
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs b/csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs
index ae79884..8347999 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs
@@ -129,10 +129,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             FileName = input.ReadString();
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs
index ea8b105..1e8a823 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs
@@ -139,10 +139,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             fields_.AddEntriesFrom(input, _map_fields_codec);
@@ -392,10 +389,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             kind_ = input.ReadEnum();
@@ -520,10 +514,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             values_.AddEntriesFrom(input, _repeated_values_codec);
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs
index 89355bd..d7c0954 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs
@@ -151,10 +151,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Seconds = input.ReadInt64();
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Type.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Type.cs
index 36116a6..ff2ecc5 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Type.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Type.cs
@@ -226,10 +226,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -496,10 +493,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             kind_ = (global::Google.Protobuf.WellKnownTypes.Field.Types.Kind) input.ReadEnum();
@@ -716,10 +710,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -872,10 +863,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
@@ -1010,10 +998,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Name = input.ReadString();
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs
index 19ed599..9ecaf47 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs
@@ -138,10 +138,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 9: {
             Value = input.ReadDouble();
@@ -243,10 +240,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 13: {
             Value = input.ReadFloat();
@@ -348,10 +342,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Value = input.ReadInt64();
@@ -453,10 +444,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Value = input.ReadUInt64();
@@ -558,10 +546,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Value = input.ReadInt32();
@@ -663,10 +648,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Value = input.ReadUInt32();
@@ -768,10 +750,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 8: {
             Value = input.ReadBool();
@@ -873,10 +852,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Value = input.ReadString();
@@ -978,10 +954,7 @@
       while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
           default:
-            if (pb::WireFormat.IsEndGroupTag(tag)) {
-              return;
-            }
-            input.ConsumeLastField();
+            input.SkipLastField();
             break;
           case 10: {
             Value = input.ReadBytes();
