diff --git a/include/flatbuffers/reflection.h b/include/flatbuffers/reflection.h
index 70d9971..8e700f0 100644
--- a/include/flatbuffers/reflection.h
+++ b/include/flatbuffers/reflection.h
@@ -21,7 +21,7 @@
 // file) is needed to generate this header in the first place.
 // Should normally not be a problem since it can be generated by the
 // previous version of flatc whenever this code needs to change.
-// See reflection/generate_code.sh
+// See scripts/generate_code.py for generation.
 #include "flatbuffers/reflection_generated.h"
 
 // Helper functionality for reflection.
@@ -47,29 +47,31 @@
 inline size_t GetTypeSize(reflection::BaseType base_type) {
   // This needs to correspond to the BaseType enum.
   static size_t sizes[] = {
-    0, // None
-    1, // UType
-    1, // Bool
-    1, // Byte
-    1, // UByte
-    2, // Short
-    2, // UShort
-    4, // Int
-    4, // UInt
-    8, // Long
-    8, // ULong
-    4, // Float
-    8, // Double
-    4, // String
-    4, // Vector
-    4, // Obj
-    4, // Union
-    0, // Array. Only used in structs. 0 was chosen to prevent out-of-bounds errors.
+    0,  // None
+    1,  // UType
+    1,  // Bool
+    1,  // Byte
+    1,  // UByte
+    2,  // Short
+    2,  // UShort
+    4,  // Int
+    4,  // UInt
+    8,  // Long
+    8,  // ULong
+    4,  // Float
+    8,  // Double
+    4,  // String
+    4,  // Vector
+    4,  // Obj
+    4,  // Union
+    0,  // Array. Only used in structs. 0 was chosen to prevent out-of-bounds
+        // errors.
 
     0  // MaxBaseType. This must be kept the last entry in this array.
-    };
+  };
   static_assert(sizeof(sizes) / sizeof(size_t) == reflection::MaxBaseType + 1,
-                "Size of sizes[] array does not match the count of BaseType enum values.");
+                "Size of sizes[] array does not match the count of BaseType "
+                "enum values.");
   return sizes[base_type];
 }
 
@@ -377,12 +379,12 @@
  public:
   pointer_inside_vector(T *ptr, std::vector<U> &vec)
       : offset_(reinterpret_cast<uint8_t *>(ptr) -
-                reinterpret_cast<uint8_t *>(flatbuffers::vector_data(vec))),
+                reinterpret_cast<uint8_t *>(vec.data())),
         vec_(vec) {}
 
   T *operator*() const {
-    return reinterpret_cast<T *>(
-        reinterpret_cast<uint8_t *>(flatbuffers::vector_data(vec_)) + offset_);
+    return reinterpret_cast<T *>(reinterpret_cast<uint8_t *>(vec_.data()) +
+                                 offset_);
   }
   T *operator->() const { return operator*(); }
 
@@ -410,7 +412,7 @@
   FLATBUFFERS_ASSERT(type_field);
   auto union_type = GetFieldI<uint8_t>(table, *type_field);
   auto enumval = enumdef->values()->LookupByKey(union_type);
-  return *enumval->object();
+  return *schema.objects()->Get(enumval->union_type()->index());
 }
 
 // Changes the contents of a string inside a FlatBuffer. FlatBuffer must
