Do not add the same OneOf field.
diff --git a/src/protobuf_mutator.cc b/src/protobuf_mutator.cc
index 7b43341..e63cee6 100644
--- a/src/protobuf_mutator.cc
+++ b/src/protobuf_mutator.cc
@@ -156,18 +156,26 @@
       if (const OneofDescriptor* oneof = field->containing_oneof()) {
         // Handle entire oneof group on the first field.
         if (field->index_in_oneof() == 0) {
-          sampler_.Try(
-              add_weight_,
-              {{message,
-                oneof->field(GetRandomIndex(random_, oneof->field_count()))},
-               Mutation::Add});
-          if (const FieldDescriptor* field =
-                  reflection->GetOneofFieldDescriptor(*message, oneof)) {
-            if (field->cpp_type() != FieldDescriptor::CPPTYPE_MESSAGE)
-              sampler_.Try(kMutateWeight, {{message, field}, Mutation::Mutate});
-            sampler_.Try(delete_weight_, {{message, field}, Mutation::Delete});
+          assert(oneof->field_count());
+          const FieldDescriptor* current_field =
+              reflection->GetOneofFieldDescriptor(*message, oneof);
+          for (;;) {
+            const FieldDescriptor* add_field =
+                oneof->field(GetRandomIndex(random_, oneof->field_count()));
+            if (add_field != current_field) {
+              sampler_.Try(add_weight_, {{message, add_field}, Mutation::Add});
+              break;
+            }
+            if (oneof->field_count() < 2) break;
+          }
+          if (current_field) {
+            if (current_field->cpp_type() != FieldDescriptor::CPPTYPE_MESSAGE)
+              sampler_.Try(kMutateWeight,
+                           {{message, current_field}, Mutation::Mutate});
+            sampler_.Try(delete_weight_,
+                         {{message, current_field}, Mutation::Delete});
             sampler_.Try(GetCopyWeight(field),
-                         {{message, field}, Mutation::Copy});
+                         {{message, current_field}, Mutation::Copy});
           }
         }
       } else {