diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index d2e66d5..70dafed 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))
@@ -1341,22 +1342,43 @@ class TrimStartContext(EditingContext):
         self._restoreValues(self.adjacent_originals)
 
     def _rippleTo(self, position, priority):
-        earliest = self.focus.start - self.focus.in_point
-        latest = earliest + self.focus.factory.duration
+        orig_start, orig_dur, orig_in = \
+            self.default_originals[self.focus_timeline_object][0:3]
+
+        earliest = orig_start - orig_in
+        latest = orig_start + self.focus.factory.duration
 
         if self.snap:
             position = self.timeline.snapToEdge(position)
 
+        #print "latest: %.2f,\tposition: %.2f,\tearliest: %.2f" % \
+	#    (latest/100000000.0, position/100000000.0, earliest/100000000.0)
         position = min(latest, max(position, earliest))
-        self.focus.trimStart(position)
-        r_position = max(position, self.ripple_min)
+        offset = self.focus.start - position
+        #print "             \tposition: %.2f,                  offset: %.2f" % \
+	#    (position/100000000.0, offset/100000000.0)
+
+        if False and orig_duration + offset < 0:
+            # Never go under zero duration
+            self.focus.setDuration(0)
+        else:
+            self.focus.setDuration(orig_dur + offset)
+            self.focus.setInPoint(orig_in - offset)
+            #print "set dur: %d, set in: %d"
+	    #    % (orig_dur + offset, orig_in - 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
 
     def _finishRipple(self):
+        print "rip  1: dur: %.2f, start: %.2f, in_point: %.2f, ut: %.2f" % \
+	    (self.focus.duration/100000000.0, self.focus.start/100000000.0, self.focus.in_point/100000000.0, self.focus.start+self.focus.in_point+self.focus.duration/100000000.0)
         self._restoreValues(self.ripple_originals)
+        self._restoreValues(self.default_originals)
+        print "rip  2: dur: %.2f, start: %.2f, in_point: %.2f, ut: %.2f" % \
+	    (self.focus.duration/100000000.0, self.focus.start/100000000.0, self.focus.in_point/100000000.0, self.focus.start+self.focus.in_point+self.focus.duration/100000000.0)
 
     def _defaultTo(self, position, priority):
         earliest = max(0, self.focus.start - self.focus.in_point)
@@ -1364,6 +1386,14 @@ class TrimStartContext(EditingContext):
 
         return position, priority
 
+    def _finishDefault(self):
+        print "def  2: dur: %.2f, start: %.2f, in_point: %.2f, ut: %.2f" % \
+	    (self.focus.duration/100000000.0, self.focus.start/100000000.0, self.focus.in_point/100000000.0, self.focus.start+self.focus.in_point+self.focus.duration/100000000.0)
+        self._restoreValues(self.default_originals)
+        print "def  2: dur: %.2f, start: %.2f, in_point: %.2f, ut: %.2f" % \
+	    (self.focus.duration/100000000.0, self.focus.start/100000000.0, self.focus.in_point/100000000.0, self.focus.start+self.focus.in_point+self.focus.duration/100000000.0)
+
+
     def finish(self):
         initial_position = self.default_originals[self.focus_timeline_object][0]
 
