diff --git a/Framework/API/src/ScriptBuilder.cpp b/Framework/API/src/ScriptBuilder.cpp
index d852516ec45cb830b9e4041fa03b3ded94021dad..292b99877dc557559a610779322a20a3e09041d6 100644
--- a/Framework/API/src/ScriptBuilder.cpp
+++ b/Framework/API/src/ScriptBuilder.cpp
@@ -12,6 +12,8 @@
 #include "MantidKernel/Property.h"
 #include "MantidKernel/PropertyHistory.h"
 
+#include <boost/range/algorithm/remove_if.hpp>
+#include <boost/algorithm/string/classification.hpp>
 #include <boost/utility.hpp>
 #include <set>
 
@@ -219,7 +221,10 @@ ScriptBuilder::buildAlgorithmString(const AlgorithmHistory &algHistory) {
     propStr.erase(propStr.size() - 1);
   }
 
-  return name + "(" + propStr + ")";
+  std::string historyEntry = name + "(" + propStr + ")";
+  historyEntry.erase(
+	  boost::remove_if(historyEntry, boost::is_any_of("\n\r")), historyEntry.end());
+  return historyEntry;
 }
 
 /**
diff --git a/Framework/API/test/ScriptBuilderTest.h b/Framework/API/test/ScriptBuilderTest.h
index 31e8e8a5bb66a4bc78db0ea85390f7be51c6aa4a..41e8d9c7f05ff42e36c8d7f722ecb96a32986a27 100644
--- a/Framework/API/test/ScriptBuilderTest.h
+++ b/Framework/API/test/ScriptBuilderTest.h
@@ -85,6 +85,39 @@ class ScriptBuilderTest : public CxxTest::TestSuite {
     }
   };
 
+
+  class NewlineAlgorithm : public Algorithm {
+  public:
+	  NewlineAlgorithm() : Algorithm() {}
+	  ~NewlineAlgorithm() override {}
+	  const std::string name() const override { return "Foo\n\rBar"; }
+	  const std::string summary() const override { return "Test"; }
+	  int version() const override { return 1; }
+	  const std::string category() const override { return "Cat;Leopard;Mink"; }
+	  
+	  void afterPropertySet(const std::string &name) override {
+		  if (name == "InputWorkspace")
+			  declareProperty("DynamicInputProperty", "");
+	  }
+
+	  void init() override {
+		  declareProperty(make_unique<WorkspaceProperty<MatrixWorkspace>>(
+			  "InputWorkspace", "", Direction::Input));
+		  declareProperty(make_unique<WorkspaceProperty<MatrixWorkspace>>(
+			  "OutputWorkspace", "", Direction::Output));
+		  declareProperty("PropertyA", "Hello");
+		  declareProperty("PropertyB", "World");
+	  }
+	  void exec() override {
+		  declareProperty("DynamicProperty1", "value", Direction::Output);
+		  setPropertyValue("DynamicProperty1", "outputValue");
+
+		  boost::shared_ptr<MatrixWorkspace> output =
+			  boost::make_shared<WorkspaceTester>();
+		  setProperty("OutputWorkspace", output);
+	  }
+  };
+
   // middle layer algorithm executed by a top level algorithm
   class NestedAlgorithm : public DataProcessorAlgorithm {
   public:
@@ -205,6 +238,7 @@ public:
     Mantid::API::AlgorithmFactory::Instance().subscribe<NestedAlgorithm>();
     Mantid::API::AlgorithmFactory::Instance().subscribe<BasicAlgorithm>();
     Mantid::API::AlgorithmFactory::Instance().subscribe<SubAlgorithm>();
+	Mantid::API::AlgorithmFactory::Instance().subscribe<NewlineAlgorithm>();
     Mantid::API::AlgorithmFactory::Instance()
         .subscribe<AlgorithmWithDynamicProperty>();
   }
@@ -217,6 +251,7 @@ public:
     Mantid::API::AlgorithmFactory::Instance().unsubscribe("SubAlgorithm", 1);
     Mantid::API::AlgorithmFactory::Instance().unsubscribe(
         "AlgorithmWithDynamicProperty", 1);
+	Mantid::API::AlgorithmFactory::Instance().unsubscribe("Foo\n\rBar", 1 );
   }
 
   void test_Build_Simple() {
@@ -254,6 +289,41 @@ public:
     AnalysisDataService::Instance().remove("test_input_workspace");
   }
 
+  void test_newline_chars_removed() {
+	  // Check that any newline chars are removed
+	  std::string result[] = {"FooBar(InputWorkspace='test_input_workspace',"
+							  " OutputWorkspace='test_output_workspace')", ""};
+
+	  boost::shared_ptr<WorkspaceTester> input =
+		  boost::make_shared<WorkspaceTester>();
+	  AnalysisDataService::Instance().addOrReplace("test_input_workspace", input);
+
+	  auto alg = AlgorithmFactory::Instance().create("Foo\n\rBar", 1);
+	  alg->initialize();
+	  alg->setRethrows(true);
+	  alg->setProperty("InputWorkspace", input);
+	  alg->setPropertyValue("OutputWorkspace", "test_output_workspace");
+	  alg->execute();
+
+	  auto ws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(
+		  "test_output_workspace");
+	  auto wsHist = ws->getHistory();
+
+	  ScriptBuilder builder(wsHist.createView());
+	  std::string scriptText = builder.build();
+
+	  std::vector<std::string> scriptLines;
+	  boost::split(scriptLines, scriptText, boost::is_any_of("\n"));
+
+	  int i = 0;
+	  for (auto it = scriptLines.begin(); it != scriptLines.end(); ++it, ++i) {
+		  TS_ASSERT_EQUALS(*it, result[i])
+	  }
+
+	  AnalysisDataService::Instance().remove("test_output_workspace");
+	  AnalysisDataService::Instance().remove("test_input_workspace");
+  }
+
   void test_Build_Simple_Timestamped() {
     boost::shared_ptr<WorkspaceTester> input =
         boost::make_shared<WorkspaceTester>();