diff --git a/src/stories/bin/discovermgr/src/main.rs b/src/stories/bin/discovermgr/src/main.rs
index af504c3..feb1122 100644
--- a/src/stories/bin/discovermgr/src/main.rs
+++ b/src/stories/bin/discovermgr/src/main.rs
@@ -131,18 +131,16 @@
     )));
 
     let mut suggestions_manager = SuggestionsManager::new(mod_manager.clone());
+    suggestions_manager.register_suggestions_provider(Box::new(
+        ContextualSuggestionsProvider::new(actions_arc.clone()),
+    ));
+    suggestions_manager
+        .register_suggestions_provider(Box::new(ActionSuggestionsProvider::new(actions_arc)));
     suggestions_manager.register_suggestions_provider(Box::new(StorySuggestionsProvider::new(
         story_manager.clone(),
     )));
     suggestions_manager.register_suggestions_provider(Box::new(PackageSuggestionsProvider::new()));
 
-    suggestions_manager.register_suggestions_provider(Box::new(
-        ContextualSuggestionsProvider::new(actions_arc.clone()),
-    ));
-
-    suggestions_manager
-        .register_suggestions_provider(Box::new(ActionSuggestionsProvider::new(actions_arc)));
-
     let suggestions_manager_ref = Arc::new(Mutex::new(suggestions_manager));
 
     let mut fs = ServiceFs::new_local();
diff --git a/src/stories/bin/discovermgr/src/suggestions_manager.rs b/src/stories/bin/discovermgr/src/suggestions_manager.rs
index 2ec94f6..84cdbdb 100644
--- a/src/stories/bin/discovermgr/src/suggestions_manager.rs
+++ b/src/stories/bin/discovermgr/src/suggestions_manager.rs
@@ -221,4 +221,54 @@
 
         Ok(())
     }
+
+    #[fasync::run_singlethreaded(test)]
+    async fn provider_order_is_reflected() -> Result<(), Error> {
+        // Set up the fake puppet master client that is dependency. Even if we
+        // don't using it in this test.
+        let (puppet_master_client, request_stream) =
+            fidl::endpoints::create_proxy_and_stream::<PuppetMasterMarker>().unwrap();
+        let mut puppet_master_fake = PuppetMasterFake::new();
+        puppet_master_fake.set_on_execute("story_name", |_commands| {
+            // Puppet master shouldn't be called.
+            assert!(false);
+        });
+        puppet_master_fake.spawn(request_stream);
+
+        // Set up our test suggestions provider.
+        let entity_resolver = connect_to_service::<EntityResolverMarker>()
+            .context("failed to connect to entity resolver")?;
+        let (_, _, mod_manager) = init_state(puppet_master_client, entity_resolver);
+        let mut suggestions_manager = SuggestionsManager::new(mod_manager);
+
+        let mut provider1 = TestSuggestionsProvider::new();
+        provider1.suggestions = vec![
+            suggestion!(action = "A", title = "a", parameters = [], story = "story"),
+            suggestion!(action = "B", title = "b", parameters = [], story = "story"),
+        ];
+        let mut provider2 = TestSuggestionsProvider::new();
+        provider2.suggestions = vec![
+            suggestion!(action = "C", title = "c", parameters = [], story = "story"),
+            suggestion!(action = "D", title = "d", parameters = [], story = "story"),
+        ];
+
+        suggestions_manager.register_suggestions_provider(Box::new(provider1));
+        suggestions_manager.register_suggestions_provider(Box::new(provider2));
+
+        // Get suggestions and ensure the right ones are received.
+        let context = vec![];
+        let suggestions =
+            suggestions_manager.get_suggestions("", &context).await.collect::<Vec<&Suggestion>>();
+        assert_eq!(suggestions.len(), 4);
+        let titles = suggestions
+            .iter()
+            .map(|s| s.display_info().title.as_ref().unwrap().as_ref())
+            .collect::<Vec<&str>>();
+
+        // In lack of actual ranking we respect the order in which the providers
+        // were registered.
+        assert_eq!(titles, vec!["a", "b", "c", "d"]);
+
+        Ok(())
+    }
 }
diff --git a/src/stories/bin/discovermgr/src/testing/suggestion_providers.rs b/src/stories/bin/discovermgr/src/testing/suggestion_providers.rs
index d3dea18..1092e9b 100644
--- a/src/stories/bin/discovermgr/src/testing/suggestion_providers.rs
+++ b/src/stories/bin/discovermgr/src/testing/suggestion_providers.rs
@@ -15,7 +15,7 @@
 };
 
 pub struct TestSuggestionsProvider {
-    suggestions: Vec<Suggestion>,
+    pub suggestions: Vec<Suggestion>,
 }
 
 impl TestSuggestionsProvider {
