diff --git a/templates/timetable.html b/templates/timetable.html
index c7ba24d7f644458e5e8fbd75ce2478a2c04009ae..f0dfa4d9f11142df8bb12fd797581fa659c9ca4d 100644
--- a/templates/timetable.html
+++ b/templates/timetable.html
@@ -15,36 +15,51 @@
 		<div class="panel-body row table-responsive" style="margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px">
 			<table id="timetable" class="table table-bordered col-xs-12" style="width: auto; min-width: 100%;">
 				<tr><th style="width: 30px;"></th>{% for d in days if (d.index < 5) or (d.lectures|length) > 0 %}<th style="min-width: 10em;" colspan="{{d.maxcol}}">{{ d.date.strftime("%A (%d.%m.%Y)") }}</th>{% endfor %}</tr>
+				{# iterating over each 15 min block #}
 				{% for t in times %}
-				{% set time_loop = loop %}
-				<tr height="12px" {% if t.strftime("%M") == "00" %} class="hourlytime" {% endif %}>
-					{% if ((loop.index - 1) is divisibleby 4)  %} <td rowspan="4" style="vertical-align: top;">{{ t.strftime("%H:%M") }}</td> {% endif %}
-					{% for d in days  if (d.index < 5) or (d.lectures|length) > 0 %}
-						{% for i in range(1,d.maxcol+1) %}
-						{% for l in d.lectures|selectattr('timetable_col','equalto',i) if (((l.time.time() > t) and (l.time.time() < times[time_loop.index+1])) != (l.time.time() == t ) ) %}
-						<td {% if i == 1 %} class="newday"{% endif %} rowspan="{{l.duration / 15}}" style="background: {% if l.visible and l.course.visible %}lightgrey;{% else %}#f2dede{% endif %}">
-							<p class="small">
-								<strong>
-									<a class="hidden-print" href="{{url_for('course', id=l.course_id)}}#lecture-{{l.id}}">
-										{{l.course.short}}
-									</a>
-									<span class="visible-print-inline">{{l.course.short}}</span>
-								</strong>
-								<br>
-								{{l.time.strftime("%H:%M")}} - {{l.time_end.strftime("%H:%M")}}<br>
-								{{l.place}}
-							</p>
-						</td>
-							{% else %}
-								{% for l in d.lectures|selectattr('timetable_col','equalto',i) if (l.time.time() < t) and (l.time_end.time() > t) %}
+					{% set time_loop = loop %}
+					<tr height="12px" {% if t.strftime("%M") == "00" %} class="hourlytime" {% endif %}>
+						{# display time in first row if its a full hour #}
+						{% if ((loop.index - 1) is divisibleby 4)  %} <td rowspan="4" style="vertical-align: top;">{{ t.strftime("%H:%M") }}</td> {% endif %}
+						{# iterate over days if if it is a working day or we have lectures on that day (optionaly skip weekends) #}
+						{% for d in days  if (d.index < 5) or (d.lectures|length) > 0 %}
+							{% for col in range(1,d.maxcol+1) %}
+
+								{# iterate over all lextures but only consider those that are in the current column and happen in the 15 min block #}
+								{% for l in d.lectures|selectattr('timetable_col','equalto',col) if (((l.time.time() > t) and (l.time.time() < times[time_loop.index+1])) != (l.time.time() == t ) ) %}
+									{# handle the first column of a day specialy, set red background if hidden #}
+									<td {% if col == 1 %} class="newday"{% endif %} rowspan="{{ (l.duration / 15)|round(method="ceil") }}" style="background: {% if l.visible and l.course.visible %}lightgrey;{% else %}#f2dede{% endif %}">
+										{# print the lecture block #}
+										<p class="small">
+											<strong>
+												<a class="hidden-print" href="{{url_for('course', id=l.course_id)}}#lecture-{{l.id}}">
+													{{l.course.short}}
+												</a>
+												<span class="visible-print-inline">{{l.course.short}}</span>
+											</strong>
+											<br>
+											{{l.time.strftime("%H:%M")}} - {{l.time_end.strftime("%H:%M")}}<br>
+											{{l.place}}
+										</p>
+									</td>
 								{% else %}
-								<td {% if i == 1 %} class="newday"{% endif %}></td>
+									{# if the lecture is in the current collumn but not the current time slot #}
+									{% for l in d.lectures|selectattr('timetable_col','equalto',col) if (l.time.time() < t) and (l.time_end.time() > t) %}
+										{# this part is covered by another lecture using rowspan #}
+									{% else %}
+										{# no lecture right now, jsut end column #}
+										<td {% if col == 1 %} class="newday"{% endif %}></td>
+									{% endfor %}
 								{% endfor %}
+								{# end lecture #}
+
 							{% endfor %}
+							{# end day column #}
 						{% endfor %}
-					{% endfor %}
-				</tr>
+						{# end day #}
+					</tr>
 				{% endfor %}
+				{# end 15 min block #}
 			</table>
 		</div>
 	</div>