diff --git a/edgetpuvision/classify.py b/edgetpuvision/classify.py
index 11f6d29..51119ad 100644
--- a/edgetpuvision/classify.py
+++ b/edgetpuvision/classify.py
@@ -14,8 +14,8 @@
 from edgetpu.classification.engine import ClassificationEngine
 
 from . import svg
+from . import utils
 from .apps import run_app
-from .utils import load_labels, input_image_size, same_input_image_sizes, avg_fps_counter
 
 
 CSS_STYLES = str(svg.CssStyle({'.back': svg.Style(fill='black',
@@ -94,17 +94,17 @@
     acc = accumulator(size=args.window, top_k=args.top_k)
     acc.send(None)  # Initialize.
 
-    fps_counter=avg_fps_counter(30)
+    fps_counter = utils.avg_fps_counter(30)
 
-    engines = [ClassificationEngine(m) for m in args.model.split(',')]
-    assert same_input_image_sizes(engines)
+    engines, titles = utils.make_engines(args.model, ClassificationEngine)
+    assert utils.same_input_image_sizes(engines)
     engines = itertools.cycle(engines)
     engine = next(engines)
 
-    labels = load_labels(args.labels)
+    labels = utils.load_labels(args.labels)
     draw_overlay = True
 
-    yield input_image_size(engine)
+    yield utils.input_image_size(engine)
 
     output = None
     while True:
@@ -121,7 +121,8 @@
             if args.print:
                 print_results(inference_rate, results)
 
-            output = overlay(None, results, inference_time, inference_rate, layout)
+            title = titles[engine]
+            output = overlay(title, results, inference_time, inference_rate, layout)
         else:
             output = None
 
diff --git a/edgetpuvision/detect.py b/edgetpuvision/detect.py
index c688729..b50f795 100644
--- a/edgetpuvision/detect.py
+++ b/edgetpuvision/detect.py
@@ -20,8 +20,8 @@
 from edgetpu.detection.engine import DetectionEngine
 
 from . import svg
+from . import utils
 from .apps import run_app
-from .utils import load_labels, input_image_size, same_input_image_sizes, avg_fps_counter
 
 CSS_STYLES = str(svg.CssStyle({'.back': svg.Style(fill='black',
                                                   stroke='black',
@@ -127,20 +127,20 @@
         print('    %d: %s, area=%.2f' % (i, obj, obj.bbox.area()))
 
 def render_gen(args):
-    fps_counter=avg_fps_counter(30)
+    fps_counter  = utils.avg_fps_counter(30)
 
-    engines = [DetectionEngine(m) for m in args.model.split(',')]
-    assert same_input_image_sizes(engines)
+    engines, titles = utils.make_engines(args.model, DetectionEngine)
+    assert utils.same_input_image_sizes(engines)
     engines = itertools.cycle(engines)
     engine = next(engines)
 
-    labels = load_labels(args.labels) if args.labels else None
+    labels = utils.load_labels(args.labels) if args.labels else None
     filtered_labels = set(l.strip() for l in args.filter.split(',')) if args.filter else None
     get_color = make_get_color(args.color, labels)
 
     draw_overlay = True
 
-    yield input_image_size(engine)
+    yield utils.input_image_size(engine)
 
     output = None
     while True:
@@ -149,7 +149,7 @@
         inference_rate = next(fps_counter)
         if draw_overlay:
             start = time.monotonic()
-            objs = engine.DetectWithInputTensor(tensor, threshold=args.threshold, top_k=args.top_k)
+            objs = engine .DetectWithInputTensor(tensor, threshold=args.threshold, top_k=args.top_k)
             inference_time = time.monotonic() - start
             objs = [convert(obj, labels) for obj in objs]
 
@@ -161,7 +161,8 @@
             if args.print:
                 print_results(inference_rate, objs)
 
-            output = overlay(None, objs, get_color, inference_time, inference_rate, layout)
+            title = titles[engine]
+            output = overlay(title, objs, get_color, inference_time, inference_rate, layout)
         else:
             output = None
 
diff --git a/edgetpuvision/utils.py b/edgetpuvision/utils.py
index 8de053e..c0e2e49 100644
--- a/edgetpuvision/utils.py
+++ b/edgetpuvision/utils.py
@@ -1,4 +1,5 @@
 import collections
+import os
 import re
 import time
 
@@ -27,3 +28,15 @@
         window.append(curr - prev)
         prev = curr
         yield len(window) / sum(window)
+
+def make_engines(models, engine_class):
+    engines, titles = [], {}
+    for model in models.split(','):
+        if '@' in model:
+            model_path, title = model.split('@')
+        else:
+            model_path, title = model, os.path.basename(os.path.normpath(model))
+        engine = engine_class(model_path)
+        engines.append(engine)
+        titles[engine] = title
+    return engines, titles
