Mutate message when we create new one.
diff --git a/src/field_instance.h b/src/field_instance.h
index 5ad89cb..4abe853 100644
--- a/src/field_instance.h
+++ b/src/field_instance.h
@@ -91,7 +91,10 @@
   }
 
   void GetDefault(std::unique_ptr<protobuf::Message>* out) const {
-    out->reset();
+    out->reset(reflection()
+                   .GetMessageFactory()
+                   ->GetPrototype(descriptor_->message_type())
+                   ->New());
   }
 
   void Load(int32_t* value) const {
diff --git a/src/mutator.cc b/src/mutator.cc
index 55b3ea3..a400fc8 100644
--- a/src/mutator.cc
+++ b/src/mutator.cc
@@ -378,15 +378,21 @@
                                   size_increase_hint_));
   }
 
-  void Mutate(std::unique_ptr<Message>*) const {}
+  void Mutate(std::unique_ptr<Message>* message) const {
+    assert(!enforce_changes_);
+    assert(*message);
+    if (GetRandomBool(mutator_->random(), 100)) return;
+    mutator_->Mutate(message->get(), size_increase_hint_);
+  }
 
  private:
   template <class T, class F>
   void RepeatMutate(T* value, F mutate,
                     size_t unchanged_one_out_of = 100) const {
     if (!enforce_changes_ &&
-        GetRandomBool(mutator_->random(), unchanged_one_out_of))
+        GetRandomBool(mutator_->random(), unchanged_one_out_of)) {
       return;
+    }
     T tmp = *value;
     for (int i = 0; i < 10; ++i) {
       *value = mutate(*value);