diff --git a/docs/source/algorithms/SANSStitch-v1.rst b/docs/source/algorithms/SANSStitch-v1.rst
index 2c97199aa54e0bf8077461d8054ffa8791c16588..f4dfba273fdf7c9051970110006a7655fecf9c62 100644
--- a/docs/source/algorithms/SANSStitch-v1.rst
+++ b/docs/source/algorithms/SANSStitch-v1.rst
@@ -43,6 +43,11 @@ Merging of front and rear banks for the can is achieved using a different form f
 
 where *C* denotes counts, *N* denotes normalization and *f* and *r* relate to forward (high-angle) and rear (low-angle) respectively. The can workspace is subtracted from the merged sample workspace to generate the output.
 
+Workflow
+########
+
+.. diagram:: SANSStitch-v1_wkflw.dot
+
 Usage
 -----
 
diff --git a/docs/source/diagrams/SANSStitch-v1_wkflw.dot b/docs/source/diagrams/SANSStitch-v1_wkflw.dot
new file mode 100644
index 0000000000000000000000000000000000000000..0b5b15023fcbc273233dcf21327f7b30921302f2
--- /dev/null
+++ b/docs/source/diagrams/SANSStitch-v1_wkflw.dot
@@ -0,0 +1,118 @@
+digraph SansStitch {
+    label="SANSStitch Flowchart";
+    $global_style
+
+    subgraph params {
+        $param_style
+        hABCountsSample [label="HABCountsSample"];
+        lABCountsSample [label="LABCountsSample"];
+        hABNormSample [label="HABNormSample"];
+        lABNormSample [label="LABNormSample"];
+        hABCountsCan [label="HABCountsCan"];
+        lABCountsCan [label="LABCountsCan"];
+        hABNormCan [label="HABNormCan"];
+        lABNormCan [label="LABNormCan"];
+        processCan [label="ProcessCan"];
+        scaleFactor [label="ScaleFactor"];
+        shiftFactor [label="ShiftFactor"];
+        outputWorkspace [label="OutputWorkspace"];
+        outScaleFactor [label="OutScaleFactor"];
+        outShiftFactor [label="OutShiftFactor"];
+        mode [label="Mode"];
+    }
+
+    subgraph decisions {
+        $decision_style
+        checkProcessCan [label="Process the can?"];
+        checkModeForFit [label="Mode Requires Fitting"];
+    }
+
+    subgraph algorithms {
+        $algorithm_style
+        divideHABSample [label="Divide\nHAB sample\ncounts/normalization"];
+        divideLABSample [label="Divide\nLAB sample\ncounts/normalization"];
+        divideHABCan [label="Divide\nHAB can\ncounts/normalization"];
+        divideLABCan [label="Divide\nLAB can\ncounts/normalization"];
+        subtractCanHAB [label="Subtract"];
+        subtractCanLAB [label="Subtract"];
+        sansFitShiftScale [label="SANSFitShiftScale"];
+        subtractMerged [label="Subtract"];
+    }
+
+    subgraph processes {
+        $process_style
+        errorCorrection [label="Error Correction Merged Workspace"];
+        calculateMergedQ [label="Calculate Merged Q"];
+        calculateMergedQCan [label="Calculate Merged Q Can"];
+        readCanInputs [label="Read Can Inputs"];
+        copyShiftFactor [label="Copy Shift Factor"];
+        copyScaleFactor [label="Copy Scale Factor"];
+    }
+
+    subgraph cluster {
+        color=blue;
+        label="Can Processing";
+        node [style=filled];
+        readCanInputs -> hABCountsCan;
+        readCanInputs -> lABCountsCan;
+        readCanInputs -> hABNormCan;
+        readCanInputs -> lABNormCan;
+        hABCountsCan -> divideHABCan;
+        hABNormCan -> divideHABCan;
+        lABCountsCan -> divideLABCan;
+        lABNormCan -> divideLABCan;
+        divideHABCan -> subtractCanHAB;
+        divideLABCan -> subtractCanLAB;
+        hABCountsCan -> calculateMergedQCan;
+        hABNormCan -> calculateMergedQCan;
+        lABCountsCan -> calculateMergedQCan;
+        lABNormCan -> calculateMergedQCan;
+        calculateMergedQCan -> subtractMerged;
+    }
+
+    subgraph values {
+        $value_style
+        valQLAB [label="LAB Normalized"];
+        valQHAB [label="HAB Normalized"];
+        mergedQ [label="Merged"];
+    }
+
+    hABCountsSample -> divideHABSample;
+    hABNormSample -> divideHABSample;
+    lABCountsSample -> divideLABSample;
+    lABNormSample -> divideLABSample;
+    divideLABSample -> valQLAB  [label="If can is not processed."];
+    divideHABSample -> valQHAB  [label="If can is not processed."];
+    processCan -> checkProcessCan;
+    divideHABSample -> subtractCanHAB;
+    divideLABSample -> subtractCanLAB;
+    subtractCanHAB -> valQHAB  [label="If can is processed."];
+    subtractCanLAB -> valQLAB  [label="If can is processed."];
+    checkProcessCan -> readCanInputs  [label="yes"];
+    mode -> checkModeForFit;
+    checkModeForFit -> sansFitShiftScale  [label="yes"];
+    valQHAB -> sansFitShiftScale;
+    valQLAB -> sansFitShiftScale;
+    scaleFactor -> sansFitShiftScale;
+    shiftFactor -> sansFitShiftScale;
+    sansFitShiftScale -> outShiftFactor;
+    sansFitShiftScale -> outScaleFactor;
+    checkModeForFit -> copyScaleFactor  [label="no"];
+    checkModeForFit -> copyShiftFactor  [label="no"];
+    scaleFactor -> copyScaleFactor;
+    shiftFactor -> copyShiftFactor;
+    copyScaleFactor -> outScaleFactor;
+    copyShiftFactor -> outShiftFactor;
+    outScaleFactor -> calculateMergedQ;
+    outShiftFactor -> calculateMergedQ;
+    outScaleFactor -> calculateMergedQCan;
+    hABCountsSample -> calculateMergedQ;
+    hABNormSample -> calculateMergedQ;
+    lABCountsSample -> calculateMergedQ;
+    lABNormSample -> calculateMergedQ;
+    calculateMergedQ -> subtractMerged;
+    calculateMergedQ -> mergedQ  [label="If can is processed."];
+    subtractMerged -> mergedQ  [label="If can is not processed."];
+    mergedQ -> errorCorrection;
+    errorCorrection -> outputWorkspace;
+}