diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
index 950713a..52086f4 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
@@ -479,6 +479,7 @@
         protected String applicationId;
         protected String entityId;
         protected String workflowId;
+        protected String workflowName;
 
         protected Integer stepIndex;
         // TODO handle these in the UI:
@@ -536,6 +537,7 @@
         t.applicationId = workflow.getEntity().getApplicationId();
         t.entityId = workflow.getEntity().getId();
         t.workflowId = workflow.getWorkflowId();
+        t.workflowName = workflow.getName();
         return t;
     }
     public static WorkflowTaskTag tagForWorkflow(WorkflowStepInstanceExecutionContext workflowStep) {
diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/CustomWorkflowStep.java b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/CustomWorkflowStep.java
index ddfc6d9..d61cf7b 100644
--- a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/CustomWorkflowStep.java
+++ b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/CustomWorkflowStep.java
@@ -18,6 +18,15 @@
  */
 package org.apache.brooklyn.core.workflow.steps;
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import javax.annotation.Nonnull;
+
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -38,7 +47,13 @@
 import org.apache.brooklyn.core.resolve.jackson.BeanWithTypeUtils;
 import org.apache.brooklyn.core.resolve.jackson.JsonPassThroughDeserializer;
 import org.apache.brooklyn.core.typereg.RegisteredTypes;
-import org.apache.brooklyn.core.workflow.*;
+import org.apache.brooklyn.core.workflow.WorkflowCommonConfig;
+import org.apache.brooklyn.core.workflow.WorkflowExecutionContext;
+import org.apache.brooklyn.core.workflow.WorkflowExpressionResolution;
+import org.apache.brooklyn.core.workflow.WorkflowReplayUtils;
+import org.apache.brooklyn.core.workflow.WorkflowStepDefinition;
+import org.apache.brooklyn.core.workflow.WorkflowStepInstanceExecutionContext;
+import org.apache.brooklyn.core.workflow.WorkflowStepResolution;
 import org.apache.brooklyn.core.workflow.utils.WorkflowConcurrencyParser;
 import org.apache.brooklyn.core.workflow.utils.WorkflowRetentionParser;
 import org.apache.brooklyn.util.collections.MutableList;
@@ -56,16 +71,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.annotation.Nonnull;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Supplier;
-import java.util.stream.Collectors;
-
 public class CustomWorkflowStep extends WorkflowStepDefinition implements WorkflowStepDefinition.WorkflowStepDefinitionWithSpecialDeserialization, WorkflowStepDefinition.WorkflowStepDefinitionWithSubWorkflow {
 
     private static final Logger LOG = LoggerFactory.getLogger(CustomWorkflowStep.class);
@@ -136,7 +141,7 @@
             if (SHORTHAND_TYPE_NAME_DEFAULT.equals(shorthandTypeName)) {
                 shorthand = WORKFLOW_SETTING_SHORTHAND;
             } else {
-                throw new IllegalStateException("Shorthand not supported for " + getNameOrDefault());
+                throw new IllegalStateException("Shorthand not supported for " + getStepTypeName());
             }
         }
         if (input==null) input = MutableMap.of();
@@ -258,7 +263,6 @@
         boolean wasList = targetR instanceof Iterable;
 
         targetR = checkTarget(targetR);
-
         Map reducingV = initializeReducingVariables(context, reducing);
 
         AtomicInteger index = new AtomicInteger(0);
@@ -504,11 +508,36 @@
         throw new IllegalArgumentException("Invalid target '"+target+"'; if a string, it must match a known keyword ('children' or 'members') or pattern (a range, '1..10')");
     }
 
-    public String getNameOrDefault() {
-        return getNameOrDefault(() -> Strings.isNonBlank(shorthandTypeName) ? shorthandTypeName : "custom step");
+    private static final String FALLBACK_STEP_TYPE_NAME = "custom step";
+    @JsonIgnore
+    protected String getStepTypeName() {
+        return Strings.isNonBlank(shorthandTypeName) ? shorthandTypeName : FALLBACK_STEP_TYPE_NAME;
     }
-    public String getNameOrDefault(Supplier<String> defaultSupplier) {
-        return Strings.isNonBlank(getName()) ? getName() : defaultSupplier==null ? null : defaultSupplier.get();
+    public String getSubworkflowName(Object target, Integer targetIndexOrNullIfNotList) {
+        // old subworkflow name
+//        String indexName = targetIndexOrNull==null ? "" : " "+(targetIndexOrNull+1);
+//        String name = getName();
+//        name = (name == null ? "Sub-workflow" + indexName : "Sub-workflow"+indexName+" for " + name);
+//        String targetString = target==null ? null : target.toString();
+//        if (targetString!=null && targetString.length()<60 && !Strings.isMultiLine(targetString)) name += " ("+targetString+")";
+//        return name;
+
+        // now:
+        String name = getName();
+        if (Strings.isBlank(name) || name.length()>30) name = getStepTypeName();
+        String targetString = target==null ? null :
+                (target instanceof BrooklynObject) ? ((BrooklynObject)target).getDisplayName()
+                : target.toString();
+        if (targetIndexOrNullIfNotList!=null) {
+            name = name + " ("+(targetIndexOrNullIfNotList+1)+")";
+        }
+        if (targetString!=null && targetString.length()<30) {
+            name = name + ": "+targetString;
+        } else if (targetIndexOrNullIfNotList==null) {
+            // need to say something to distinguish from parent
+            name = name + " (sub-workflow)";
+        }
+        return name;
     }
 
     @Override
@@ -572,14 +601,10 @@
         return typeBestGuess!=null && !shorthandDefault.equals(typeBestGuess) && !clazz.getName().equals(typeBestGuess);
     }
 
-    protected WorkflowExecutionContext newWorkflow(WorkflowStepInstanceExecutionContext context, Object target, Integer targetIndexOrNull) {
+    protected WorkflowExecutionContext newWorkflow(WorkflowStepInstanceExecutionContext context, Object target, Integer targetIndexOrNullIfNotList) {
         if (steps==null) throw new IllegalArgumentException("Cannot make new workflow with no steps");
 
-        String indexName = targetIndexOrNull==null ? "" : " "+(targetIndexOrNull+1);
-        String name = getNameOrDefault(null);
-        name = (name == null ? "Sub-workflow" + indexName : "Sub-workflow"+indexName+" for " + name);
-        String targetString = target==null ? null : target.toString();
-        if (targetString!=null && targetString.length()<60 && !Strings.isMultiLine(targetString)) name += " ("+targetString+")";
+        String name = getSubworkflowName(target, targetIndexOrNullIfNotList);
 
         WorkflowExecutionContext nestedWorkflowContext = WorkflowExecutionContext.newInstanceUnpersistedWithParent(
                 target instanceof BrooklynObject ? (BrooklynObject) target : context.getEntity(), context.getWorkflowExectionContext(),
@@ -590,7 +615,7 @@
 
 
         String tivn = context.resolve(WorkflowExpressionResolution.WorkflowExpressionStage.STEP_INPUT, target_index_var_name, String.class);
-        if (targetIndexOrNull!=null) nestedWorkflowContext.updateWorkflowScratchVariable(tivn == null ? TARGET_INDEX_VAR_NAME_DEFAULT : tivn, targetIndexOrNull);
+        if (targetIndexOrNullIfNotList!=null) nestedWorkflowContext.updateWorkflowScratchVariable(tivn == null ? TARGET_INDEX_VAR_NAME_DEFAULT : tivn, targetIndexOrNullIfNotList);
         initializeSubWorkflowForTarget(context, target, nestedWorkflowContext);
 
         return nestedWorkflowContext;
