Index: Shell.c
===================================================================
--- Shell.c	(revision 14975)
+++ Shell.c	(working copy)
@@ -1589,6 +1589,36 @@
 }
 
 /**
+**/
+EFI_STATUS
+EFIAPI
+ProcessNewSplitCommandLine(
+  IN CONST CHAR16 *CmdLine
+  )
+{
+  SPLIT_LIST                *Split;
+  EFI_STATUS                Status;
+
+  Split = NULL;
+
+  //
+  // are we in an existing split???
+  //
+  if (!IsListEmpty(&ShellInfoObject.SplitList.Link)) {
+    Split = (SPLIT_LIST*)GetFirstNode(&ShellInfoObject.SplitList.Link);
+  }
+
+  if (Split == NULL) {
+    Status = RunSplitCommand(CmdLine, NULL, NULL);
+  } else {
+    Status = RunSplitCommand(CmdLine, Split->SplitStdIn, Split->SplitStdOut);
+  }
+  if (EFI_ERROR(Status)) {
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SHELL_INVALID_SPLIT), ShellInfoObject.HiiHandle, CmdLine);
+  }
+  return (Status);
+}
+/**
   Function will process and run a command line.
 
   This will determine if the command line represents an internal shell 
@@ -1624,7 +1654,6 @@
   UINTN                     Count;
   UINTN                     Count2;
   CHAR16                    *CleanOriginal;
-  SPLIT_LIST                *Split;
 
   ASSERT(CmdLine != NULL);
   if (StrLen(CmdLine) == 0) {
@@ -1636,7 +1665,6 @@
   DevPath             = NULL;
   Status              = EFI_SUCCESS;
   CleanOriginal       = NULL;
-  Split               = NULL;
 
   CleanOriginal = StrnCatGrow(&CleanOriginal, NULL, CmdLine, 0);
   if (CleanOriginal == NULL) {
@@ -1672,21 +1700,7 @@
   // We dont do normal processing with a split command line (output from one command input to another)
   //
   if (ContainsSplit(CleanOriginal)) {
-    //
-    // are we in an existing split???
-    //
-    if (!IsListEmpty(&ShellInfoObject.SplitList.Link)) {
-      Split = (SPLIT_LIST*)GetFirstNode(&ShellInfoObject.SplitList.Link);
-    }
-
-    if (Split == NULL) {
-      Status = RunSplitCommand(CleanOriginal, NULL, NULL);
-    } else {
-      Status = RunSplitCommand(CleanOriginal, Split->SplitStdIn, Split->SplitStdOut);
-    }
-    if (EFI_ERROR(Status)) {
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SHELL_INVALID_SPLIT), ShellInfoObject.HiiHandle, CleanOriginal);
-    }
+    Status = ProcessNewSplitCommandLine(CleanOriginal);
   } else {
 
     //
@@ -1852,6 +1866,7 @@
         Status = EFI_SUCCESS;
       }
     }
+    SHELL_FREE_NON_NULL(FirstParameter);
   }
 
   SHELL_FREE_NON_NULL(CommandName);
