diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index 319dd8e22481602bf22296ae93af221c0299ab1c..9873022bf826ec95b255945a3b8b8ef9e37a0c2c 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -807,6 +807,7 @@ ExplainNode(PlanState *planstate, List *ancestors,
 	const char *pname;			/* node type name for text output */
 	const char *sname;			/* node type name for non-text output */
 	const char *strategy = NULL;
+	const char *partialmode = NULL;
 	const char *operation = NULL;
 	const char *custom_name = NULL;
 	int			save_indent = es->indent;
@@ -943,15 +944,10 @@ ExplainNode(PlanState *planstate, List *ancestors,
 			pname = sname = "Group";
 			break;
 		case T_Agg:
-			sname = "Aggregate";
 			{
 				Agg		   *agg = (Agg *) plan;
 
-				if (DO_AGGSPLIT_SKIPFINAL(agg->aggsplit))
-					operation = "Partial";
-				else if (DO_AGGSPLIT_COMBINE(agg->aggsplit))
-					operation = "Finalize";
-
+				sname = "Aggregate";
 				switch (agg->aggstrategy)
 				{
 					case AGG_PLAIN:
@@ -972,8 +968,18 @@ ExplainNode(PlanState *planstate, List *ancestors,
 						break;
 				}
 
-				if (operation != NULL)
-					pname = psprintf("%s %s", operation, pname);
+				if (DO_AGGSPLIT_SKIPFINAL(agg->aggsplit))
+				{
+					partialmode = "Partial";
+					pname = psprintf("%s %s", partialmode, pname);
+				}
+				else if (DO_AGGSPLIT_COMBINE(agg->aggsplit))
+				{
+					partialmode = "Finalize";
+					pname = psprintf("%s %s", partialmode, pname);
+				}
+				else
+					partialmode = "Simple";
 			}
 			break;
 		case T_WindowAgg:
@@ -1042,6 +1048,8 @@ ExplainNode(PlanState *planstate, List *ancestors,
 		ExplainPropertyText("Node Type", sname, es);
 		if (strategy)
 			ExplainPropertyText("Strategy", strategy, es);
+		if (partialmode)
+			ExplainPropertyText("Partial Mode", partialmode, es);
 		if (operation)
 			ExplainPropertyText("Operation", operation, es);
 		if (relationship)
@@ -1050,8 +1058,7 @@ ExplainNode(PlanState *planstate, List *ancestors,
 			ExplainPropertyText("Subplan Name", plan_name, es);
 		if (custom_name)
 			ExplainPropertyText("Custom Plan Provider", custom_name, es);
-		if (plan->parallel_aware)
-			ExplainPropertyText("Parallel Aware", "true", es);
+		ExplainPropertyBool("Parallel Aware", plan->parallel_aware, es);
 	}
 
 	switch (nodeTag(plan))
@@ -1349,10 +1356,8 @@ ExplainNode(PlanState *planstate, List *ancestors,
 					ExplainPropertyInteger("Workers Launched",
 										   nworkers, es);
 				}
-				if (gather->single_copy)
-					ExplainPropertyText("Single Copy",
-									  gather->single_copy ? "true" : "false",
-										es);
+				if (gather->single_copy || es->format != EXPLAIN_FORMAT_TEXT)
+					ExplainPropertyBool("Single Copy", gather->single_copy, es);
 			}
 			break;
 		case T_FunctionScan:
@@ -3031,6 +3036,15 @@ ExplainPropertyFloat(const char *qlabel, double value, int ndigits,
 	ExplainProperty(qlabel, buf, true, es);
 }
 
+/*
+ * Explain a bool-valued property.
+ */
+void
+ExplainPropertyBool(const char *qlabel, bool value, ExplainState *es)
+{
+	ExplainProperty(qlabel, value ? "true" : "false", true, es);
+}
+
 /*
  * Open a group of related objects.
  *
diff --git a/src/include/commands/explain.h b/src/include/commands/explain.h
index 904925d7123394427b895f853bde10c634b57db5..2e48f0f2331240525af1174a68da6093cea3d8ab 100644
--- a/src/include/commands/explain.h
+++ b/src/include/commands/explain.h
@@ -93,5 +93,7 @@ extern void ExplainPropertyLong(const char *qlabel, long value,
 					ExplainState *es);
 extern void ExplainPropertyFloat(const char *qlabel, double value, int ndigits,
 					 ExplainState *es);
+extern void ExplainPropertyBool(const char *qlabel, bool value,
+					ExplainState *es);
 
 #endif   /* EXPLAIN_H */
diff --git a/src/test/regress/expected/insert_conflict.out b/src/test/regress/expected/insert_conflict.out
index e5c8b4aaacb1ddc59b5cb6bb97e6129e3556e5b2..6f4ec867d9f48244e82a23ab80816abac9abd579 100644
--- a/src/test/regress/expected/insert_conflict.out
+++ b/src/test/regress/expected/insert_conflict.out
@@ -205,6 +205,7 @@ explain (costs off, format json) insert into insertconflicttest values (0, 'Bilb
      "Plan": {                                                         +
        "Node Type": "ModifyTable",                                     +
        "Operation": "Insert",                                          +
+       "Parallel Aware": false,                                        +
        "Relation Name": "insertconflicttest",                          +
        "Alias": "insertconflicttest",                                  +
        "Conflict Resolution": "UPDATE",                                +
@@ -213,7 +214,8 @@ explain (costs off, format json) insert into insertconflicttest values (0, 'Bilb
        "Plans": [                                                      +
          {                                                             +
            "Node Type": "Result",                                      +
-           "Parent Relationship": "Member"                             +
+           "Parent Relationship": "Member",                            +
+           "Parallel Aware": false                                     +
          }                                                             +
        ]                                                               +
      }                                                                 +