diff --git a/tests/scale/sizing.py b/tests/scale/sizing.py
index 649fd2e..baa504e 100644
--- a/tests/scale/sizing.py
+++ b/tests/scale/sizing.py
@@ -49,7 +49,7 @@
     "rwcore"
 ]
 
-def main(address, out_folder, since, namespace="default"):
+def main(address, out_folder, since, namespace="default", ratePeriod = "5m", step = 30):
     """
     Query Prometheus and generate .pdf files for CPU and Memory consumption for each POD
     :param address: string The address of the Prometheus instance to query
@@ -61,15 +61,16 @@
 
     container_mem_query = "sum by(pod) (container_memory_working_set_bytes{namespace='%s',container!='',container!='POD'})" % namespace
 
-    container_cpu_query = "sum by(pod) (rate(container_cpu_usage_seconds_total{namespace='%s',container!='',container!='POD'}[%sm]))" % (namespace, since)
+    container_cpu_query = "sum by(pod) (rate(container_cpu_usage_seconds_total{namespace='%s',container!='',container!='POD'}[%s]))" % (namespace, ratePeriod)
 
     now = time.time()
     cpu_params = {
         "query": container_cpu_query,
         "start": now - time_delta,
         "end": now,
-        "step": "30",
+        "step": step,
     }
+    print("CPU usage query: %s" % cpu_params)
 
     r = requests.get("http://%s/api/v1/query_range" % address, cpu_params)
     print("Downloading CPU info from: %s" % r.url)
@@ -84,8 +85,9 @@
         "query": container_mem_query,
         "start": now - time_delta,
         "end": now,
-        "step": "30",
+        "step": step,
     }
+    print("Memory query: %s" % mem_params)
 
     r = requests.get("http://%s/api/v1/query_range" % address, mem_params)
     print("Downloading Memory info from: %s" % r.url)
@@ -118,7 +120,16 @@
     # - add empty values at the beginning of the other list
     if not containers:
         return
-    dates = [datetime.fromtimestamp(x[0]) for x in containers[0]["values"]]
+
+    container_index_longest_row = 0
+    longest_row = 0
+    for i, c in enumerate(containers):
+        cur_row_len = len(c["values"])
+        if cur_row_len > longest_row:
+            longest_row = cur_row_len
+            container_index_longest_row = i
+
+    dates = [datetime.fromtimestamp(x[0]) for x in containers[container_index_longest_row]["values"]]
     csv_writer.writerow([''] + dates)
 
     for c in containers:
@@ -143,7 +154,7 @@
     plt.xlabel("Timestamp")
     plt.ylabel("CPU cores used")
 
-    for c in containers:
+    for i, c in enumerate(containers):
         name = c["metric"]["pod"]
         data = c["values"]
 
@@ -151,7 +162,7 @@
 
         values = [float(x[1]) for x in data]
 
-        plt.plot(dates, values, label=name, lw=2, color=get_line_color(name))
+        plt.plot(dates, values, label=name, lw=2, color=get_line_color(name, i))
         # plt.plot(dates[1:], get_diff(values), label=name, lw=2, color=get_line_color(name))
 
     plt.legend(loc='upper left', title="CPU Consumption", bbox_to_anchor=(1.05, 1))
@@ -172,7 +183,7 @@
     plt.xlabel("Timestamp")
     plt.ylabel("MB")
 
-    for c in containers:
+    for i, c in enumerate(containers):
         name = c["metric"]["pod"]
         data = c["values"]
 
@@ -180,7 +191,7 @@
         values = [bytesto(float(x[1]), "m") for x in data]
 
         # plt.plot(dates[1:], get_diff(values), label=name, lw=2, color=get_line_color(name))
-        plt.plot(dates[1:], values[1:], label=name, lw=2, color=get_line_color(name))
+        plt.plot(dates[1:], values[1:], label=name, lw=2, color=get_line_color(name, i))
 
     plt.legend(loc='upper left', title="Memory Usage", bbox_to_anchor=(1.05, 1))
 
@@ -203,7 +214,7 @@
     return res
 
 
-def get_line_color(container_name):
+def get_line_color(container_name, i):
     colors = {
         "bbsim0": "#884EA0",
         "bbsim1": "#9B59B6",
@@ -237,6 +248,30 @@
         "voltha-voltha-rw-core": "#7B241C",
     }
 
+    colorsToPickup = [
+        "#f44336",
+        "#4bde31",
+        "#31dea7",
+        "#31a5de",
+        "#313dde",
+        "#ffac2c",
+        "#f16443",
+        "#8cff00",
+        "#990000",
+        "#b8ce85",
+        "#5662f6",
+        "#e42491",
+        "#5b4f5b",
+        "#df1019",
+        "#b9faf8",
+        "#1d903f",
+        "#56c7f2",
+        "#40dfa0",
+        "#5662f6",
+        "#400080",
+        "#b73e34",
+    ]
+
     if container_name in colors:
         return colors[container_name]
     elif "openolt" in container_name:
@@ -254,7 +289,9 @@
     elif "radius" in container_name:
         return colors["radius"]
     else:
-        return "black"
+        colorIdx = i % len(colorsToPickup)
+        pickupColor = colorsToPickup[colorIdx]
+        return pickupColor
 
 
 def get_diff(data):
@@ -356,6 +393,10 @@
                         default=10)
     parser.add_argument("-n", "--namespace", help="Kubernetes namespace for collecting metrics",
                         default="default")
+    parser.add_argument("-r", "--rate", help="Rate period",
+                        default="5m")
+    parser.add_argument("-t", "--step", help="Step in seconds",
+                        default=30)
 
     args = parser.parse_args()
-    main(args.address, args.output, args.since, args.namespace)
+    main(args.address, args.output, args.since, args.namespace, args.rate, args.step)
