diff --git a/activity.hpp b/activity.hpp
index 0000ae50a643b900dbca28ad36fa47515e8738a3..fa089bd49d550022c8890e782efba39980db2698 100644
--- a/activity.hpp
+++ b/activity.hpp
@@ -111,7 +111,7 @@ namespace CIS {
             xamlCode = activity.generateXaml();
         }
         explicit Flow(rlib::string xamlCode) : xamlCode(xamlCode) {}
-        Flow(const Flow &another) : queued(another.queued), xamlCode(another.xamlCode), prevOperationIsSequential(another.prevOperationIsSequential) {}
+        Flow(const Flow &another) : queuedOnRight(another.queuedOnRight), xamlCode(another.xamlCode), prevOperationIsSequential(another.prevOperationIsSequential) {}
 
         // Actually modify xamlCode on "OperationChange". 
         // for example, A >> B >> C >> D | E. ABCD should be merged into one sequential operation. 
@@ -129,7 +129,9 @@ namespace CIS {
     private:
         bool prevOperationIsSequential = true;
         rlib::string xamlCode;
-        std::queue<rlib::string> queued;
+
+        // For a long expression A >> B >> C >> D, A is in xamlCode, and [B,C,D] are cached in queuedOnRight to wait for merge. 
+        std::list<rlib::string> queuedOnRight;
 
         Flow binaryOperation(Flow seqNext, bool thisOperationIsSequential) const {
             Flow result = *this;
@@ -137,18 +139,25 @@ namespace CIS {
             seqNext.reduceQueuedIfNecessary(thisOperationIsSequential);
 
             result.prevOperationIsSequential = thisOperationIsSequential;
-            result.queued.push(seqNext.xamlCode);
+
+            result.queuedOnRight.emplace_back(seqNext.xamlCode);
+            for(auto &&item : seqNext.queuedOnRight)
+                result.queuedOnRight.emplace_back(item);
             return result;
         }
 
         void reduceQueuedIfNecessary(bool thisOperationIsSequential) {
-            if(thisOperationIsSequential == prevOperationIsSequential || queued.empty()) return;
+            if(thisOperationIsSequential == prevOperationIsSequential || queuedOnRight.empty()) return;
             rlib::string resultXaml = prevOperationIsSequential ? templates::SEQ_BEGIN : templates::PAR_BEGIN;
+
             resultXaml += xamlCode;
-            while(!queued.empty())
-                resultXaml += queued.front(), queued.pop();
+            for(auto &&item : queuedOnRight)
+                resultXaml += item;
+
             resultXaml += prevOperationIsSequential ? templates::SEQ_END : templates::PAR_END;
+
             xamlCode = std::move(resultXaml);
+            queuedOnRight.clear();
         }
     };
 
diff --git a/workflows/E2EPOC-BuildPortal.cc b/workflows/E2EPOC-BuildPortal.cc
index 6797d0b9f09719e0ef8988f73370ba09aef17580..23759e3d09a0f2ff7f4beddfeb7589160e2eb7eb 100644
--- a/workflows/E2EPOC-BuildPortal.cc
+++ b/workflows/E2EPOC-BuildPortal.cc
@@ -12,5 +12,5 @@ int main() {
     DEFINE_ACTIVITY(CustomerLockboxUX);
 
     auto flow = AdminCenterApp | OfficeHome | ShellServices | PortalUseageReports | SvcHealthDashboard | CustomerLockboxUX;
-    println(to_file("BuildPortal.xaml"), flow.generateXaml("FleetAGC.Workflows.BuildPortal"));
+    println(to_file("E2EPOCBuildPortalWorkflow.xaml"), flow.generateXaml("FleetAGC.Workflows.BuildPortal"));
 }
diff --git a/workflows/another.cc b/workflows/another.cc
new file mode 100644
index 0000000000000000000000000000000000000000..87f88ee1d58982a2a3262f990291c40c2676d97a
--- /dev/null
+++ b/workflows/another.cc
@@ -0,0 +1,25 @@
+#include <cis-workflow-gen/quick-include.hpp>
+
+int main() {
+    #define DEFINE_ACTIVITY(name, entityName) \
+        Activity name (#name, "FleetAGC.Activities.DelayActivity", entityName); \
+        name.addInputSetting("Timespan", "60");
+    
+    DEFINE_ACTIVITY(GridManager, "M365Poc.SPO.GridManager")
+    DEFINE_ACTIVITY(AuthAndProvision, "M365Poc.SPO.AuthProvisioning")
+    DEFINE_ACTIVITY(FarmsAndTennats, "")
+    DEFINE_ACTIVITY(CSC , "")
+    DEFINE_ACTIVITY(FastSearch , "")
+    DEFINE_ACTIVITY(Microservices, "M365Poc.SPO.MicroServices")
+    DEFINE_ACTIVITY(MonitorAndAlert, "M365Poc.SPO.MonitoringAlerting")
+    DEFINE_ACTIVITY(SPOTooling, "M365Poc.SPO.SPOTooling")
+    DEFINE_ACTIVITY(UXCDNFailover, "M365Poc.SPO.UXCDNFailover")
+    DEFINE_ACTIVITY(ODFBSyncClient, "M365Poc.SPO.ODFBSyncClient")
+ 
+    auto block1 = GridManager >> FarmsAndTennats >> (CSC | FastSearch);
+    auto block2 = Microservices | MonitorAndAlert;
+    auto completeFlow = block1 | AuthAndProvision | block2;// | SPOTooling | UXCDNFailover | ODFBSyncClient;
+ 
+    println(to_file("SPOBuildoutPOCWorkflow.xaml"), completeFlow.generateXaml("FleetAGC.Workflows.SPOBuildoutPOCWorkflow"));
+}
+