diff --git a/src/templates/generated.mako.hpp b/src/templates/generated.mako.hpp
index 7c6e527..0911e3a 100644
--- a/src/templates/generated.mako.hpp
+++ b/src/templates/generated.mako.hpp
@@ -4,6 +4,9 @@
 
 #include <array>
 #include <string>
+#include "data_types.hpp"
+#include "propertywatchimpl.hpp"
+#include "sdbusplus.hpp"
 
 using namespace std::string_literals;
 
@@ -77,6 +80,69 @@
         return properties;
     }
 };
+
+struct ConfigPropertyStorage
+{
+    using Storage = std::array<any_ns::any, ${len(instances)}>;
+
+    static auto& get()
+    {
+        static Storage storage;
+        return storage;
+    }
+};
+
+struct ConfigPropertyIndicies
+{
+    using PropertyIndicies = std::array<PropertyIndex, ${len(instancegroups)}>;
+
+    static auto& get()
+    {
+        static const PropertyIndicies propertyIndicies =
+        {
+            {
+% for g in instancegroups:
+                {
+    % for i in g.members:
+                    {
+                        PropertyIndex::key_type
+                        {
+                            ConfigPaths::get()[${i[0]}],
+                            ConfigInterfaces::get()[${i[2]}],
+                            ConfigProperties::get()[${i[3]}]
+                        },
+                        PropertyIndex::mapped_type
+                        {
+                            ConfigMeta::get()[${i[1]}],
+                            ConfigMeta::get()[${i[4]}],
+                            ConfigPropertyStorage::get()[${i[5]}]
+                        },
+                    },
+    % endfor
+                },
+% endfor
+            }
+        };
+        return propertyIndicies;
+    }
+};
+
+struct ConfigPropertyWatches
+{
+    using PropertyWatches = std::array<std::unique_ptr<Watch>, ${len(watches)}>;
+
+    static auto& get()
+    {
+        static const PropertyWatches propertyWatches =
+        {
+% for w in watches:
+            std::make_unique<PropertyWatchOfType<${w.datatype}, SDBusPlus>>(
+                ConfigPropertyIndicies::get()[${w.instances}]),
+% endfor
+        };
+        return propertyWatches;
+    }
+};
 } // namespace monitoring
 } // namespace dbus
 } // namespace phosphor
