diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c
index 68b1558..a05e870 100644
--- a/src/gcal-edit-dialog.c
+++ b/src/gcal-edit-dialog.c
@@ -370,7 +370,7 @@ sync_datetimes (GcalEditDialog *self,
                 GParamSpec     *pspec,
                 GtkWidget      *widget)
 {
-  GDateTime *start, *end, *new_date;
+  GDateTime *start, *end, *start_local, *end_local, *new_date;
   GtkWidget *date_widget, *time_widget;
   gboolean is_start;
   gint hour_to_add;
@@ -389,19 +389,22 @@ sync_datetimes (GcalEditDialog *self,
    * If the user is changing the start date or time, we change the end
    * date or time (and vice versa).
    */
+  start_local = g_date_time_to_local(start);
+  end_local = g_date_time_to_local(end);
+
   hour_to_add = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->all_day_check)) ? 0 : 1;
 
   if (is_start)
     {
-      new_date = g_date_time_add_hours (start, hour_to_add);
+      new_date = g_date_time_add_hours (start_local, hour_to_add);
 
       date_widget = self->end_date_selector;
       time_widget = self->end_time_selector;
     }
   else
     {
-      new_date = g_date_time_add_hours (end, hour_to_add);
-
+      new_date = g_date_time_add_hours (end_local, -(hour_to_add));
+  
       date_widget = self->start_date_selector;
       time_widget = self->start_time_selector;
     }
@@ -420,6 +423,8 @@ sync_datetimes (GcalEditDialog *self,
 out:
   g_clear_pointer (&start, g_date_time_unref);
   g_clear_pointer (&end, g_date_time_unref);
+  g_clear_pointer (&start_local, g_date_time_unref);
+  g_clear_pointer (&end_local, g_date_time_unref);
 
   GCAL_EXIT;
 }
