diff --git a/util/dvsim/FlowCfg.py b/util/dvsim/FlowCfg.py
index 4d6cef1..1167225 100644
--- a/util/dvsim/FlowCfg.py
+++ b/util/dvsim/FlowCfg.py
@@ -99,11 +99,11 @@
                 log.error("Parse error!\n%s", self.cfgs)
                 sys.exit(1)
 
-    @staticmethod
-    def create_instance(flow_cfg_file, proj_root, args):
-        '''Create a new instance of this class as with given parameters.
+    def create_instance(self, flow_cfg_file):
+        '''Create a new instance of this class for the given config file.
+
         '''
-        return FlowCfg(flow_cfg_file, proj_root, args)
+        return type(self)(flow_cfg_file, self.proj_root, self.args)
 
     def kill(self):
         '''kill running processes and jobs gracefully
@@ -254,18 +254,14 @@
                     cfg_file = subst_wildcards(entry,
                                                self.__dict__,
                                                ignore_error=True)
-                    self.cfgs.append(
-                        self.create_instance(cfg_file, self.proj_root,
-                                             self.args))
+                    self.cfgs.append(self.create_instance(cfg_file))
 
                 elif type(entry) is dict:
                     # Treat this as a cfg expanded in-line
                     temp_cfg_file = self._conv_inline_cfg_to_hjson(entry)
                     if not temp_cfg_file:
                         continue
-                    self.cfgs.append(
-                        self.create_instance(temp_cfg_file, self.proj_root,
-                                             self.args))
+                    self.cfgs.append(self.create_instance(temp_cfg_file))
 
                     # Delete the temp_cfg_file once the instance is created
                     try:
diff --git a/util/dvsim/LintCfg.py b/util/dvsim/LintCfg.py
index 3184aab..773f534 100644
--- a/util/dvsim/LintCfg.py
+++ b/util/dvsim/LintCfg.py
@@ -50,12 +50,6 @@
         else:
             self.results_title = self.name.upper() + " Lint Results"
 
-    @staticmethod
-    def create_instance(flow_cfg_file, proj_root, args):
-        '''Create a new instance of this class as with given parameters.
-        '''
-        return LintCfg(flow_cfg_file, proj_root, args)
-
     def gen_results_summary(self):
         '''
         Gathers the aggregated results from all sub configs
diff --git a/util/dvsim/OneShotCfg.py b/util/dvsim/OneShotCfg.py
index a82db23..be5b6e6 100644
--- a/util/dvsim/OneShotCfg.py
+++ b/util/dvsim/OneShotCfg.py
@@ -120,12 +120,6 @@
         # Run some post init checks
         super().__post_init__()
 
-    @staticmethod
-    def create_instance(flow_cfg_file, proj_root, args):
-        '''Create a new instance of this class as with given parameters.
-        '''
-        return OneShotCfg(flow_cfg_file, proj_root, args)
-
     # Purge the output directories. This operates on self.
     def _purge(self):
         if self.scratch_path:
diff --git a/util/dvsim/SimCfg.py b/util/dvsim/SimCfg.py
index 7d43d9a..1afa573 100644
--- a/util/dvsim/SimCfg.py
+++ b/util/dvsim/SimCfg.py
@@ -167,12 +167,6 @@
         # Run some post init checks
         super().__post_init__()
 
-    @staticmethod
-    def create_instance(flow_cfg_file, proj_root, args):
-        '''Create a new instance of this class as with given parameters.
-        '''
-        return SimCfg(flow_cfg_file, proj_root, args)
-
     def kill(self):
         '''kill running processes and jobs gracefully
         '''
diff --git a/util/dvsim/SynCfg.py b/util/dvsim/SynCfg.py
index a901a4d..e3acd62 100644
--- a/util/dvsim/SynCfg.py
+++ b/util/dvsim/SynCfg.py
@@ -26,12 +26,6 @@
         # Set the title for synthesis results.
         self.results_title = self.name.upper() + " Synthesis Results"
 
-    @staticmethod
-    def create_instance(flow_cfg_file, proj_root, args):
-        '''Create a new instance of this class as with given parameters.
-        '''
-        return SynCfg(flow_cfg_file, proj_root, args)
-
     def gen_results_summary(self):
         '''
         Gathers the aggregated results from all sub configs
