diff --git a/libs/ardour/automation_event.cc b/libs/ardour/automation_event.cc
index dd2930a..d25b6bc 100644
--- a/libs/ardour/automation_event.cc
+++ b/libs/ardour/automation_event.cc
@@ -329,13 +329,19 @@ AutomationList::rt_add (double when, double value)
 
         if (lm.locked()) {
                 assert (!nascent.empty());
-                if (!nascent.back()->events.empty()) {
-                        assert (when > nascent.back()->events.back()->when);
-                }
+		/* we don't worry about adding events out of time order as we will
+		   sort them in merge_nascent.
+		*/
                 nascent.back()->events.push_back (point_factory (when, value));
         }
 }
 
+struct ControlEventTimeComparator {
+	bool operator() (ControlEvent* a, ControlEvent* b) {
+		return a->when < b->when;
+	}
+};
+
 void
 AutomationList::merge_nascent (double when)
 {
@@ -358,6 +364,8 @@ AutomationList::merge_nascent (double when)
                                 continue;
                         }
                         
+			nascent_events.sort (ControlEventTimeComparator ());
+			
                         if (ninfo->start_time < 0.0) {
                                 ninfo->start_time = nascent_events.front()->when;
                         }
