diff --git a/scipost_django/finances/forms.py b/scipost_django/finances/forms.py
index 79dc26b36cd08209ef13c254c880e1018341201c..d3d4d947808c2d1b7106d1a040f157511125a2d3 100644
--- a/scipost_django/finances/forms.py
+++ b/scipost_django/finances/forms.py
@@ -211,16 +211,36 @@ class LogsFilterForm(forms.Form):
     employee = UserModelChoiceField(
         queryset=get_user_model().objects.filter(work_logs__isnull=False).distinct(),
         required=False,
-        empty_label="Show all",
+        empty_label="All",
     )
-    start = forms.DateField(required=True, widget=forms.SelectDateWidget())
-    end = forms.DateField(required=True, widget=forms.SelectDateWidget())
+    start = forms.DateField(
+        required=True, widget=forms.TextInput(attrs={"type": "date"})
+    )
+    end = forms.DateField(required=True, widget=forms.TextInput(attrs={"type": "date"}))
+    hourly_rate = forms.FloatField(min_value=0, initial=WorkLog.HOURLY_RATE)
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         today = timezone.now().date()
-        self.initial["start"] = today.today()
-        self.initial["end"] = today.today()
+
+        if not any(self.fields[field].initial for field in ["start", "end"]):
+            current_month = datetime.date.today().replace(day=1)
+            last_month_end = current_month - datetime.timedelta(days=1)
+            last_month_start = last_month_end.replace(day=1)
+            self.fields["start"].initial = last_month_start
+            self.fields["end"].initial = last_month_end
+
+        self.helper = FormHelper()
+        self.helper.layout = Layout(
+            Div(
+                Div(FloatingField("employee"), css_class="col-9 col-md"),
+                Div(FloatingField("hourly_rate"), css_class="col-3 col-md-2"),
+                Div(FloatingField("start"), css_class="col-6 col-md-auto col-lg-2"),
+                Div(FloatingField("end"), css_class="col-6 col-md-auto col-lg-2"),
+                css_class="row mb-0 mt-2",
+            ),
+            Submit("submit", "Filter"),
+        )
 
     def clean(self):
         if self.is_valid():
@@ -249,6 +269,7 @@ class LogsFilterForm(forms.Form):
                 )
             else:
                 user_qs = get_user_model().objects.filter(work_logs__isnull=False)
+
             user_qs = user_qs.filter(
                 work_logs__work_date__gte=self.cleaned_data["start"],
                 work_logs__work_date__lte=self.cleaned_data["end"],
@@ -280,24 +301,49 @@ class LogsFilterForm(forms.Form):
                 )
             else:
                 user_qs = get_user_model().objects.filter(work_logs__isnull=False)
+
             user_qs = user_qs.filter(
                 work_logs__work_date__gte=self.cleaned_data["start"],
                 work_logs__work_date__lte=self.cleaned_data["end"],
             ).distinct()
 
+            work_log_qs = WorkLog.objects.filter(
+                work_date__gte=self.cleaned_data["start"],
+                work_date__lte=self.cleaned_data["end"],
+                user__in=user_qs,
+            )
+
             output = []
             for user in user_qs:
                 # If logs exists for given filters
+                total_time_per_month = [
+                    work_log_qs.filter(
+                        work_date__year=dt.year, work_date__month=dt.month, user=user
+                    ).aggregate(Sum("duration"))["duration__sum"]
+                    for dt in self.get_months()
+                ]
+
+                if self.cleaned_data["hourly_rate"]:
+                    salary_per_month = [
+                        duration.total_seconds()
+                        / 3600  # Convert to hours
+                        * self.cleaned_data["hourly_rate"]
+                        if duration is not None
+                        else 0
+                        for duration in total_time_per_month
+                    ]
+                else:
+                    salary_per_month = []
+
                 output.append(
                     {
-                        "logs": [],
+                        "monthly_data": zip(
+                            self.get_months(),
+                            total_time_per_month,
+                            salary_per_month,
+                        ),
                         "user": user,
                     }
                 )
-                for dt in self.get_months():
-                    output[-1]["logs"].append(
-                        user.work_logs.filter(
-                            work_date__year=dt.year, work_date__month=dt.month
-                        ).aggregate(total=Sum("duration"))["total"]
-                    )
+
         return output
diff --git a/scipost_django/finances/models.py b/scipost_django/finances/models.py
index 2ff8e6555c0579296bacb6606e18d73d143bc9ab..eaf998f05487e4bfc191217bd871e0459650c8b0 100644
--- a/scipost_django/finances/models.py
+++ b/scipost_django/finances/models.py
@@ -286,6 +286,8 @@ class SubsidyAttachment(models.Model):
 
 
 class WorkLog(models.Model):
