Index: jbossui/org/jboss/ide/eclipse/as/ui/editor/ModuleDeploymentPage.java
===================================================================
--- jbossui/org/jboss/ide/eclipse/as/ui/editor/ModuleDeploymentPage.java	(revision 31081)
+++ jbossui/org/jboss/ide/eclipse/as/ui/editor/ModuleDeploymentPage.java	(working copy)
@@ -43,7 +43,6 @@
 
 public class ModuleDeploymentPage extends ServerEditorPart {
 	protected ServerResourceCommandManager commandManager;
-	protected ArrayList<IModule> possibleModules;
 	protected DeploymentPreferences preferences;
 	protected ServerAttributeHelper helper; 
 	protected DeploymentModuleOptionCompositeAssistant tab;
@@ -60,10 +59,6 @@
 		return helper;
 	}
 
-	public IModule[] getPossibleModules() {
-		return (IModule[]) possibleModules.toArray(new IModule[possibleModules.size()]);
-	}
-	
 	public FormToolkit getFormToolkit(Composite parent) {
 		return getFormToolkit(parent.getDisplay());
 	}
@@ -74,7 +69,6 @@
 	
 	public void init(IEditorSite site, IEditorInput input) {
 		super.init(site, input);
-		refreshPossibleModules();
 		if (input instanceof IServerEditorPartInput) {
 			IServerEditorPartInput sepi = (IServerEditorPartInput) input;
 			server = sepi.getServer();
@@ -84,21 +78,6 @@
 		helper = new ServerAttributeHelper(server.getOriginal(), server);
 	}
 	
-	public void refreshPossibleModules() {
-		ArrayList<IModule> possibleChildren = new ArrayList<IModule>();
-		IModule[] modules2 = org.eclipse.wst.server.core.ServerUtil.getModules(server.getServerType().getRuntimeType().getModuleTypes());
-		if (modules2 != null) {
-			int size = modules2.length;
-			for (int i = 0; i < size; i++) {
-				IModule module = modules2[i];
-				IStatus status = server.canModifyModules(new IModule[] { module }, null, null);
-				if (status != null && status.getSeverity() != IStatus.ERROR)
-					possibleChildren.add(module);
-			}
-		}
-		this.possibleModules = possibleChildren;
-	}
-
 	public void createPartControl(Composite parent) {
 		preferences = DeploymentPreferenceLoader.loadPreferencesFromServer(server.getOriginal());
 		ScrolledForm innerContent = createPageStructure(parent);
Index: jbossui/org/jboss/ide/eclipse/as/ui/editor/DeploymentModuleOptionCompositeAssistant.java
===================================================================
--- jbossui/org/jboss/ide/eclipse/as/ui/editor/DeploymentModuleOptionCompositeAssistant.java	(revision 31101)
+++ jbossui/org/jboss/ide/eclipse/as/ui/editor/DeploymentModuleOptionCompositeAssistant.java	(working copy)
@@ -13,10 +13,18 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.io.File;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jface.viewers.ICellModifier;
 import org.eclipse.jface.viewers.ILabelProvider;
@@ -27,6 +35,8 @@
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionEvent;
@@ -42,7 +52,6 @@
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.DirectoryDialog;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.TreeColumn;
@@ -51,6 +60,7 @@
 import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.progress.UIJob;
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IRuntime;
 import org.eclipse.wst.server.core.IServerWorkingCopy;
@@ -623,35 +633,69 @@
 		viewer.setCellModifier(new LocalDeploymentCellModifier());
 		viewer.setCellEditors(editors);
 		
-		Link link = new Link(root, SWT.DEFAULT);
-		link.setText("<a>" + Messages.EditorRefreshViewer + "</a>");
-		link.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				refreshViewer();
-			}
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-		});
-		FormData linkData = new FormData();
-		linkData.bottom = new FormAttachment(100,-5);
-		linkData.left = new FormAttachment(0, 5);
-		link.setLayoutData(linkData);
-		
 		FormData treeData = new FormData();
 		treeData.top = new FormAttachment(0, 5);
-		treeData.bottom = new FormAttachment(link, -5);
+		treeData.bottom = new FormAttachment(100, -5);
 		treeData.left = new FormAttachment(0, 5);
 		treeData.right = new FormAttachment(100, -5);
 		viewer.getTree().setLayoutData(treeData);
 
+		initWorkspaceChangeListener(root);
+		
 		return root;
 	}
-
-	private void refreshViewer() {
-		page.refreshPossibleModules();
-		viewer.setInput(""); // irrelevent		
+	
+	private void initWorkspaceChangeListener(Composite composite) {
+			final IResourceChangeListener workspaceChangeListener = onWorkspaceChanged();
+			ResourcesPlugin.getWorkspace().addResourceChangeListener(workspaceChangeListener);
+			composite.addDisposeListener(new DisposeListener() {
+				
+				@Override
+				public void widgetDisposed(DisposeEvent e) {
+				ResourcesPlugin.getWorkspace().removeResourceChangeListener(workspaceChangeListener);
+			}
+		});
 	}
 	
+	
+	private IResourceChangeListener onWorkspaceChanged() {
+	return new IResourceChangeListener() {
+			
+			@Override
+			public void resourceChanged(final IResourceChangeEvent event) {
+				new UIJob("refreshing available deployments") {
+					
+					@Override
+					public IStatus runInUIThread(IProgressMonitor monitor) {
+						viewer.refresh();
+						return Status.OK_STATUS;
+					}
+				}.schedule();
+			}
+		};
+	}
+			
+	public IModule[] getPossibleModules() {
+		IServerWorkingCopy server = getPage().getServer();
+		List<IModule> possibleChildren = new ArrayList<IModule>();
+		IModule[] modules2 = org.eclipse.wst.server.core.ServerUtil.getModules(server.getServerType().getRuntimeType()
+				.getModuleTypes());
+		if (modules2 != null) {
+			int size = modules2.length;
+			for (int i = 0; i < size; i++) {
+				IModule module = modules2[i];
+				IStatus status = server.canModifyModules(new IModule[] { module }, null, null);
+				if (status != null 
+						&& status.getSeverity() != IStatus.ERROR
+						&& module.getProject().isAccessible()) {
+					possibleChildren.add(module);
+				}
+			}
+		}
+		return possibleChildren.toArray(new IModule[possibleChildren.size()]);
+	}
+	
+		
 	private class LocalDeploymentCellModifier implements ICellModifier {
 		public boolean canModify(Object element, String property) {
 			if( property == COLUMN_NAME)
@@ -702,7 +746,7 @@
 		}
 
 		public Object[] getElements(Object inputElement) {
-			return page.getPossibleModules();
+			return getPossibleModules();
 		}
 
 		public boolean hasChildren(Object element) {
