diff --git a/biscuit/apps/untis/sub.py b/biscuit/apps/untis/sub.py
index 723f79ae2171048e996ee978890071b9d432328a..b12192dc70a69b264497f5f7ec442209e5c0f083 100644
--- a/biscuit/apps/untis/sub.py
+++ b/biscuit/apps/untis/sub.py
@@ -207,6 +207,31 @@ def generate_room_row(sub, full=False):
     return room
 
 
+def format_classes(classes):
+    """
+    Formats a list of Class objects to a combined string
+
+    example return: "9abcd" for classes 9a, 9b, 9c and 9d
+
+    :param classes: Class list
+    :return: combined string
+    """
+    classes_as_dict = {}
+
+    for _class in classes:
+        step = _class.name[:-1]
+        part = _class.name[-1:]
+        if step not in classes_as_dict.keys():
+            classes_as_dict[step] = [part]
+        else:
+            classes_as_dict[step].append(part)
+
+    out = ""
+    for key, value in classes_as_dict.items():
+        out += key + "".join(value)
+    return out
+
+
 def generate_sub_table(subs):
     sub_rows = []
     for sub in subs:
@@ -225,8 +250,9 @@ def generate_sub_table(subs):
         else:
             sub_row.lesson = "{}.".format(sub.lesson)
 
-        for class_ in sub.classes:
-            sub_row.classes += class_.name
+        # for class_ in sub.classes:
+        #     sub_row.classes += class_.name
+        sub_row.classes = format_classes(sub.classes)
 
         sub_row.teacher = generate_teacher_row(sub)
         sub_row.teacher_full = generate_teacher_row(sub, full=True)