diff --git a/arbor/backends/multicore/multi_event_stream.hpp b/arbor/backends/multicore/multi_event_stream.hpp
index aa0bea06b1095c38bb937e9b1d0b3a3feb60fb54..ae189364200433be039f6b11d8652808ece85014 100644
--- a/arbor/backends/multicore/multi_event_stream.hpp
+++ b/arbor/backends/multicore/multi_event_stream.hpp
@@ -62,9 +62,8 @@ public:
             throw arbor_internal_error("multicore/multi_event_stream: too many events for size type");
         }
 
-        // Sort by index (staged events should already be time-sorted).
-        arb_assert(util::is_sorted_by(staged, [](const Event& ev) { return event_time(ev); }));
-        util::stable_sort_by(staged, [](const Event& ev) { return event_index(ev); });
+        // Staged events should already be sorted by index.
+        arb_assert(util::is_sorted_by(staged, [](const Event& ev) { return event_index(ev); }));
 
         std::size_t n_ev = staged.size();
         util::assign_by(ev_data_, staged, [](const Event& ev) { return event_data(ev); });
diff --git a/test/unit/test_multi_event_stream.cpp b/test/unit/test_multi_event_stream.cpp
index d471a7ba1723275cce7333e84348637cc760bec1..22e68efad33c956116269bc2fbd0272cb94591e3 100644
--- a/test/unit/test_multi_event_stream.cpp
+++ b/test/unit/test_multi_event_stream.cpp
@@ -29,9 +29,9 @@ namespace {
     // cell_3 (handle 3) has one event at t=3
 
     std::vector<deliverable_event> common_events = {
-        deliverable_event(2.f, handle[1], 2.f),
         deliverable_event(3.f, handle[0], 1.f),
         deliverable_event(3.f, handle[3], 4.f),
+        deliverable_event(2.f, handle[1], 2.f),
         deliverable_event(5.f, handle[2], 3.f)
     };
 }
@@ -51,7 +51,7 @@ TEST(multi_event_stream, init) {
     EXPECT_EQ(n_cell, m.n_streams());
 
     auto events = common_events;
-    ASSERT_TRUE(util::is_sorted_by(events, [](deliverable_event e) { return event_time(e); }));
+    ASSERT_TRUE(util::is_sorted_by(events, [](deliverable_event e) { return event_index(e); }));
     m.init(events);
     EXPECT_FALSE(m.empty());
 
@@ -66,7 +66,7 @@ TEST(multi_event_stream, mark) {
     ASSERT_EQ(n_cell, m.n_streams());
 
     auto events = common_events;
-    ASSERT_TRUE(util::is_sorted_by(events, [](deliverable_event e) { return event_time(e); }));
+    ASSERT_TRUE(util::is_sorted_by(events, [](deliverable_event e) { return event_index(e); }));
     m.init(events);
 
     for (cell_size_type i = 0; i<n_cell; ++i) {
@@ -176,7 +176,7 @@ TEST(multi_event_stream, time_if_before) {
     ASSERT_EQ(n_cell, m.n_streams());
 
     auto events = common_events;
-    ASSERT_TRUE(util::is_sorted_by(events, [](deliverable_event e) { return event_time(e); }));
+    ASSERT_TRUE(util::is_sorted_by(events, [](deliverable_event e) { return event_index(e); }));
     m.init(events);
 
     // Test times less than all event times (first event at t=2).