diff --git a/shell/application_manager/application_manager.cc b/shell/application_manager/application_manager.cc
index 4f4af48..8453f1c 100644
--- a/shell/application_manager/application_manager.cc
+++ b/shell/application_manager/application_manager.cc
@@ -45,6 +45,14 @@
   return result;
 }
 
+void AppendArgsForURL(const GURL& url,
+                      const std::vector<std::string>& args,
+                      std::vector<std::string>* target) {
+  if (target->empty())
+    target->push_back(url.spec());
+  target->insert(target->end(), args.begin(), args.end());
+}
+
 }  // namespace
 
 class ApplicationManager::ContentHandlerConnection {
@@ -457,20 +465,15 @@
 void ApplicationManager::SetArgsForURL(const std::vector<std::string>& args,
                                        const GURL& url) {
   GURL base_url = GetBaseURLAndQuery(url, nullptr);
-  url_to_args_[base_url].insert(url_to_args_[base_url].end(), args.begin(),
-                                args.end());
+  AppendArgsForURL(base_url, args, &url_to_args_[base_url]);
   GURL mapped_url = delegate_->ResolveMappings(base_url);
   DCHECK(!mapped_url.has_query());
-  if (mapped_url != url) {
-    url_to_args_[mapped_url].insert(url_to_args_[mapped_url].end(),
-                                    args.begin(), args.end());
-  }
+  if (mapped_url != base_url)
+    AppendArgsForURL(mapped_url, args, &url_to_args_[mapped_url]);
   GURL resolved_url = delegate_->ResolveMojoURL(mapped_url);
   DCHECK(!resolved_url.has_query());
-  if (resolved_url != mapped_url) {
-    url_to_args_[resolved_url].insert(url_to_args_[resolved_url].end(),
-                                      args.begin(), args.end());
-  }
+  if (resolved_url != mapped_url)
+    AppendArgsForURL(resolved_url, args, &url_to_args_[resolved_url]);
 }
 
 NativeApplicationOptions* ApplicationManager::GetNativeApplicationOptionsForURL(
diff --git a/shell/application_manager/application_manager_unittest.cc b/shell/application_manager/application_manager_unittest.cc
index 341aea1..de6fdc5 100644
--- a/shell/application_manager/application_manager_unittest.cc
+++ b/shell/application_manager/application_manager_unittest.cc
@@ -522,9 +522,9 @@
   test_client.Test("test");
   loop_.Run();
   std::vector<std::string> app_args = loader->GetArgs();
-  ASSERT_EQ(args.size(), app_args.size());
-  EXPECT_EQ(args[0], app_args[0]);
-  EXPECT_EQ(args[1], app_args[1]);
+  ASSERT_EQ(args.size() + 1, app_args.size());
+  EXPECT_EQ(args[0], app_args[1]);
+  EXPECT_EQ(args[1], app_args[2]);
 }
 
 // Confirm that arguments are sent to an application in the presence of query
@@ -545,8 +545,33 @@
   test_client.Test("test");
   loop_.Run();
   std::vector<std::string> app_args = loader->GetArgs();
-  ASSERT_EQ(args.size(), app_args.size());
-  EXPECT_EQ(args[0], app_args[0]);
+  ASSERT_EQ(args.size() + 1, app_args.size());
+  EXPECT_EQ(args[0], app_args[1]);
+}
+
+// Confirm that the URL is not duplicated when arguments are added in multiple
+// phases.
+TEST_F(ApplicationManagerTest, ArgsMultipleCalls) {
+  ApplicationManager am(ApplicationManager::Options(), &test_delegate_);
+  GURL test_url("test:test");
+  std::vector<std::string> args1;
+  args1.push_back("test_arg1");
+  am.SetArgsForURL(args1, test_url);
+  std::vector<std::string> args2;
+  args2.push_back("test_arg2");
+  am.SetArgsForURL(args2, test_url);
+  TestApplicationLoader* loader = new TestApplicationLoader;
+  loader->set_context(&context_);
+  am.SetLoaderForURL(scoped_ptr<ApplicationLoader>(loader), test_url);
+  TestServicePtr test_service;
+  am.ConnectToService(test_url, &test_service);
+  TestClient test_client(test_service.Pass());
+  test_client.Test("test");
+  loop_.Run();
+  std::vector<std::string> app_args = loader->GetArgs();
+  ASSERT_EQ(args1.size() + args2.size() + 1, app_args.size());
+  EXPECT_EQ(args1[0], app_args[1]);
+  EXPECT_EQ(args2[0], app_args[2]);
 }
 
 // Confirm that arguments are aggregated through mappings.
@@ -574,11 +599,11 @@
     test_client.Test("test");
     loop_.Run();
     std::vector<std::string> app_args = loader->GetArgs();
-    ASSERT_EQ(args.size() + args2.size(), app_args.size());
-    EXPECT_EQ(args[0], app_args[0]);
-    EXPECT_EQ(args[1], app_args[1]);
-    EXPECT_EQ(args2[0], app_args[2]);
-    EXPECT_EQ(args2[1], app_args[3]);
+    ASSERT_EQ(args.size() + args2.size() + 1, app_args.size());
+    EXPECT_EQ(args[0], app_args[1]);
+    EXPECT_EQ(args[1], app_args[2]);
+    EXPECT_EQ(args2[0], app_args[3]);
+    EXPECT_EQ(args2[1], app_args[4]);
   }
   {
     // Connext to the target url
@@ -588,11 +613,11 @@
     test_client.Test("test");
     loop_.Run();
     std::vector<std::string> app_args = loader->GetArgs();
-    ASSERT_EQ(args.size() + args2.size(), app_args.size());
-    EXPECT_EQ(args[0], app_args[0]);
-    EXPECT_EQ(args[1], app_args[1]);
-    EXPECT_EQ(args2[0], app_args[2]);
-    EXPECT_EQ(args2[1], app_args[3]);
+    ASSERT_EQ(args.size() + args2.size() + 1, app_args.size());
+    EXPECT_EQ(args[0], app_args[1]);
+    EXPECT_EQ(args[1], app_args[2]);
+    EXPECT_EQ(args2[0], app_args[3]);
+    EXPECT_EQ(args2[1], app_args[4]);
   }
 }
 
