diff --git a/tools/gn/command_format.cc b/tools/gn/command_format.cc
index 3106b2c..dafba6e 100644
--- a/tools/gn/command_format.cc
+++ b/tools/gn/command_format.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "tools/gn/command_format.h"
+
 #include <stddef.h>
 
 #include <sstream>
diff --git a/tools/gn/command_format.h b/tools/gn/command_format.h
new file mode 100644
index 0000000..97c3e4c
--- /dev/null
+++ b/tools/gn/command_format.h
@@ -0,0 +1,27 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef TOOLS_GN_COMAND_FORMAT_H_
+#define TOOLS_GN_COMAND_FORMAT_H_
+
+#include <string>
+
+class Setup;
+class SourceFile;
+
+namespace commands {
+
+bool FormatFileToString(Setup* setup,
+                        const SourceFile& file,
+                        bool dump_tree,
+                        std::string* output);
+
+bool FormatStringToString(const std::string& input,
+                          bool dump_tree,
+                          std::string* output);
+
+}  // namespace commands
+
+#endif  // TOOLS_GN_COMAND_FORMAT_H_
+
diff --git a/tools/gn/command_format_unittest.cc b/tools/gn/command_format_unittest.cc
index d753b33..802dfbd 100644
--- a/tools/gn/command_format_unittest.cc
+++ b/tools/gn/command_format_unittest.cc
@@ -6,16 +6,10 @@
 #include "base/path_service.h"
 #include "base/strings/string_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "tools/gn/command_format.h"
 #include "tools/gn/commands.h"
 #include "tools/gn/setup.h"
 
-namespace commands {
-bool FormatFileToString(Setup* setup,
-                        const SourceFile& file,
-                        bool dump_tree,
-                        std::string* output);
-}  // namespace commands
-
 #define FORMAT_TEST(n)                                                      \
   TEST(Format, n) {                                                         \
     ::Setup setup;                                                          \
diff --git a/tools/gn/setup.cc b/tools/gn/setup.cc
index 490204d..240c11f 100644
--- a/tools/gn/setup.cc
+++ b/tools/gn/setup.cc
@@ -21,6 +21,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
+#include "tools/gn/command_format.h"
 #include "tools/gn/commands.h"
 #include "tools/gn/filesystem_utils.h"
 #include "tools/gn/input_file.h"
@@ -261,6 +262,7 @@
       dotfile_scope_(&dotfile_settings_),
       fill_arguments_(true) {
   dotfile_settings_.set_toolchain_label(Label());
+
   build_settings_.set_item_defined_callback(
       base::Bind(&ItemDefinedCallback, scheduler_.task_runner(), &builder_));
 
@@ -440,6 +442,10 @@
   }
 
   Scope arg_scope(&dotfile_settings_);
+  // Set soure dir so relative imports in args work.
+  SourceDir root_source_dir =
+      SourceDirForCurrentDirectory(build_settings_.root_path());
+  arg_scope.set_source_dir(root_source_dir);
   args_root_->Execute(&arg_scope, &err);
   if (err.has_error()) {
     err.PrintToStdout();
@@ -456,12 +462,6 @@
 bool Setup::SaveArgsToFile() {
   ScopedTrace setup_trace(TraceItem::TRACE_SETUP, "Save args file");
 
-  std::ostringstream stream;
-  for (const auto& pair : build_settings_.build_args().GetAllOverrides()) {
-    stream << pair.first.as_string() << " = " << pair.second.ToString(true);
-    stream << std::endl;
-  }
-
   // For the first run, the build output dir might not be created yet, so do
   // that so we can write a file into it. Ignore errors, we'll catch the error
   // when we try to write a file to it below.
@@ -469,7 +469,8 @@
       build_settings_.GetFullPath(GetBuildArgFile());
   base::CreateDirectory(build_arg_file.DirName());
 
-  std::string contents = stream.str();
+  std::string contents = args_input_file_->contents();
+  commands::FormatStringToString(contents, false, &contents);
 #if defined(OS_WIN)
   // Use Windows lineendings for this file since it will often open in
   // Notepad which can't handle Unix ones.
