diff --git a/bundles/org.eclipse.wst.xsl.launching/src/org/eclipse/wst/xsl/internal/launching/XSLTLaunchConfigurationDelegate.java b/bundles/org.eclipse.wst.xsl.launching/src/org/eclipse/wst/xsl/internal/launching/XSLTLaunchConfigurationDelegate.java
index f4e3fd1..1e13510 100644
--- a/bundles/org.eclipse.wst.xsl.launching/src/org/eclipse/wst/xsl/internal/launching/XSLTLaunchConfigurationDelegate.java
+++ b/bundles/org.eclipse.wst.xsl.launching/src/org/eclipse/wst/xsl/internal/launching/XSLTLaunchConfigurationDelegate.java
@@ -77,34 +77,37 @@
 		
 		public void handleDebugEvents(DebugEvent[] events)
 		{
-			for (DebugEvent debugEvent : events)
+			if (launch.getProcesses().length > 0)
 			{
-				if (debugEvent.getSource() == launch.getProcesses()[0] && debugEvent.getKind() == DebugEvent.TERMINATE)
+				for (DebugEvent debugEvent : events)
 				{
-					// remove self as listener
-					DebugPlugin.getDefault().removeDebugEventListener(this);
-					File file = launchHelper.getTarget();
-					IFile ifile = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(file.getAbsolutePath()));
-					if (ifile != null)
-					{// refresh this workspace file..
-						try
-						{
-							ifile.refreshLocal(IResource.DEPTH_ZERO, new NullProgressMonitor(){
-								@Override
-								public void done()
-								{
-									openFileIfRequired();
-								}
-							});
-						}
-						catch (CoreException e)
-						{
-							LaunchingPlugin.log(e);
-						}
-					}
-					else
+					if (debugEvent.getSource() == launch.getProcesses()[0] && debugEvent.getKind() == DebugEvent.TERMINATE)
 					{
-						openFileIfRequired();
+						// remove self as listener
+						DebugPlugin.getDefault().removeDebugEventListener(this);
+						File file = launchHelper.getTarget();
+						IFile ifile = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(file.getAbsolutePath()));
+						if (ifile != null)
+						{// refresh this workspace file..
+							try
+							{
+								ifile.refreshLocal(IResource.DEPTH_ZERO, new NullProgressMonitor(){
+									@Override
+									public void done()
+									{
+										openFileIfRequired();
+									}
+								});
+							}
+							catch (CoreException e)
+							{
+								LaunchingPlugin.log(e);
+							}
+						}
+						else
+						{
+							openFileIfRequired();
+						}
 					}
 				}
 			}
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xml/internal/perspective/XMLPerspectiveFactory.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xml/internal/perspective/XMLPerspectiveFactory.java
index 150a103..4f094c7 100644
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xml/internal/perspective/XMLPerspectiveFactory.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xml/internal/perspective/XMLPerspectiveFactory.java
@@ -45,6 +45,7 @@
 		// Add Outline to the bottom-left
 		IFolderLayout bottomLeft = 
 			layout.createFolder("bottom-left", IPageLayout.BOTTOM, (float) 0.50, "left");
+		bottomLeft.addView("org.eclipse.wst.xml.views.XPathView");
 		bottomLeft.addView("org.eclipse.wst.xml.xpath.ui.views.XPathNavigator");
 		
 		IFolderLayout bottom = layout.createFolder("bottom", IPageLayout.BOTTOM, (float) 0.75, editorArea);
@@ -71,7 +72,7 @@
         layout.addShowViewShortcut(IPageLayout.ID_OUTLINE);
         layout.addShowViewShortcut(IPageLayout.ID_PROBLEM_VIEW);
         layout.addShowViewShortcut(IConsoleConstants.ID_CONSOLE_VIEW);
-        layout.addShowViewShortcut(" org.eclipse.wst.common.snippets.internal.ui.SnippetsView");
+        layout.addShowViewShortcut("org.eclipse.wst.common.snippets.internal.ui.SnippetsView");
 	}
 	
 	private void addShortCutPerspective(IPageLayout layout) {
