diff --git a/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html b/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html
index b11e999..0cdf9af 100644
--- a/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html
+++ b/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html
@@ -4,17 +4,16 @@
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta name="Build" content="Build">
-   <title>WTP 3.2.2 Patches</title>
+   <title>WTP 3.2.5 Patches</title>
 </head>
 
 <body>
 
-<h1>WTP 3.2.2 Patches</h1>
+<h1>WTP 3.2.5 Patches</h1>
 
 <h2>Feature Patched: org.eclipse.wst.server_ui.feature</h2>
 <h3>Plugin(s) replaced:</h3>
 <ul><li>org.eclipse.wst.server.ui</li></ul>
-<p>Bug <a href='https://bugs.eclipse.org/326318'>326318</a>. Sever never shows publishing state and in sync state prematurely</p>
-<p>Bug <a href='https://bugs.eclipse.org/327247'>327247</a>. Deadlock during debugging</p>
+<p>Bug <a href='https://bugs.eclipse.org/368778'>368778</a>. Empty Servers View Default Message (Patch included)</p>
 
 </body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.server_ui.feature.patch/feature.properties b/features/org.eclipse.wst.server_ui.feature.patch/feature.properties
index 00695d2..c58d1b0 100644
--- a/features/org.eclipse.wst.server_ui.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.server_ui.feature.patch/feature.properties
@@ -27,8 +27,7 @@
 description=\
 Contains fixes described in the following bugzilla(s):\n\
 \n\
-Bug https://bugs.eclipse.org/326318 Sever never shows publishing state and in sync state prematurely\n\
-Bug https://bugs.eclipse.org/327247 Deadlock during debugging\n\
+Bug https://bugs.eclipse.org/368778 Empty Servers View Default Message (Patch included)\n\
 \n\
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
diff --git a/features/org.eclipse.wst.server_ui.feature.patch/feature.xml b/features/org.eclipse.wst.server_ui.feature.patch/feature.xml
index 948172a..75c07a4 100644
--- a/features/org.eclipse.wst.server_ui.feature.patch/feature.xml
+++ b/features/org.eclipse.wst.server_ui.feature.patch/feature.xml
@@ -1,18 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <feature
       id="org.eclipse.wst.server_ui.feature.patch"
-    label="%featureName"
-    version="3.2.2.qualifier"
-    provider-name="%providerName">
+      label="%featureName"
+      version="3.2.5.qualifier"
+      provider-name="%providerName">
 
-    <description>%description</description>
+   <description>
+      %description
+   </description>
 
-    <copyright>%copyright</copyright>
+   <copyright>
+      %copyright
+   </copyright>
 
-    <license url="%licenseURL">%license</license>
+   <license url="%licenseURL">
+      %license
+   </license>
 
    <requires>
-      <import feature="org.eclipse.wst.server_ui.feature" version="3.2.2.v20100908-7B4FBrAtJb1nESKmCJHPGQ347" patch="true"/>
+      <import feature="org.eclipse.wst.server_ui.feature" version="3.2.5.v20110706-7B4FDjAtJcbvFLNiPIYMRMjBF56" patch="true"/>
    </requires>
 
    <plugin
diff --git a/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
index 64f94fd..119ee0f 100644
--- a/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.server.ui; singleton:=true
-Bundle-Version: 1.1.209.qualifier
+Bundle-Version: 1.1.210.qualifier
 Bundle-Activator: org.eclipse.wst.server.ui.internal.ServerUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
index 2665029..f29fe0f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
@@ -363,6 +363,8 @@
 
 	public static String internalWebBrowserName;
 
