Index: src/main/com/jboss/jbds/product/Messages.java
===================================================================
--- src/main/com/jboss/jbds/product/Messages.java	(revision 0)
+++ src/main/com/jboss/jbds/product/Messages.java	(revision 0)
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/ 
+
+package com.jboss.jbds.product;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+	private static final String BUNDLE_NAME = "com.jboss.jbds.product.messages"; //$NON-NLS-1$
+
+	public static String INTRO_PERSPECTIVE_NOT_FOUND;
+
+	private Messages() {
+	}
+
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+}
Index: src/main/com/jboss/jbds/product/messages.properties
===================================================================
--- src/main/com/jboss/jbds/product/messages.properties	(revision 0)
+++ src/main/com/jboss/jbds/product/messages.properties	(revision 0)
@@ -0,0 +1 @@
+INTRO_PERSPECTIVE_NOT_FOUND=Couldn''t find a perspective for ID: {0}
\ No newline at end of file
Index: src/main/com/jboss/jbds/product/Activator.java
===================================================================
--- src/main/com/jboss/jbds/product/Activator.java	(revision 7439)
+++ src/main/com/jboss/jbds/product/Activator.java	(working copy)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 Red Hat, Inc.
+ * Copyright (c) 2007-2011 Red Hat, Inc.
  * Distributed under license by Red Hat, Inc. All rights reserved.
  * This program is made available under the terms of the
  * Eclipse Public License v1.0 which accompanies this distribution,
@@ -42,4 +42,15 @@
 			// Ignore
 		}
 	}
+	
+	public static void logError(String pluginId, String error) {
+		try {
+			IStatus status = new Status(IStatus.INFO, pluginId,
+					0, error , null);
+			Bundle bundle = Platform.getBundle(pluginId);
+			Platform.getLog(bundle).log(status);
+		} catch (Throwable x) {
+			// Ignore
+		}
+	}
 }
Index: src/main/com/jboss/jbds/product/intro/action/OpenPerspectiveIntroURLAction.java
===================================================================
--- src/main/com/jboss/jbds/product/intro/action/OpenPerspectiveIntroURLAction.java	(revision 7439)
+++ src/main/com/jboss/jbds/product/intro/action/OpenPerspectiveIntroURLAction.java	(working copy)
@@ -11,10 +11,12 @@
 
 package com.jboss.jbds.product.intro.action;
 
+import java.text.MessageFormat;
 import java.util.Properties;
 
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.ui.IPerspectiveDescriptor;
 import org.eclipse.ui.IPerspectiveRegistry;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPage;
@@ -24,10 +26,13 @@
 import org.eclipse.ui.internal.IPreferenceConstants;
 import org.eclipse.ui.internal.Workbench;
 import org.eclipse.ui.internal.util.PrefUtil;
+import org.eclipse.ui.intro.IIntroManager;
+import org.eclipse.ui.intro.IIntroPart;
 import org.eclipse.ui.intro.IIntroSite;
 import org.eclipse.ui.intro.config.IIntroAction;
 
 import com.jboss.jbds.product.Activator;
+import com.jboss.jbds.product.Messages;
 
 public class OpenPerspectiveIntroURLAction implements IIntroAction {
     private IWorkbenchWindow workbenchWindow;
@@ -57,7 +62,30 @@
                 								.getActivePage();
                 if (activePage != null) {
             	    IPerspectiveRegistry reg = PlatformUI.getWorkbench().getPerspectiveRegistry();
-                    activePage.setPerspective(reg.findPerspectiveWithId(perspectiveId));
+            	    IPerspectiveDescriptor perspectiveDescr = reg == null ? null : reg.findPerspectiveWithId(perspectiveId);
+            	    IPerspectiveDescriptor activePerspectiveDescr = activePage.getPerspective();
+
+            	    if (perspectiveDescr != null && perspectiveDescr != activePerspectiveDescr) {
+            	    	activePage.setPerspective(perspectiveDescr);
+            	    } else {
+            	    	if (perspectiveDescr == null) {
+	            	    	// Log error in case the target perspective is absent
+	            	    	String errorText = MessageFormat.format(Messages.INTRO_PERSPECTIVE_NOT_FOUND, perspectiveId);
+	            	    	Activator.logError(Activator.PLUGIN_ID, errorText);
+            	    	}
+
+            	    	// If perspective descriptor is null or there is already selected the perspective with id == perspectiveId
+            	    	// then just close Welcome Screen (set the standby mode for the Welcome)
+            			IIntroManager intro = activePage.getWorkbenchWindow().getWorkbench()
+            					.getIntroManager();
+            			IIntroPart part = intro.getIntro();
+            			if (part == null) {
+            				return;
+            			}
+            			if (!intro.isIntroStandby(part)) {
+            				intro.setIntroStandby(part, true);
+            			}
+            	    }
                 } else {
                     try {
                         IWorkbench workbench = getWorkbench();