+    HOURLY_RATE = 22.0
+    
     user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
     comments = models.TextField(blank=True)
     log_type = models.CharField(max_length=128, blank=True)
diff --git a/scipost_django/finances/templates/finances/timesheets.html b/scipost_django/finances/templates/finances/timesheets.html
index 52f309340e5b9c814de3bda85867cccc2a31ea00..499ad4fc2d6b2120842b5c5330faa3ead566834a 100644
--- a/scipost_django/finances/templates/finances/timesheets.html
+++ b/scipost_django/finances/templates/finances/timesheets.html
@@ -5,9 +5,11 @@
   <span class="breadcrumb-item">Team timesheets</span>
 {% endblock %}
 
-{% block pagetitle %}: Team timesheets{% endblock pagetitle %}
+{% block pagetitle %}
+  : Team timesheets
+{% endblock pagetitle %}
 
-{% load bootstrap %}
+{% load crispy_forms_tags %}
 {% load scipost_extras %}
 
 {% block content %}
@@ -20,20 +22,7 @@
       <br>
 
       <form method="get">
-        {{ form.employee|bootstrap }}
-
-        <label>Date from</label>
-        <div class="form-row">
-          {{ form.start }}
-        </div>
-
-        <label>Date until</label>
-        <div class="form-row">
-          {{ form.end }}
-        </div>
-        <br>
-
-        <input type="submit" class="btn btn-primary" value="Filter">
+        {% crispy form %}
       </form>
     </div>
   </div>
@@ -43,25 +32,26 @@
       {% if form.is_bound and form.is_valid %}
         <h2 class="mb-2 mt-4">Team timesheets</h2>
         <h4 class="mb-1">{{ user_log.user.first_name }} {{ user_log.user.last_name }}</h4>
-        <table class="table table-hover">
+        <table class="table table-hover text-nowrap">
           <thead class="table-light">
             <tr>
               <th>Employee</th>
-              {% for month in form.get_months %}
-                <th>{{ month|date:'N Y' }}</th>
-              {% endfor %}
+              {% for month in form.get_months %}<th colspan="2" scope="colgroup">{{ month|date:'N Y' }}</th>{% endfor %}
             </tr>
           </thead>
           <tbody>
-            {% for user_log in form.filter_per_month %}
+            {% for user_data in form.filter_per_month %}
               <tr>
-                <td>{{ user_log.user.last_name }}, {{ user_log.user.first_name }}</td>
-                {% for log in user_log.logs %}
-                  <td>{{ log|duration }}</td>
+                <td>{{ user_data.user.contributor }}</td>
+                {% for _, total_time, monthly_salary in user_data.monthly_data %}
+                  <td>{{ total_time|duration }}</td>
+                  <td>€{{ monthly_salary|floatformat:0 }}</td>
                 {% endfor %}
               </tr>
             {% empty %}
-              <tr><td colspan="5">No logs found.</td></tr>
+              <tr>
+                <td colspan="5">No logs found.</td>
+              </tr>
             {% endfor %}
           </tbody>
         </table>
diff --git a/scipost_django/finances/templates/finances/timesheets_detailed.html b/scipost_django/finances/templates/finances/timesheets_detailed.html
index a8454253642f732cd49b7224c6923b2b99471172..f3679b70645d683f57e3378ad5dc3eb257bafc47 100644
--- a/scipost_django/finances/templates/finances/timesheets_detailed.html
+++ b/scipost_django/finances/templates/finances/timesheets_detailed.html
@@ -6,9 +6,11 @@
   <span class="breadcrumb-item">Detailed timesheets</span>
 {% endblock %}
 
-{% block pagetitle %}: Team timesheets{% endblock pagetitle %}
+{% block pagetitle %}
+  : Team timesheets
+{% endblock pagetitle %}
 
-{% load bootstrap %}
+{% load crispy_forms_tags %}
 {% load scipost_extras %}
 
 {% block content %}
@@ -19,20 +21,7 @@
       <br>
 
       <form method="get">
-        {{form.employee|bootstrap }}
-
-        <label>Date from</label>
-        <div class="form-row">
-          {{ form.start }}
-        </div>
-
-        <label>Date until</label>
-        <div class="form-row">
-          {{ form.end }}
-        </div>
-        <br>
-
-        <input type="submit" class="btn btn-primary" value="Filter">
+        {% crispy form %}
       </form>
     </div>
   </div>
@@ -65,7 +54,9 @@
               {% endfor %}
               <tr>
                 <td colspan="4" class="text-end">Total:</td>
-                <td><strong>{{ user_log.duration.total|duration }}</strong></td>
+                <td>
+                  <strong>{{ user_log.duration.total|duration }}</strong>
+                </td>
               </tr>
             </tbody>
           </table>