diff --git a/Framework/Muon/inc/MantidMuon/MuonAlgorithmHelper.h b/Framework/Muon/inc/MantidMuon/MuonAlgorithmHelper.h
index f076ee23cd75da124d4c8c91fb821ed256744b33..7432c8ef81bf4daf75b195c215e94a16e1e3986b 100644
--- a/Framework/Muon/inc/MantidMuon/MuonAlgorithmHelper.h
+++ b/Framework/Muon/inc/MantidMuon/MuonAlgorithmHelper.h
@@ -139,6 +139,8 @@ DLLExport void addSampleLog(Mantid::API::MatrixWorkspace_sptr workspace,
                             const std::string &logName,
                             const std::string &logValue);
 
+DLLExport bool is_alphanumerical_or_underscore(char character);
+
 //
 ///// Saves grouping to the XML file specified
 // DLLExport std::string groupingToXML(const Mantid::API::Grouping &grouping);
diff --git a/Framework/Muon/inc/MantidMuon/MuonGroupingAsymmetry.h b/Framework/Muon/inc/MantidMuon/MuonGroupingAsymmetry.h
index 5024ac6a08164c8b15ddbf5154bfa286f8ac87a2..4450c90a65c4fb1ef99e16e71829fc9aea8616c5 100644
--- a/Framework/Muon/inc/MantidMuon/MuonGroupingAsymmetry.h
+++ b/Framework/Muon/inc/MantidMuon/MuonGroupingAsymmetry.h
@@ -29,7 +29,7 @@ public:
            "grouping in Muon data.";
   }
   const std::vector<std::string> seeAlso() const override {
-    return {"MuonProcess"};
+    return {"MuonProcess", "EstimateMuonAsymmetryFromCounts", "Minus", "Plus"};
   }
 
 private:
diff --git a/Framework/Muon/src/MuonAlgorithmHelper.cpp b/Framework/Muon/src/MuonAlgorithmHelper.cpp
index 498a1e5fb1db175f0614e04a18ce6432da17f6ba..4936b45a6d1c093a2c58cb588ea4ed80352781c4 100644
--- a/Framework/Muon/src/MuonAlgorithmHelper.cpp
+++ b/Framework/Muon/src/MuonAlgorithmHelper.cpp
@@ -607,5 +607,9 @@ void addSampleLog(MatrixWorkspace_sptr workspace, const std::string &logName,
   alg->execute();
 }
 
+bool is_alphanumerical_or_underscore(char character) {
+  return (isalpha(character) || isdigit(character) || (character == '_'));
+}
+
 } // namespace MuonAlgorithmHelper
 } // namespace Mantid
