diff --git a/smash/web/static/js/appointment.js b/smash/web/static/js/appointment.js
index a195413e582bf2a7569a3c57b140e9331164bf1b..af0d7532ccd3515c60f69a6ddd51d3334ec7b959 100644
--- a/smash/web/static/js/appointment.js
+++ b/smash/web/static/js/appointment.js
@@ -1,44 +1,92 @@
-function appointment_type_begaviour(selectObj, outObject,api_call) {
-  var appointment_types_data = null;
-
-  function get_appointment_type_by_id(id) {
-    for (var i=0 ;i <appointment_types_data.length;i++) {
-      if (id == appointment_types_data[i].id) {
-        return appointment_types_data[i];
-      }
+function appointment_type_behaviour(checkboxes, outObject, api_call) {
+    var appointment_types_data = null;
+
+    var global_sequential_time = 0;
+    var global_time = 0;
+    var global_parallel_time = 0;
+
+    function recompute_parallel_time(object) {
+        var result = 0;
+        var object_id = -1;
+        if (object) {
+            object_id = object.attr('id');
+        }
+        $.each(checkboxes, function (index, value) {
+            var checkbox = $(value);
+            var val = parseInt(checkbox.attr('value'));
+            if (checkbox.is(":checked") || checkbox.attr('id') == object_id) {
+                var appointment_type = appointment_types_data[val];
+                if (appointment_type.can_be_parallelized) {
+                    result = Math.max(result, appointment_type.default_duration)
+                }
+            }
+        });
+        return result;
     }
-    return null;
-  }
-  function compute_time(object) {
-    var vals = object.val();
-    var time = 0;
-    var max_paralel_time = 0;
-    for (var i=0;i<vals.length;i++) {
-      var appointment_type = get_appointment_type_by_id(vals[i]);
-      if (appointment_type== null) {
-        console.log("Cannot find appointment type with id: "+vals[i]);
-      } else {
-        if (appointment_type.can_be_parallelized) {
-          max_paralel_time = Math.max(max_paralel_time,appointment_type.default_duration);
-        } else {
-          time +=appointment_type.default_duration;
+
+    function recompute_sequential_time(object) {
+        var result = 0;
+        var object_id = -1;
+        if (object) {
+            object_id = object.attr('id');
         }
-      }
+        $.each(checkboxes, function (index, value) {
+            var checkbox = $(value);
+            var val = parseInt(checkbox.attr('value'));
+            if (checkbox.is(":checked") || checkbox.attr('id') == object_id) {
+                var appointment_type = appointment_types_data[val];
+                if (!appointment_type.can_be_parallelized) {
+                    result += appointment_type.default_duration
+                }
+            }
+        });
+        return result;
     }
-    time = Math.max(time, max_paralel_time)
-    $(outObject).val(time+"");
-  }
-  $(selectObj ).change(function() {
-    var object = $(this)
-    if (appointment_types_data===null) {
-      $.get(api_call, function(data) {
-        appointment_types_data= data.appointment_types;
-        compute_time(object);
-      });
-    } else {
-      compute_time(object);
+
+    function compute_time(object) {
+        var val = parseInt(object.attr('value'));
+        var time = 0;
+        var appointment_type = appointment_types_data[val];
+        if (appointment_type == null) {
+            console.log("Cannot find appointment type with id: " + val);
+        } else {
+            time = appointment_type.default_duration;
+            if (appointment_type.can_be_parallelized) {
+                if (object.is(":checked")) {
+                    global_parallel_time = Math.max(global_parallel_time, time);
+                } else {
+                    global_parallel_time = recompute_parallel_time();
+                }
+            } else {
+                if (object.is(":checked")) {
+                    global_sequential_time += time;
+                } else {
+                    global_sequential_time -= time;
+                }
+            }
+            global_time = Math.max(global_parallel_time, global_sequential_time);
+            $(outObject).val(global_time + "");
+        }
+
     }
 
-  });
+
+    $(checkboxes).change(function () {
+        var object = $(this);
+        if (appointment_types_data === null) {
+            $.get(api_call, function (data) {
+                appointment_types_data = {};
+                $.each(data.appointment_types, function (index, appointment_type) {
+                    appointment_types_data[appointment_type.id] = appointment_type;
+                });
+                global_parallel_time = recompute_parallel_time(object);
+                global_sequential_time = recompute_sequential_time(object);
+                compute_time(object)
+            });
+        } else {
+            compute_time(object);
+        }
+
+    });
 
 }
diff --git a/smash/web/static/js/visit.js b/smash/web/static/js/visit.js
index bbb0d97f7aac59729c40922e6c805b9175cb9a9a..c4eac088fd1fe16a7bad5f2baa307481184bc58b 100644
--- a/smash/web/static/js/visit.js
+++ b/smash/web/static/js/visit.js
@@ -1,4 +1,4 @@
-function visit_dates_begaviour(startDateInput, endDateInput) {
+function visit_dates_behaviour(startDateInput, endDateInput) {
     $(startDateInput).change(function () {
         var object = $(this);
         try {
diff --git a/smash/web/templates/appointments/add.html b/smash/web/templates/appointments/add.html
index 493367200aa38eeb6caf3dcb62d8b2b6b3fac552..63c8d3b182292cad498193ccb36351d0d061c410 100644
--- a/smash/web/templates/appointments/add.html
+++ b/smash/web/templates/appointments/add.html
@@ -152,7 +152,7 @@
 
         });
 
-        appointment_type_begaviour($("[name='appointment_types']"), $("[name='length']"), "{% url 'web.api.appointment_types' %}");
+        appointment_type_behaviour($("input[name='appointment_types']"), $("input[name='length']"), "{% url 'web.api.appointment_types' %}");
     </script>
 
     {% include "includes/datetimepicker.js.html" %}
diff --git a/smash/web/templates/appointments/edit.html b/smash/web/templates/appointments/edit.html
index d3a791917844e91ea074c3a4f978f7a1e2c3fb97..deb2c44b27d29b220327933c6b32e67b3d7d5af9 100644
--- a/smash/web/templates/appointments/edit.html
+++ b/smash/web/templates/appointments/edit.html
@@ -120,7 +120,7 @@
                 "autoWidth": false
             });
         });
-        appointment_type_begaviour($("[name='appointment_types']"), $("[name='length']"), "{% url 'web.api.appointment_types' %}");
+        appointment_type_behaviour($("input[name='appointment-appointment_types']"), $("input[name='appointment-length']"), "{% url 'web.api.appointment_types' %}");
     </script>
 
     {% include "includes/datetimepicker.js.html" %}
diff --git a/smash/web/templates/visits/add.html b/smash/web/templates/visits/add.html
index 18c43f29a65f15905cab75047ac6d159cc7ee6dd..9e03dbec7d16943bfdcbca5cb129b6f1f25d76d4 100644
--- a/smash/web/templates/visits/add.html
+++ b/smash/web/templates/visits/add.html
@@ -76,7 +76,7 @@
 
 <script src="{% static 'js/visit.js' %}"></script>
 <script>
-    visit_dates_begaviour($("[name='datetime_begin']"),$("[name='datetime_end']"));
+    visit_dates_behaviour($("[name='datetime_begin']"),$("[name='datetime_end']"));
 </script>
 
 {% include "includes/datepicker.js.html" %}
diff --git a/smash/web/templates/visits/details.html b/smash/web/templates/visits/details.html
index 7487d213c4f5eab919ece5bb5921a0868fdad4ac..d62679f19ab2cc314668c17c6b892f04cced51b3 100644
--- a/smash/web/templates/visits/details.html
+++ b/smash/web/templates/visits/details.html
@@ -3,11 +3,11 @@
 {% load filters %}
 
 {% block styles %}
-{{ block.super }}
-<!-- DataTables -->
-<link rel="stylesheet" href="{% static 'AdminLTE/plugins/datatables/dataTables.bootstrap.css' %}">
+    {{ block.super }}
+    <!-- DataTables -->
+    <link rel="stylesheet" href="{% static 'AdminLTE/plugins/datatables/dataTables.bootstrap.css' %}">
 
-{% include "includes/datepicker.css.html" %}
+    {% include "includes/datepicker.css.html" %}
 {% endblock styles %}
 
 {% block ui_active_tab %}'visits'{% endblock ui_active_tab %}
@@ -17,189 +17,189 @@
 {% block title %}{{ block.super }} - Details of visit ({{ visit.follow_up_title }}) {% endblock %}
 
 {% block breadcrumb %}
-{% include "subjects/breadcrumb.html" %}
+    {% include "subjects/breadcrumb.html" %}
 {% endblock breadcrumb %}
 
 {% block maincontent %}
 
-{% block content %}
-<div class="box box-info">
-    <div class="box-header with-border">
-        <a href="{% url 'web.views.visits' %}" class="btn btn-block btn-default"
-           onclick="history.back()">Back</a>
-        <a href="{% url 'web.views.subject_visit_details' visit.subject.id %}" type="button"
-           class="btn btn-block btn-default">Subject's visits</a>
-    </div>
+    {% block content %}
+        <div class="box box-info">
+            <div class="box-header with-border">
+                <a href="{% url 'web.views.visits' %}" class="btn btn-block btn-default"
+                   onclick="history.back()">Back</a>
+                <a href="{% url 'web.views.subject_visit_details' visit.subject.id %}" type="button"
+                   class="btn btn-block btn-default">Subject's visits</a>
+            </div>
 
-    <div class="box-header with-border">
-        <h3 class="box-title">Details of visit
+            <div class="box-header with-border">
+                <h3 class="box-title">Details of visit
 
-        </h3>
-    </div>
+                </h3>
+            </div>
 
-    <form method="post" action="" class="form-horizontal">
-        {% csrf_token %}
-        <div class="box-body">
-            {% for field in vform %}
-            <div class="col-md-6 form-group  {% if field.errors %}has-error{% endif %}  {% if field|is_checkbox %}multi-checkboxes{% endif %}">
-                <label for="{# TODO #}" class="col-sm-4 control-label">
-                    {{ field.label }}
-                </label>
-
-                <div class="col-sm-8">
-                    {{ field|add_class:'form-control' }}
-                </div>
-
-                {% if field.errors %}
-                <span class="help-block">
+            <form method="post" action="" class="form-horizontal">
+                {% csrf_token %}
+                <div class="box-body">
+                    {% for field in vform %}
+                        <div class="col-md-6 form-group  {% if field.errors %}has-error{% endif %}  {% if field|is_checkbox %}multi-checkboxes{% endif %}">
+                            <label for="{# TODO #}" class="col-sm-4 control-label">
+                                {{ field.label }}
+                            </label>
+
+                            <div class="col-sm-8">
+                                {{ field|add_class:'form-control' }}
+                            </div>
+
+                            {% if field.errors %}
+                                <span class="help-block">
               {{ field.errors }}
             </span>
-                {% endif %}
-            </div>
-            {% endfor %}
-
-            <div class="col-md-6 form-group">
-                <label class="col-sm-4 control-label">
-                    Visit finished
-                </label>
-                <div class="col-sm-8">
-                    {% if visFinished %}
-                    <div class="btn btn-block">YES</div>
-                    {% else %}
-                    <div class="btn btn-block">
-                        {% if canFinish %}
-                        <a href="{% url 'web.views.visit_mark' vid 'finished' %}"
-                           class="btn btn-warning btn-block">Mark as finished</a>
-                        {% else %}
-                        Waiting for appointments to finish.
-                        {% endif %}
+                            {% endif %}
+                        </div>
+                    {% endfor %}
+
+                    <div class="col-md-6 form-group">
+                        <label class="col-sm-4 control-label">
+                            Visit finished
+                        </label>
+                        <div class="col-sm-8">
+                            {% if visFinished %}
+                                <div class="btn btn-block">YES</div>
+                            {% else %}
+                                <div class="btn btn-block">
+                                    {% if canFinish %}
+                                        <a href="{% url 'web.views.visit_mark' vid 'finished' %}"
+                                           class="btn btn-warning btn-block">Mark as finished</a>
+                                    {% else %}
+                                        Waiting for appointments to finish.
+                                    {% endif %}
+                                </div>
+                            {% endif %}
+                        </div>
+                    </div>
+                </div><!-- /.box-body -->
+                <div class="box-footer">
+                    <div class="col-sm-12">
+                        <button type="submit" class="btn btn-block btn-success">Save</button>
                     </div>
-                    {% endif %}
-                </div>
+                </div><!-- /.box-footer -->
+            </form>
+
+
+            <div class="box-header with-border">
+                <h3 class="box-title">Visit's appointments</h3>
             </div>
-        </div><!-- /.box-body -->
-        <div class="box-footer">
-            <div class="col-sm-12">
-                <button type="submit" class="btn btn-block btn-success">Save</button>
+
+            <div>
+                <a href="{% url 'web.views.appointment_add' vid %}" class="btn btn-app">
+                    <i class="fa fa-plus"></i>
+                    Add new appointment
+                </a>
             </div>
-        </div><!-- /.box-footer -->
-    </form>
 
 
-    <div class="box-header with-border">
-        <h3 class="box-title">Visit's appointments</h3>
-    </div>
+            {% if loApp %}
+                <table id="table" class="table table-bordered table-striped">
+                    <thead>
+                    <tr>
+                        <th>No.</th>
+                        <th>Type</th>
+                        <th>Date</th>
+                        <th>Time</th>
+                        <th>Length [min]</th>
+                        <th>Responsible</th>
+                        <th>Plan/Modify</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    {% for app in loApp %}
+                        <tr>
+                            <td>{{ forloop.counter }}</td>
+                            <td style="background-color:{{ app.color }} !important">
+                                <font COLOR="{{ app.font_color }}">
+                                    {% for type in app.appointment_types.all %}
+                                        {{ type.code }},
+                                    {% endfor %}
+                                </font>
+                            </td>
+                            <td>{{ app.datetime_when | date:"d-M-Y" }}</td>
+                            <td>{{ app.datetime_when | time:"H:i" }}</td>
+                            <td>{{ app.length }}</td>
+                            <td>
+                                {% if app.flying_team %}{{ app.worker_assigned.first_name }}
+                                    {{ app.worker_assigned.last_name }}
+                                {% else %} {{ app.flying_team }}
+                                {% endif %}
+                            </td>
+                            <td>
+                                {% ifequal app.status "SCHEDULED" %}
+                                    <a href="{% url 'web.views.appointment_edit' app.id %}" type="button"
+                                       class="btn btn-block btn-default">Edit</a>
+                                {% else %}
+                                    {{ app.status }}
+                                {% endifequal %}
+                            </td>
+                        </tr>
+                    {% endfor %}
 
-    <div>
-        <a href="{% url 'web.views.appointment_add' vid %}" class="btn btn-app">
-            <i class="fa fa-plus"></i>
-            Add new appointment
-        </a>
-    </div>
+                    </tbody>
+                </table>
+            {% else %}
+                <p>No appointments found.</p>
+            {% endif %}
 
 
-    {% if loApp %}
-    <table id="table" class="table table-bordered table-striped">
-        <thead>
-        <tr>
-            <th>No.</th>
-            <th>Type</th>
-            <th>Date</th>
-            <th>Time</th>
-            <th>Length [min]</th>
-            <th>Responsible</th>
-            <th>Plan/Modify</th>
-        </tr>
-        </thead>
-        <tbody>
-        {% for app in loApp %}
-        <tr>
-            <td>{{ forloop.counter }}</td>
-            <td style="background-color:{{ app.color }} !important">
-                <font COLOR="{{ app.font_color }}">
-                    {% for type in app.appointment_types.all %}
-                    {{ type.code }},
-                    {% endfor %}
-                </font>
-            </td>
-            <td>{{ app.datetime_when | date:"d-M-Y" }}</td>
-            <td>{{ app.datetime_when | time:"H:i" }}</td>
-            <td>{{ app.length }}</td>
-            <td>
-                {% if app.flying_team %}{{ app.worker_assigned.first_name }}
-                {{ app.worker_assigned.last_name }}
-                {% else %} {{ app.flying_team }}
-                {% endif %}
-            </td>
-            <td>
-                {% ifequal app.status "SCHEDULED" %}
-                <a href="{% url 'web.views.appointment_edit' app.id %}" type="button"
-                   class="btn btn-block btn-default">Edit</a>
-                {% else %}
-                {{ app.status }}
-                {% endifequal %}
-            </td>
-        </tr>
-        {% endfor %}
-
-        </tbody>
-    </table>
-    {% else %}
-    <p>No appointments found.</p>
-    {% endif %}
-
-
-    <div class="box-header with-border">
-        <h3 class="box-title">Subject's details</h3>
-    </div>
+            <div class="box-header with-border">
+                <h3 class="box-title">Subject's details</h3>
+            </div>
 
-    <form class="form-horizontal">
-        <div class="box-body">
-            {% for field in sform %}
-            <div class="col-md-6 form-group  {% if field.errors %}has-error{% endif %}">
-                <label for="{# TODO #}" class="col-sm-4 control-label">
-                    {{ field.label }}
-                </label>
+            <form class="form-horizontal">
+                <div class="box-body">
+                    {% for field in sform %}
+                        <div class="col-md-6 form-group  {% if field.errors %}has-error{% endif %}">
+                            <label for="{# TODO #}" class="col-sm-4 control-label">
+                                {{ field.label }}
+                            </label>
 
-                <div class="col-sm-8">
-                    {{ field|disable|add_class:'form-control' }}
-                </div>
+                            <div class="col-sm-8">
+                                {{ field|disable|add_class:'form-control' }}
+                            </div>
 
-                {% if field.errors %}
-                <span class="help-block">
+                            {% if field.errors %}
+                                <span class="help-block">
             {{ field.errors }}
           </span>
-                {% endif %}
-            </div>
-            {% endfor %}
-        </div><!-- /.box-body -->
+                            {% endif %}
+                        </div>
+                    {% endfor %}
+                </div><!-- /.box-body -->
 
-        <div class="box-footer">
-            <td><a href="{% url 'web.views.subject_edit' visit.subject.id %}" type="button"
-                   class="btn btn-block btn-default">Edit subject</a></td>
-            <a href="{% url 'web.views.subjects' %}" class="btn btn-block btn-default" onclick="history.back()">Back</a>
-        </div><!-- /.box-footer -->
-    </form>
-</div>
+                <div class="box-footer">
+                    <td><a href="{% url 'web.views.subject_edit' visit.subject.id %}" type="button"
+                           class="btn btn-block btn-default">Edit subject</a></td>
+                    <a href="{% url 'web.views.subjects' %}" class="btn btn-block btn-default" onclick="history.back()">Back</a>
+                </div><!-- /.box-footer -->
+            </form>
+        </div>
 
-</form>
-{% endblock %}
+        </form>
+    {% endblock %}
 
 
-</div>
+    </div>
 
 {% endblock maincontent %}
 
 {% block scripts %}
-{{ block.super }}
+    {{ block.super }}
 
-<script src="{% static 'AdminLTE/plugins/datatables/jquery.dataTables.min.js' %}"></script>
-<script src="{% static 'AdminLTE/plugins/datatables/dataTables.bootstrap.min.js' %}"></script>
-<script src="{% static 'js/visit.js' %}"></script>
-<script>
-    visit_dates_begaviour($("[name='datetime_begin']"),$("[name='datetime_end']"));
-</script>
+    <script src="{% static 'AdminLTE/plugins/datatables/jquery.dataTables.min.js' %}"></script>
+    <script src="{% static 'AdminLTE/plugins/datatables/dataTables.bootstrap.min.js' %}"></script>
+    <script src="{% static 'js/visit.js' %}"></script>
+    <script>
+        visit_dates_behaviour($("[name='datetime_begin']"), $("[name='datetime_end']"));
+    </script>
 
-{% include "includes/datepicker.js.html" %}
+    {% include "includes/datepicker.js.html" %}
 
 {% endblock scripts %}