diff --git a/include/tosa_generated.h b/include/tosa_generated.h
index f36ed37..f2c9459 100644
--- a/include/tosa_generated.h
+++ b/include/tosa_generated.h
@@ -1995,13 +1995,13 @@
     return GetField<int32_t>(VT__MAJOR, 0);
   }
   int32_t _minor() const {
-    return GetField<int32_t>(VT__MINOR, 41);
+    return GetField<int32_t>(VT__MINOR, 50);
   }
   int32_t _patch() const {
     return GetField<int32_t>(VT__PATCH, 0);
   }
   bool _draft() const {
-    return GetField<uint8_t>(VT__DRAFT, 1) != 0;
+    return GetField<uint8_t>(VT__DRAFT, 0) != 0;
   }
   bool Verify(flatbuffers::Verifier &verifier) const {
     return VerifyTableStart(verifier) &&
@@ -2021,13 +2021,13 @@
     fbb_.AddElement<int32_t>(Version::VT__MAJOR, _major, 0);
   }
   void add__minor(int32_t _minor) {
-    fbb_.AddElement<int32_t>(Version::VT__MINOR, _minor, 41);
+    fbb_.AddElement<int32_t>(Version::VT__MINOR, _minor, 50);
   }
   void add__patch(int32_t _patch) {
     fbb_.AddElement<int32_t>(Version::VT__PATCH, _patch, 0);
   }
   void add__draft(bool _draft) {
-    fbb_.AddElement<uint8_t>(Version::VT__DRAFT, static_cast<uint8_t>(_draft), 1);
+    fbb_.AddElement<uint8_t>(Version::VT__DRAFT, static_cast<uint8_t>(_draft), 0);
   }
   explicit VersionBuilder(flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
@@ -2043,9 +2043,9 @@
 inline flatbuffers::Offset<Version> CreateVersion(
     flatbuffers::FlatBufferBuilder &_fbb,
     int32_t _major = 0,
-    int32_t _minor = 41,
+    int32_t _minor = 50,
     int32_t _patch = 0,
-    bool _draft = true) {
+    bool _draft = false) {
   VersionBuilder builder_(_fbb);
   builder_.add__patch(_patch);
   builder_.add__minor(_minor);
diff --git a/include/tosa_serialization_handler.h b/include/tosa_serialization_handler.h
index 462c7ef..d3ee7f4 100644
--- a/include/tosa_serialization_handler.h
+++ b/include/tosa_serialization_handler.h
@@ -27,9 +27,9 @@
 
 // Keep version number in sync with the version default value with schema/tosa.fbs
 #define TOSA_VERSION_MAJOR 0
-#define TOSA_VERSION_MINOR 41
+#define TOSA_VERSION_MINOR 50
 #define TOSA_VERSION_PATCH 0
-#define TOSA_VERSION_DRAFT true
+#define TOSA_VERSION_DRAFT false
 #define TENSOR_BUFFER_FORCE_ALIGNMENT 8
 
 namespace tosa
diff --git a/python/serializer/tosa_serializer.py b/python/serializer/tosa_serializer.py
index 861ea46..e7bcef1 100644
--- a/python/serializer/tosa_serializer.py
+++ b/python/serializer/tosa_serializer.py
@@ -30,9 +30,9 @@
 
 # Keep version number in sync with the version default value with schema/tosa.fbs
 TOSA_VERSION_MAJOR = 0
-TOSA_VERSION_MINOR = 41
+TOSA_VERSION_MINOR = 50
 TOSA_VERSION_PATCH = 0
-TOSA_VERSION_DRAFT = True
+TOSA_VERSION_DRAFT = False
 TOSA_VERSION = [
     TOSA_VERSION_MAJOR,
     TOSA_VERSION_MINOR,
diff --git a/python/tosa/Version.py b/python/tosa/Version.py
index 1eaa351..3a7dd02 100644
--- a/python/tosa/Version.py
+++ b/python/tosa/Version.py
@@ -40,7 +40,7 @@
         o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
         if o != 0:
             return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos)
-        return 41
+        return 50
 
     # Version
     def _patch(self):
@@ -54,7 +54,7 @@
         o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
         if o != 0:
             return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
-        return True
+        return False
 
 def VersionStart(builder): builder.StartObject(4)
 def Start(builder):
@@ -62,13 +62,13 @@
 def VersionAdd_major(builder, Major): builder.PrependInt32Slot(0, Major, 0)
 def Add_major(builder, Major):
     return VersionAdd_major(builder, Major)
-def VersionAdd_minor(builder, Minor): builder.PrependInt32Slot(1, Minor, 41)
+def VersionAdd_minor(builder, Minor): builder.PrependInt32Slot(1, Minor, 50)
 def Add_minor(builder, Minor):
     return VersionAdd_minor(builder, Minor)
 def VersionAdd_patch(builder, Patch): builder.PrependInt32Slot(2, Patch, 0)
 def Add_patch(builder, Patch):
     return VersionAdd_patch(builder, Patch)
-def VersionAdd_draft(builder, Draft): builder.PrependBoolSlot(3, Draft, 1)
+def VersionAdd_draft(builder, Draft): builder.PrependBoolSlot(3, Draft, 0)
 def Add_draft(builder, Draft):
     return VersionAdd_draft(builder, Draft)
 def VersionEnd(builder): return builder.EndObject()
diff --git a/schema/tosa.fbs b/schema/tosa.fbs
index e871562..54b9079 100644
--- a/schema/tosa.fbs
+++ b/schema/tosa.fbs
@@ -283,9 +283,9 @@
 
 table Version {
   _major: int32 = 0;
-  _minor: int32 = 41;
+  _minor: int32 = 50;
   _patch: int32 = 0;
-  _draft: bool = true;
+  _draft: bool = false;
 }
 
 table TosaTensor {
