diff --git a/include/tosa_generated.h b/include/tosa_generated.h
index b07fa8f..a81ff9c 100644
--- a/include/tosa_generated.h
+++ b/include/tosa_generated.h
@@ -2230,7 +2230,8 @@
     VT_TYPE = 8,
     VT_DATA = 10,
     VT_VARIABLE = 12,
-    VT_IS_UNRANKED = 14
+    VT_IS_UNRANKED = 14,
+    VT_VARIABLE_NAME = 16
   };
   const ::flatbuffers::String *name() const {
     return GetPointer<const ::flatbuffers::String *>(VT_NAME);
@@ -2250,6 +2251,9 @@
   bool is_unranked() const {
     return GetField<uint8_t>(VT_IS_UNRANKED, 0) != 0;
   }
+  const ::flatbuffers::String *variable_name() const {
+    return GetPointer<const ::flatbuffers::String *>(VT_VARIABLE_NAME);
+  }
   bool Verify(::flatbuffers::Verifier &verifier) const {
     return VerifyTableStart(verifier) &&
            VerifyOffset(verifier, VT_NAME) &&
@@ -2261,6 +2265,8 @@
            verifier.VerifyVector(data()) &&
            VerifyField<uint8_t>(verifier, VT_VARIABLE, 1) &&
            VerifyField<uint8_t>(verifier, VT_IS_UNRANKED, 1) &&
+           VerifyOffset(verifier, VT_VARIABLE_NAME) &&
+           verifier.VerifyString(variable_name()) &&
            verifier.EndTable();
   }
 };
@@ -2287,6 +2293,9 @@
   void add_is_unranked(bool is_unranked) {
     fbb_.AddElement<uint8_t>(TosaTensor::VT_IS_UNRANKED, static_cast<uint8_t>(is_unranked), 0);
   }
+  void add_variable_name(::flatbuffers::Offset<::flatbuffers::String> variable_name) {
+    fbb_.AddOffset(TosaTensor::VT_VARIABLE_NAME, variable_name);
+  }
   explicit TosaTensorBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
     start_ = fbb_.StartTable();
@@ -2305,8 +2314,10 @@
     tosa::DType type = tosa::DType_UNKNOWN,
     ::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> data = 0,
     bool variable = false,
-    bool is_unranked = false) {
+    bool is_unranked = false,
+    ::flatbuffers::Offset<::flatbuffers::String> variable_name = 0) {
   TosaTensorBuilder builder_(_fbb);
+  builder_.add_variable_name(variable_name);
   builder_.add_data(data);
   builder_.add_type(type);
   builder_.add_shape(shape);
@@ -2323,11 +2334,13 @@
     tosa::DType type = tosa::DType_UNKNOWN,
     const std::vector<uint8_t> *data = nullptr,
     bool variable = false,
-    bool is_unranked = false) {
+    bool is_unranked = false,
+    const char *variable_name = nullptr) {
   auto name__ = name ? _fbb.CreateString(name) : 0;
   auto shape__ = shape ? _fbb.CreateVector<int32_t>(*shape) : 0;
   if (data) { _fbb.ForceVectorAlignment(data->size(), sizeof(uint8_t), 8); }
   auto data__ = data ? _fbb.CreateVector<uint8_t>(*data) : 0;
+  auto variable_name__ = variable_name ? _fbb.CreateString(variable_name) : 0;
   return tosa::CreateTosaTensor(
       _fbb,
       name__,
@@ -2335,7 +2348,8 @@
       type,
       data__,
       variable,
-      is_unranked);
+      is_unranked,
+      variable_name__);
 }
 
 struct TosaOperator FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
diff --git a/include/tosa_serialization_handler.h b/include/tosa_serialization_handler.h
index 814395b..e5448bc 100644
--- a/include/tosa_serialization_handler.h
+++ b/include/tosa_serialization_handler.h
@@ -150,14 +150,16 @@
                             const flatbuffers::Vector<int32_t>* shape,
                             DType dtype,
                             const flatbuffers::Vector<uint8_t>* data,
-                            const bool variable    = false,
-                            const bool is_unranked = false);
+                            const bool variable                      = false,
+                            const bool is_unranked                   = false,
+                            const flatbuffers::String* variable_name = NULL);
     TosaSerializationTensor(const std::string& name,
                             const std::vector<int32_t>& shape,
                             DType dtype,
                             const std::vector<uint8_t>& data,
-                            const bool variable    = false,
-                            const bool is_unranked = false);
+                            const bool variable              = false,
+                            const bool is_unranked           = false,
+                            const std::string& variable_name = "");
     TosaSerializationTensor();
     ~TosaSerializationTensor();
 
@@ -186,6 +188,10 @@
     {
         return _is_unranked;
     }
+    const std::string GetVariableName() const
+    {
+        return _variable_name;
+    }
 
     // modifier
     void SetDtype(DType dtype)
@@ -225,6 +231,7 @@
     bool _variable;              /* is this a variable tensor */
     std::vector<uint8_t> _data;  /* data array */
     bool _is_unranked;           /* whether this is an unranked tensor */
+    std::string _variable_name;  /* name for variable tensors */
 };
 
 class TosaSerializationOperator
