diff --git a/dagflow/bundles/load_parameters.py b/dagflow/bundles/load_parameters.py
index dda5f272a7d712d0bdac89b996f604dadb601246..f0b496af620c2b73c650b1bca1d25b19f785db3a 100644
--- a/dagflow/bundles/load_parameters.py
+++ b/dagflow/bundles/load_parameters.py
@@ -64,12 +64,15 @@ def IsFormatOk(format):
         return f1 in ('value', 'central')
 
 IsFormat = Schema(IsFormatOk, error='Invalid parameter format "{}".')
+IsStrSeq = (str,)
+IsStrSeqOrStr = Or(IsStrSeq, And(str, Use(lambda s: (s,))))
 IsParsCfgDict = Schema({
     'parameters': IsValuesDict,
     'labels': IsLabelsDict,
     'format': IsFormat,
     'state': Or('fixed', 'variable', error='Invalid parameters state: {}'),
-    Optional('path', default=''): str
+    Optional('path', default=''): str,
+    Optional('replicate', default=((),)): (IsStrSeqOrStr,),
     },
     # error = 'Invalid parameters configuration: {}'
 )
@@ -197,22 +200,26 @@ def load_parameters(acfg):
         sep='.'
     )
 
+    subkeys = cfg['replicate']
+
     normpars = []
-    for key, varcfg in iterate_varcfgs(cfg):
-        skey = '.'.join(key)
-        label = varcfg['label']
-        label['key'] = skey
-        label.setdefault('text', skey)
-
-        varcfg.setdefault(state, True)
-
-        par = Parameters.from_numbers(**varcfg)
-        if par.is_constrained:
-            target = ('constrained', path)
-        elif par.is_fixed:
-            target = ('constant', path)
-        else:
-            target = ('free', path)
+    for key_general, varcfg in iterate_varcfgs(cfg):
+        for subkey in subkeys:
+            key = key_general + subkey
+            key_str = '.'.join(key)
+            label = varcfg['label']
+            label['key'] = key_str
+            label.setdefault('text', key_str)
+
+            varcfg.setdefault(state, True)
+
+            par = Parameters.from_numbers(**varcfg)
+            if par.is_constrained:
+                target = ('constrained', path)
+            elif par.is_fixed:
+                target = ('constant', path)
+            else:
+                target = ('free', path)
 
         ret[('parameter_node',)+target+key] = par
 
diff --git a/subtrees/gindex/gindex/gnindex.py b/subtrees/gindex/gindex/gnindex.py
index 3a4e95586b5ea7a8b4ccf3284d0e38b342fa87db..adf7e6689946e56f279ca97ae6badad542a09917 100644
--- a/subtrees/gindex/gindex/gnindex.py
+++ b/subtrees/gindex/gindex/gnindex.py
@@ -503,6 +503,10 @@ class GNIndex:
         """Returns the dimension of the index (size of the indices list)"""
         return len(self._indices)
 
+    @property
+    def values(self) -> Tuple[Tuple[str]]:
+        return tuple(n.values for n in self)
+
     def instances(self) -> Tuple[Tuple[GNIndexInstance, ...], ...]:
         """Returns a tuple of the indices instances tuples (2D version)"""
         return tuple(ind.instances() for ind in self._indices)