diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index 107125c..37a8da9 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -1319,10 +1319,11 @@ class TrimStartContext(EditingContext):
         self.focus_timeline_object = focus_timeline_object
         self.default_originals = self._saveValues([focus_timeline_object])
 
-        ripple = self.timeline.getObjsBeforeTime(focus.start)
-        assert not focus.timeline_object in ripple or focus.duration == 0
+        reference = focus.start + focus.duration
+        ripple = self.timeline.getObjsAfterTime(reference)
+
         self.ripple_originals = self._saveValues(ripple)
-        self.ripple_offsets = self._getOffsets(focus.start, focus.priority,
+        self.ripple_offsets = self._getOffsets(reference, focus.priority,
             ripple)
         if ripple:
             self.ripple_min = focus.start - min((obj.start for obj in ripple))
@@ -1348,10 +1349,17 @@ class TrimStartContext(EditingContext):
             position = self.timeline.snapToEdge(position)
 
         position = min(latest, max(position, earliest))
-        self.focus.trimStart(position)
-        r_position = max(position, self.ripple_min)
+        offset = self.focus.start - position
+        original_duration = self.default_originals.values()[0][1]
+
+        if original_duration + offset < 0:
+            # Never go under zero duration
+            self.focus.setDuration(0)
+        else:
+            self.focus.setDuration(original_duration + offset)
+
         for obj, (s_offset, p_offset) in self.ripple_offsets.iteritems():
-            obj.setStart(r_position + s_offset)
+            obj.setStart(self.focus.start + self.focus.duration + s_offset)
 
         return position, priority
 