+	public static String ServersView2_noServers;
+
 	static {
 		NLS.initializeMessages(ServerUIPlugin.PLUGIN_ID + ".internal.Messages", Messages.class);
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
index fae6d5e..d4148fe 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
@@ -510,3 +510,4 @@
 errorStartingMonitor=Could not start the server monitor: {0}
 
 internalWebBrowserName=Internal Web Browser
+ServersView2_noServers=No servers available. Define a new server from the <a>new server wizard</a>...
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
index f563b65..9d3460f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
@@ -20,12 +20,21 @@
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.runtime.jobs.JobChangeAdapter;
 import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
 import org.eclipse.ui.contexts.IContextService;
+import org.eclipse.ui.forms.widgets.Form;
+import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.navigator.CommonNavigator;
 import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.part.PageBook;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.Server;
 import org.eclipse.wst.server.core.internal.UpdateServerJob;
@@ -33,6 +42,7 @@
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.ServerToolTip;
 import org.eclipse.wst.server.ui.internal.Trace;
+import org.eclipse.wst.server.ui.internal.wizard.NewServerWizard;
 /**
  * A view of servers, their modules, and status.
  */
@@ -40,6 +50,9 @@
 	private static final String SERVERS_VIEW_CONTEXT = "org.eclipse.ui.serverViewScope";
 	
 	protected CommonViewer tableViewer;
+	private Control mainPage;
+	private Control noServersPage;
+	PageBook book;
 	
 	protected IServerLifecycleListener serverResourceListener;
 	protected IPublishListener publishListener;
@@ -60,14 +73,63 @@
 
 	@Override
 	public void createPartControl(Composite parent) {
-		super.createPartControl(parent);
+		// Add PageBook as parent composite
+		FormToolkit toolkit = new FormToolkit(parent.getDisplay());
+		book = new PageBook(parent, SWT.NONE);
+		super.createPartControl(book);
+		// Main page for the Servers tableViewer
+		mainPage = getCommonViewer().getControl();
+		// Page prompting to define a new server
+		noServersPage = createDefaultPage(toolkit); 
+		book.showPage(mainPage);
 
 		IContextService contextSupport = (IContextService)getSite().getService(IContextService.class);
 		contextSupport.activateContext(SERVERS_VIEW_CONTEXT);
-
 		deferInitialization();
 	}
 
+	/**
+	 * Creates a page displayed when there are no servers defined.
+	 * 
+	 * @param kit
+	 * @return Control
+	 */
+	private Control createDefaultPage(FormToolkit kit){
+		Form form = kit.createForm(book);
+		Composite body = form.getBody();
+    GridLayout layout = new GridLayout(2, false);
+    body.setLayout(layout);
+    
+		Link hlink = new Link(body, SWT.NONE);
+		hlink.setText(Messages.ServersView2_noServers); 
+		hlink.setBackground(book.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+		GridData gd = new GridData(SWT.LEFT, SWT.FILL, true, false);
+		hlink.setLayoutData(gd);
+		hlink.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				NewServerWizard wizard = new NewServerWizard();
+				WizardDialog wd = new WizardDialog(book.getShell(), wizard);
+				if( wd.open() == Window.OK){
+					toggleDefultPage();
+				}
+			}
+		});
+		
+		return form;
+	}
+	
+	/**
+	 * Switch between the servers and default/empty page. 
+	 * 
+	 */
+	void toggleDefultPage(){
+		if(tableViewer.getTree().getItemCount() < 1){
+			book.showPage(noServersPage);
+		} else{
+			book.showPage(mainPage);
+		}
+	}
+
 	private void deferInitialization() {
 		// TODO Angel Says: Need to do a final check on this line below. I don't think there is anything else
 		// that we need from to port from the old Servers View
@@ -121,6 +183,8 @@
 						if (tableViewer.getTree().getItemCount() > 0) {
 							Object obj = tableViewer.getTree().getItem(0).getData();
 							tableViewer.setSelection(new StructuredSelection(obj));
+						} else{
+							toggleDefultPage();
 						}
 					}
 				});
@@ -267,6 +331,7 @@
 		Display.getDefault().asyncExec(new Runnable() {
 			public void run() {
 				tableViewer.add(tableViewer.getInput(), server);
+				toggleDefultPage();
 			}
 		});
 	}
@@ -275,6 +340,7 @@
 		Display.getDefault().asyncExec(new Runnable() {
 			public void run() {
 				tableViewer.remove(server);
+				toggleDefultPage();
 			}
 		});
 	}
