diff --git a/python/flatbuffers/builder.py b/python/flatbuffers/builder.py
index d04ee85..f9448b0 100644
--- a/python/flatbuffers/builder.py
+++ b/python/flatbuffers/builder.py
@@ -103,7 +103,7 @@
 
     ## @cond FLATBUFFERS_INTENRAL
     __slots__ = ("Bytes", "current_vtable", "head", "minalign", "objectEnd",
-                 "vtables", "nested", "finished")
+                 "vtables", "nested", "forceDefaults", "finished")
 
     """Maximum buffer size constant, in bytes.
 
@@ -131,10 +131,10 @@
         self.objectEnd = None
         self.vtables = {}
         self.nested = False
+        self.forceDefaults = False
         ## @endcond
         self.finished = False
 
-
     def Output(self):
         """Return the portion of the buffer that has been used for writing data.
 
@@ -466,7 +466,7 @@
 
         # tobytes ensures c_contiguous ordering
         self.Bytes[self.Head():self.Head()+l] = x_lend.tobytes(order='C')
-        
+
         return self.EndVector(x.size)
 
     ## @cond FLATBUFFERS_INTERNAL
@@ -514,17 +514,24 @@
         """Finish finalizes a buffer, pointing to the given `rootTable`."""
         N.enforce_number(rootTable, N.UOffsetTFlags)
 
+        prepSize = N.UOffsetTFlags.bytewidth
         if file_identifier is not None:
-            self.Prep(N.UOffsetTFlags.bytewidth, N.Uint8Flags.bytewidth*4)
-            
+            prepSize += N.Int32Flags.bytewidth
+        if sizePrefix:
+            prepSize += N.Int32Flags.bytewidth
+        self.Prep(self.minalign, prepSize)
+
+        if file_identifier is not None:
+            self.Prep(N.UOffsetTFlags.bytewidth, encode.FILE_IDENTIFIER_LENGTH)
+
             # Convert bytes object file_identifier to an array of 4 8-bit integers,
             # and use big-endian to enforce size compliance.
             # https://docs.python.org/2/library/struct.html#format-characters
             file_identifier = N.struct.unpack(">BBBB", file_identifier)
             for i in range(encode.FILE_IDENTIFIER_LENGTH-1, -1, -1):
                 # Place the bytes of the file_identifer in reverse order:
-                self.Place(file_identifier[i], N.Uint8Flags)   
-                
+                self.Place(file_identifier[i], N.Uint8Flags)
+
         self.PrependUOffsetTRelative(rootTable)
         if sizePrefix:
             size = len(self.Bytes) - self.Head()
@@ -552,7 +559,7 @@
     def PrependSlot(self, flags, o, x, d):
         N.enforce_number(x, flags)
         N.enforce_number(d, flags)
-        if x != d:
+        if x != d or self.forceDefaults:
             self.Prepend(flags, x)
             self.Slot(o)
 
@@ -589,7 +596,7 @@
         be set to zero and no other data will be written.
         """
 
-        if x != d:
+        if x != d or self.forceDefaults:
             self.PrependUOffsetTRelative(x)
             self.Slot(o)
 
@@ -691,6 +698,15 @@
         """
         self.Prepend(N.Float64Flags, x)
 
+    def ForceDefaults(self, forceDefaults):
+        """
+        In order to save space, fields that are set to their default value
+        don't get serialized into the buffer. Forcing defaults provides a
+        way to manually disable this optimization. When set to `True`, will
+        always serialize default values.
+        """
+        self.forceDefaults = forceDefaults
+
 ##############################################################
 
     ## @cond FLATBUFFERS_INTERNAL
