diff --git a/src/osmo_gsm_tester/config.py b/src/osmo_gsm_tester/config.py
index f6e81ac..a0fe969 100644
--- a/src/osmo_gsm_tester/config.py
+++ b/src/osmo_gsm_tester/config.py
@@ -52,6 +52,7 @@
 
 import yaml
 import os
+import copy
 
 from . import log, schema, util
 from .util import is_dict, is_list, Dir, get_tempdir
@@ -271,4 +272,18 @@
             dest[i] = overlay(dest[i], src[i])
         return dest
     return src
+
+def replicate_times(d):
+    'replicate items that have a "times" > 1'
+    d = copy.deepcopy(d)
+    for key, item_list in d.items():
+        more_items = []
+        for item in item_list:
+            times = int(item.pop('times'))
+            if times and times > 1:
+                for i in range(times - 1):
+                    more_items.append(copy.deepcopy(item))
+        item_list.extend(more_items)
+    return d
+
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/resource.py b/src/osmo_gsm_tester/resource.py
index d8efe2f..8f34bdb 100644
--- a/src/osmo_gsm_tester/resource.py
+++ b/src/osmo_gsm_tester/resource.py
@@ -134,16 +134,7 @@
         '''
         schema.validate(want, WANT_SCHEMA)
 
-        # replicate items that have a 'times' > 1
-        want = copy.deepcopy(want)
-        for key, item_list in want.items():
-            more_items = []
-            for item in item_list:
-                times = int(item.pop('times'))
-                if times and times > 1:
-                    for i in range(times - 1):
-                        more_items.append(copy.deepcopy(item))
-            item_list.extend(more_items)
+        want = config.replicate_times(want)
 
         origin_id = origin.origin_id()
 
