diff --git a/Commands/InterviewTemplateCommands.cs b/Commands/InterviewTemplateCommands.cs
index 93897ce..336f93b 100644
--- a/Commands/InterviewTemplateCommands.cs
+++ b/Commands/InterviewTemplateCommands.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.IO;
+using System.Linq;
 using System.Net.Http;
 using System.Text;
 using System.Threading.Tasks;
@@ -132,14 +133,19 @@ public class InterviewTemplateCommands
                 return;
             }
 
-            //TODO: Validate that any references with reference end steps have an after reference step
-
             List<string> errors = [];
             List<string> warnings = [];
-            template.interview.Validate(ref errors, ref warnings, "interview", template.definitions, 0, 0);
+            template.interview.Validate(ref errors, ref warnings, "interview", template.definitions);
             foreach (KeyValuePair<string, InterviewStep> definition in template.definitions)
             {
-                definition.Value.Validate(ref errors, ref warnings, "definitions." + definition.Key, template.definitions, 0, 0);
+                definition.Value.Validate(ref errors, ref warnings, "definitions." + definition.Key, template.definitions);
+            }
+
+            List<InterviewStep> allSteps = new();
+            template.interview.GetAllSteps(ref allSteps);
+            if (allSteps.Any(s => s.stepType is StepType.REFERENCE_END))
+            {
+                errors.Add("The normal interview tree cannot contain any steps of the 'REFERENCE_END' type, these are only allowed in the 'definitions'.");
             }
 
             if (errors.Count != 0)
diff --git a/Interviews/Interview.cs b/Interviews/Interview.cs
index 4addb80..6ecd0c8 100644
--- a/Interviews/Interview.cs
+++ b/Interviews/Interview.cs
@@ -263,7 +263,7 @@ public class InterviewStep
     }
 
     // Gets all steps in the interview tree, including after-reference-steps but not referenced steps
-    private void GetAllSteps(ref List<InterviewStep> allSteps)
+    public void GetAllSteps(ref List<InterviewStep> allSteps)
     {
         allSteps.Add(this);
         foreach (KeyValuePair<string, InterviewStep> step in steps)
@@ -281,42 +281,8 @@ public class InterviewStep
                          ref List<string> warnings,
                          string stepID,
                          Dictionary<string, InterviewStep> definitions,
-                         int summaryFieldCount = 0,
-                         int summaryMaxLength = 0,
                          InterviewStep parent = null)
     {
-        if (!string.IsNullOrWhiteSpace(summaryField))
-        {
-            ++summaryFieldCount;
-            summaryMaxLength += summaryField.Length;
-            switch (stepType)
-            {
-                case StepType.BUTTONS:
-                case StepType.TEXT_SELECTOR:
-                    // Get the longest button/selector text
-                    if (steps.Count > 0)
-                    {
-                        summaryMaxLength += steps.Max(kv => kv.Key.Length);
-                    }
-                    break;
-                case StepType.USER_SELECTOR:
-                case StepType.ROLE_SELECTOR:
-                case StepType.MENTIONABLE_SELECTOR:
-                case StepType.CHANNEL_SELECTOR:
-                    // Approximate length of a mention
-                    summaryMaxLength += 23;
-                    break;
-                case StepType.TEXT_INPUT:
-                    summaryMaxLength += Math.Min(maxLength ?? 1024, 1024);
-                    break;
-                case StepType.INTERVIEW_END:
-                case StepType.ERROR:
-                case StepType.REFERENCE_END:
-                default:
-                    break;
-            }
-        }
-
         if (answerDelimiter != null && string.IsNullOrWhiteSpace(summaryField))
         {
             warnings.Add("An answer-delimiter has no effect without a summary-field.\n\n> " + stepID + ".answer-delimiter");
@@ -372,21 +338,6 @@ public class InterviewStep
             }
         }
 
-        if (addSummary ?? false)
-        {
-            summaryMaxLength += message?.Length ?? 0;
-            summaryMaxLength += heading?.Length ?? 0;
-            if (summaryFieldCount > 25)
-            {
-                errors.Add("A summary cannot contain more than 25 fields, but you have " + summaryFieldCount + " fields in this branch.\n\n> " + stepID);
-            }
-            else if (summaryMaxLength >= 6000)
-            {
-                warnings.Add("A summary cannot contain more than 6000 characters, but this branch may reach " + summaryMaxLength + " characters.\n" +
-                             "Use the \"max-length\" parameter to limit text input field lengths, or shorten other parts of the summary message.\n\n> " + stepID);
-            }
-        }
-
         if (parent?.stepType is not StepType.BUTTONS && buttonStyle != null)
         {
             warnings.Add("Button styles have no effect on child steps of a '" + parent?.stepType + "' step.\n\n> " + stepID + ".button-style");
@@ -414,7 +365,7 @@ public class InterviewStep
 
         foreach (KeyValuePair<string, InterviewStep> step in steps)
         {
-            step.Value.Validate(ref errors, ref warnings, FormatJSONKey(stepID + ".steps", step.Key), definitions, summaryFieldCount, summaryMaxLength, this);
+            step.Value.Validate(ref errors, ref warnings, FormatJSONKey(stepID + ".steps", step.Key), definitions, this);
         }
     }