diff --git a/Framework/Muon/src/MuonGroupingAsymmetry.cpp b/Framework/Muon/src/MuonGroupingAsymmetry.cpp
index c9c510864b35f0d409b8338e4554627e5e403094..d5171cb37e09042055ed633e9600fb3d58ac6b3e 100644
--- a/Framework/Muon/src/MuonGroupingAsymmetry.cpp
+++ b/Framework/Muon/src/MuonGroupingAsymmetry.cpp
@@ -24,10 +24,6 @@ using namespace Mantid::Kernel;
 
 namespace {
 
-bool is_alnum_underscore(char c) {
-  return (isalpha(c) || isdigit(c) || (c == '_'));
-}
-
 bool checkPeriodInWorkspaceGroup(const int &period,
                                  WorkspaceGroup_sptr workspace) {
   return period <= workspace->getNumberOfEntries();
@@ -42,7 +38,7 @@ bool checkPeriodInWorkspaceGroup(const int &period,
  */
 MatrixWorkspace_sptr estimateAsymmetry(const Workspace_sptr &inputWS,
                                        const int index, const double startX,
-                                       const double endX) {
+                                       const double endX, const double normalizationIn) {
   IAlgorithm_sptr asym =
       AlgorithmManager::Instance().create("EstimateMuonAsymmetryFromCounts");
   asym->setChild(true);
@@ -55,7 +51,7 @@ MatrixWorkspace_sptr estimateAsymmetry(const Workspace_sptr &inputWS,
   asym->setProperty("OutputWorkspace", "__NotUsed__");
   asym->setProperty("StartX", startX);
   asym->setProperty("EndX", endX);
-  asym->setProperty("NormalizationIn", 0.0);
+  asym->setProperty("NormalizationIn", normalizationIn);
   asym->setProperty("OutputUnNormData", false);
   asym->setProperty("OutputUnNormWorkspace", "tmp_unNorm");
   asym->execute();
@@ -65,10 +61,11 @@ MatrixWorkspace_sptr estimateAsymmetry(const Workspace_sptr &inputWS,
 }
 
 Mantid::API::MatrixWorkspace_sptr
-calculateMuonAsymmetry(WorkspaceGroup_sptr inputWS,
+estimateMuonAsymmetry(WorkspaceGroup_sptr inputWS,
                        const std::vector<int> &summedPeriods,
                        const std::vector<int> &subtractedPeriods,
-                       int groupIndex, const double startX, const double endX) {
+                       int groupIndex, const double startX,
+                       const double endX, const double normalizationIn) {
   MatrixWorkspace_sptr tempWS;
   int numPeriods = inputWS->getNumberOfEntries();
   if (numPeriods > 1) {
@@ -80,12 +77,12 @@ calculateMuonAsymmetry(WorkspaceGroup_sptr inputWS,
 
     // Remove decay (summed periods ws)
     MatrixWorkspace_sptr asymSummedPeriods =
-        estimateAsymmetry(summedWS, groupIndex, startX, endX);
+        estimateAsymmetry(summedWS, groupIndex, startX, endX, normalizationIn);
 
     if (!subtractedPeriods.empty()) {
       // Remove decay (subtracted periods ws)
       MatrixWorkspace_sptr asymSubtractedPeriods =
-          estimateAsymmetry(subtractedWS, groupIndex, startX, endX);
+          estimateAsymmetry(subtractedWS, groupIndex, startX, endX, normalizationIn);
 
       // Now subtract
       tempWS = Mantid::MuonAlgorithmHelper::subtractWorkspaces(
@@ -96,7 +93,7 @@ calculateMuonAsymmetry(WorkspaceGroup_sptr inputWS,
   } else {
     // Only one period was supplied
     tempWS = estimateAsymmetry(inputWS->getItem(0), groupIndex, startX,
-                               endX); // change -1 to m_groupIndex and
+                               endX, normalizationIn); // change -1 to m_groupIndex and
                                       // follow through to store as a
                                       // table for later.
   }
@@ -169,15 +166,19 @@ void MuonGroupingAsymmetry::init() {
                   "IDs or hyphenated ranges of IDs.");
 
   declareProperty("AsymmetryTimeMin", 0.0,
-                  "Start time for the asymmetry calculation (in micro "
+                  "Start time for the asymmetry estimation (in micro "
                   "seconds). Defaults to the start time of the InputWorkspace.",
                   Direction::Input);
 
   declareProperty("AsymmetryTimeMax", 32.0,
-                  "End time for the asymmetry calculation (in micro seconds). "
+                  "End time for the asymmetry estimation (in micro seconds). "
                   "Defaults to the end time of the InputWorkspace.",
                   Direction::Input);
 
+  declareProperty("NormalizationIn", 0.0,
+                  "If this value is non-zero then this is used for the normalization, instead of being estimated.",
+                  Direction::Input);
+
   declareProperty(make_unique<ArrayProperty<int>>(
                       "SummedPeriods", defaultPeriods,
                       IValidator_sptr(new NullValidator), Direction::Input),
@@ -208,7 +209,7 @@ std::map<std::string, std::string> MuonGroupingAsymmetry::validateInputs() {
   }
 
   if (!std::all_of(std::begin(groupName), std::end(groupName),
-                   is_alnum_underscore)) {
+                   Mantid::MuonAlgorithmHelper::is_alphanumerical_or_underscore)) {
     errors["GroupName"] =
         "The group name must contain alphnumeric characters and _ only.";
   }
@@ -285,14 +286,15 @@ void MuonGroupingAsymmetry::exec() {
 
   const double startX = getProperty("AsymmetryTimeMin");
   const double endX = getProperty("AsymmetryTimeMax");
+  const double normalizationIn = getProperty("NormalizationIn");
 
   std::vector<int> summedPeriods = getProperty("SummedPeriods");
   std::vector<int> subtractedPeriods = getProperty("SubtractedPeriods");
 
   WorkspaceGroup_sptr groupedWS = createGroupWorkspace(inputWS);
 
-  outWS = calculateMuonAsymmetry(groupedWS, summedPeriods, subtractedPeriods, 0,
-                                 startX, endX);
+  outWS = estimateMuonAsymmetry(groupedWS, summedPeriods, subtractedPeriods, 0,
+                                 startX, endX, normalizationIn);
 
   addGroupingAsymmetrySampleLogs(outWS);
   setProperty("OutputWorkspace", outWS);
diff --git a/Framework/Muon/test/MuonGroupingAsymmetryTest.h b/Framework/Muon/test/MuonGroupingAsymmetryTest.h
index 3bca32f66c4325414280ebe975060a97c168a729..c57969141a12130f3c245cf88351fe72f84efffd 100644
--- a/Framework/Muon/test/MuonGroupingAsymmetryTest.h
+++ b/Framework/Muon/test/MuonGroupingAsymmetryTest.h
@@ -336,6 +336,33 @@ public:
     TS_ASSERT_DELTA(wsOut->readE(0)[0], 0.0002351, 0.00001);
     TS_ASSERT_DELTA(wsOut->readE(0)[1], 0.0002460, 0.00001);
   }
+
+  void
+  test_grouping_asymmetry_with_specified_normalization_gives_correct_values() {
+    auto ws = createMultiPeriodAsymmetryData(3, 2, 10, "group_asym");
+    std::vector<int> detectors = {1, 2};
+    auto alg =
+        setUpAlgorithmWithoutOptionalProperties(ws, "group_asym", detectors);
+
+    std::vector<int> summedPeriods = {3, 2};
+    std::vector<int> subtractedPeriods = {1};
+    alg->setProperty("SummedPeriods", summedPeriods);
+    alg->setProperty("SubtractedPeriods", subtractedPeriods);
+    alg->setProperty("NormalizationIn", 15.0);
+    alg->execute();
+
+    auto wsOut = getOutputWorkspace(alg);
+
+    TS_ASSERT_DELTA(wsOut->readX(0)[0], 0.000, 0.001);
+    TS_ASSERT_DELTA(wsOut->readX(0)[4], 0.400, 0.001);
+    TS_ASSERT_DELTA(wsOut->readX(0)[9], 0.900, 0.001);
+
+    TS_ASSERT_DELTA(wsOut->readY(0)[0], 1.39055, 0.001);
+    TS_ASSERT_DELTA(wsOut->readY(0)[1], 0.92922, 0.001);
+
+    TS_ASSERT_DELTA(wsOut->readE(0)[0], 0.0000577, 0.00001);
+    TS_ASSERT_DELTA(wsOut->readE(0)[1], 0.0000604, 0.00001);
+  }
 };
 
 #endif /* MANTID_MUON_MUONGROUPINGASYMMETRYTEST_H_ */
diff --git a/docs/source/algorithms/MuonGroupingAsymmetry-v1.rst b/docs/source/algorithms/MuonGroupingAsymmetry-v1.rst
index 61c8845fac82843d50a643846046442effddd2f1..233bc6ff1e756e070ebc8b67ffa6e794bba4447d 100644
--- a/docs/source/algorithms/MuonGroupingAsymmetry-v1.rst
+++ b/docs/source/algorithms/MuonGroupingAsymmetry-v1.rst
@@ -27,7 +27,7 @@ The group must be given a name via **GroupName** which can consist of letters, n
 
 The group name does not affect the data; however the name is used in the muon interface when automatically generating workspace names from group data.
 
-After the grouping is performed, the analysis described in :ref:`algm-EstimateMuonAsymmetryFromCounts` will be run; effectively estimating the muon decay curve and subtracting it from the grouped data. The range over which the estimate is performed is controlled by the **AsymmetryTimeMin** and **AsymmetryTimeMax** inputs.
+After the grouping is performed, the analysis described in :ref:`algm-EstimateMuonAsymmetryFromCounts` will be run; effectively estimating the muon decay curve and subtracting it from the grouped data and then estimating the asymmetry on the grouped data. The range over which the estimate is performed is controlled by the **AsymmetryTimeMin** and **AsymmetryTimeMax** inputs.
 
 **Note** : The workspaces supplied to the algorithm must have a number of good frames set in their sample logs. The sample log is called "goodfrm" and can be set using;
 
@@ -91,8 +91,8 @@ Output:
                     [40, 50, 60, 50, 40]
     ws1 = CreateWorkspace(dataX, dataY_period1, NSpec=2)
     ws2 = CreateWorkspace(dataX, dataY_period2, NSpec=2)
-    AddSampleLog(Workspace=ws1, LogName='goodfrm', LogText="10")
-    AddSampleLog(Workspace=ws2, LogName='goodfrm', LogText="10")
+    AddSampleLog(Workspace=ws1, LogName='goodfrm', LogText="1")
+    AddSampleLog(Workspace=ws2, LogName='goodfrm', LogText="1")
     for i in range(2):
         # set detector IDs to be 1,2,3,4
         # these do not have to be the same as the spectrum numbers