Index: ow/models/workout.py
===================================================================
--- ow/models/workout.py	(revision 2a71053706872811a3a2f76bf08ae2dd5d7b4a7e)
+++ ow/models/workout.py	(revision 6edc36713ea2421dce15b738a7277974435b245d)
@@ -138,5 +138,5 @@
         """
         if self.distance:
-            return round(self.distance, 1)
+            return round(self.distance, 2)
         return '-'
 
Index: ow/templates/add_manual_workout.pt
===================================================================
--- ow/templates/add_manual_workout.pt	(revision 2a71053706872811a3a2f76bf08ae2dd5d7b4a7e)
+++ ow/templates/add_manual_workout.pt	(revision 6edc36713ea2421dce15b738a7277974435b245d)
@@ -8,9 +8,9 @@
       tal:attributes="lang request.locale_name">
 
-  <metal:head-title metal:fill-slot="head-title">
+  <metal:head-title metal:fill-slot="head-title" metal:define-slot="head-title">
     <tal:t i18n:translate="">Add workout manually</tal:t>
   </metal:head-title>
 
-  <metal:title metal:fill-slot="title">
+  <metal:title metal:fill-slot="title" metal:define-slot="head-title">
     <tal:t i18n:translate="">Add workout Manually</tal:t>
   </metal:title>
@@ -26,7 +26,13 @@
     <div class="add_workout ow-forms">
       <a href="" class="back"
-             tal:attributes="href request.resource_url(context)"
-             i18n:translate="">Back</a>
-        <h2 i18n:translate="">Add a new workout</h2>
+         tal:attributes="href request.resource_url(context)"
+         i18n:translate="">Back</a>
+
+      <h2>
+        <metal:form-title metal:define-slot="form-title">
+          <tal:t i18n:translate="">Add a new workout</tal:t>
+        </metal:form-title>
+      </h2>
+
         ${form.begin()}
         ${form.csrf_token()}
@@ -43,5 +49,10 @@
               ${form.text('title')}
           </p>
-          <div class="input-container ly-flex ly-2 has-gap">
+          <div class="input-container ly-flex ly-3 has-gap">
+            <div>
+              <label for="distance" i18n:translate="">Distance (Km):</label>
+              ${form.errorlist('distance')}
+              ${form.text('distance', size=4, **{'class': "number"})}
+            </div>
               <div>
                   <label for="start_date" i18n:translate="">Start date (dd/mm/yyyy)</label>
@@ -73,10 +84,4 @@
             </div>
           </div>
-
-          <p>
-              <label for="distance" i18n:translate="">Distance (Km):</label>
-              ${form.errorlist('distance')}
-              ${form.text('distance', size=4, **{'class': "number"})}
-          </p>
           <div>
             <label for="notes" i18n:translate="">Notes:</label>
Index: ow/templates/delete_workout.pt
===================================================================
--- ow/templates/delete_workout.pt	(revision 2a71053706872811a3a2f76bf08ae2dd5d7b4a7e)
+++ ow/templates/delete_workout.pt	(revision 6edc36713ea2421dce15b738a7277974435b245d)
@@ -38,18 +38,10 @@
               </li>
               <li>
-                <tal:t i18n:translate="">End:</tal:t>
-                <tal:c tal:content="context.end_in_timezone(timezone)"></tal:c>
+                <tal:t i18n:translate="">Duration:</tal:t>
+                <tal:c tal:content="context._duration"></tal:c>
               </li>
               <li>
                 <tal:t i18n:translate="">Distance:</tal:t>
-                <tal:c tal:content="context.distance"></tal:c>
-              </li>
-              <li>
-                <tal:t i18n:translate="">Average Heart Rate:</tal:t>
-                <tal:c tal:content="context.hr_avg"></tal:c>
-              </li>
-              <li>
-                <tal:t i18n:translate="">Maximum Heart Rate:</tal:t>
-                <tal:c tal:content="context.hr_max"></tal:c>
+                <tal:c tal:content="context.rounded_distance"></tal:c>
               </li>
             </ul>
Index: ow/templates/edit_manual_workout.pt
===================================================================
--- ow/templates/edit_manual_workout.pt	(revision 2a71053706872811a3a2f76bf08ae2dd5d7b4a7e)
+++ ow/templates/edit_manual_workout.pt	(revision 6edc36713ea2421dce15b738a7277974435b245d)
@@ -23,3 +23,7 @@
   </metal:title>
 
+  <metal:form-title metal:fill-slot="form-title">
+    <tal:t i18n:translate="">Edit workout</tal:t>
+  </metal:form-title>
+
 </html>
Index: ow/templates/update_workout_from_file.pt
===================================================================
--- ow/templates/update_workout_from_file.pt	(revision 2a71053706872811a3a2f76bf08ae2dd5d7b4a7e)
+++ ow/templates/update_workout_from_file.pt	(revision 6edc36713ea2421dce15b738a7277974435b245d)
@@ -27,22 +27,33 @@
       ${form.csrf_token()}
 
+      <h2 tal:content="context.title"></h2>
+
       <div tal:condition="context.has_tracking_file"
            i18n:translate="">
-        <h2>Existing
-        <tal:filetype i18n:name="filetype"
-                      tal:content="context.tracking_filetype"></tal:filetype>
-        tracking file data</h2>
-        <p>
-          <tal:data i18n:name="start"
-                  tal:content="context.start"></tal:data>
-        </p>
-        <p>
-          <tal:data i18n:name="end"
-                  tal:content="context.end"></tal:data>
-        </p>
-        <p>
-          <tal:data i18n:name="distance"
-                  tal:content="context.distance"></tal:data> kms
-        </p>
+
+        <h3>Existing
+          <tal:filetype i18n:name="filetype"
+                        tal:content="context.tracking_filetype"></tal:filetype>
+          tracking file data</h3>
+
+        <ul class="workout-activity-summary" id=""
+            tal:attributes="id 'workout-' + context.workout_id + '-details'"
+            tal:define="timezone request.root[request.authenticated_userid].timezone">
+          <li>
+            <tal:t i18n:translate="">Start:</tal:t>
+            <tal:c tal:content="context.start_in_timezone(timezone)"></tal:c>
+          </li>
+          <li>
+            <tal:t i18n:translate="">Duration:</tal:t>
+            <tal:c tal:content="context._duration"></tal:c>
+          </li>
+          <li>
+            <tal:t i18n:translate="">Distance:</tal:t>
+            <tal:c tal:content="context.rounded_distance"></tal:c>
+          </li>
+        </ul>
+        <div id="" tal:content="context.notes"
+             tal:attributes="id 'workout-' + context.workout_id + '-notes'">
+        </div>
       </div>
 
Index: ow/tests/models/test_workout.py
===================================================================
--- ow/tests/models/test_workout.py	(revision 2a71053706872811a3a2f76bf08ae2dd5d7b4a7e)
+++ ow/tests/models/test_workout.py	(revision 6edc36713ea2421dce15b738a7277974435b245d)
@@ -138,5 +138,5 @@
         workout = Workout()
         workout.distance = 44.44444444
-        assert workout.rounded_distance == 44.4
+        assert workout.rounded_distance == 44.44
 
     def test_has_hr(self):
Index: ow/tests/views/test_user.py
===================================================================
--- ow/tests/views/test_user.py	(revision 2a71053706872811a3a2f76bf08ae2dd5d7b4a7e)
+++ ow/tests/views/test_user.py	(revision 6edc36713ea2421dce15b738a7277974435b245d)
@@ -1,4 +1,5 @@
 import os
 import json
+from decimal import Decimal
 from datetime import datetime, timedelta, timezone
 from shutil import copyfileobj
@@ -269,35 +270,57 @@
         # profile page for the current day (no workouts avalable)
         response = user_views.profile(john, request)
-        assert len(response.keys()) == 3
+        assert len(response.keys()) == 4
         current_month = datetime.now(timezone.utc).strftime('%Y-%m')
         assert response['current_month'] == current_month
         assert response['current_week'] is None
         assert response['workouts'] == []
+        assert response['totals'] == {
+            'distance': Decimal(0),
+            'time': timedelta(0),
+            'elevation': Decimal(0)
+        }
         # profile page for a previous date, that has workouts
         request.GET['year'] = 2015
-        request.GET['month'] = 8
+        request.GET['month'] = 6
         response = user_views.profile(john, request)
-        assert len(response.keys()) == 3
-        assert response['current_month'] == '2015-08'
+        assert len(response.keys()) == 4
+        assert response['current_month'] == '2015-06'
         assert response['current_week'] is None
-        assert response['workouts'] == john.workouts(2015, 8)
+        workouts = john.workouts(2015, 6)
+        assert response['workouts'] == workouts
+        assert response['totals'] == {
+            'distance': workouts[0].distance,
+            'time': workouts[0].duration,
+            'elevation': Decimal(0)
+        }
         # same, passing a week, first on a week without workouts
         request.GET['year'] = 2015
-        request.GET['month'] = 8
+        request.GET['month'] = 6
         request.GET['week'] = 25
         response = user_views.profile(john, request)
-        assert len(response.keys()) == 3
-        assert response['current_month'] == '2015-08'
-        assert response['current_week'] is 25
+        assert len(response.keys()) == 4
+        assert response['current_month'] == '2015-06'
+        assert response['current_week'] == 25
         assert response['workouts'] == []
-        # now in a week with workoutss
+        assert response['totals'] == {
+            'distance': Decimal(0),
+            'time': timedelta(0),
+            'elevation': Decimal(0)
+        }
+        # now in a week with workouts
         request.GET['year'] = 2015
-        request.GET['month'] = 8
+        request.GET['month'] = 6
         request.GET['week'] = 26
         response = user_views.profile(john, request)
-        assert len(response.keys()) == 3
-        assert response['current_month'] == '2015-08'
-        assert response['current_week'] is 26
-        assert response['workouts'] == john.workouts(2015, 8)
+        assert len(response.keys()) == 4
+        assert response['current_month'] == '2015-06'
+        assert response['current_week'] == 26
+        workouts = john.workouts(2015, 6)
+        assert response['workouts'] == workouts
+        assert response['totals'] == {
+            'distance': workouts[0].distance,
+            'time': workouts[0].duration,
+            'elevation': Decimal(0)
+        }
 
     def test_login_get(self, dummy_request):
Index: ow/views/user.py
===================================================================
--- ow/views/user.py	(revision 2a71053706872811a3a2f76bf08ae2dd5d7b4a7e)
+++ ow/views/user.py	(revision 6edc36713ea2421dce15b738a7277974435b245d)
@@ -178,7 +178,10 @@
 
     for workout in workouts:
-        totals['distance'] += getattr(workout, 'distance', Decimal(0))
-        totals['time'] += getattr(workout, 'duration', timedelta(0))
-        totals['elevation'] += getattr(workout, 'uphill', Decimal(0))
+        totals['distance'] += (
+            getattr(workout, 'distance', Decimal(0)) or Decimal(0))
+        totals['time'] += (
+            getattr(workout, 'duration', timedelta(0)) or timedelta(0))
+        totals['elevation'] += (
+            getattr(workout, 'uphill', Decimal(0)) or Decimal(0))
 
     return {
Index: ow/views/workout.py
===================================================================
--- ow/views/workout.py	(revision 2a71053706872811a3a2f76bf08ae2dd5d7b4a7e)
+++ ow/views/workout.py	(revision 6edc36713ea2421dce15b738a7277974435b245d)
@@ -128,4 +128,8 @@
         return HTTPFound(location=request.resource_url(context))
 
+    # round some values before rendering
+    if form.data['distance']:
+        form.data['distance'] = round(form.data['distance'], 2)
+
     return {
         'form': FormRenderer(form)
