diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
index 978f6cf..de8b7ee 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
@@ -64,6 +64,8 @@
 
 	public static String JSFLibraryConfigControl_NewImplementationLibrary;
 
+	public static String JSFLibraryConfigControl_NullProject;
+
 	public static String JSFLibraryConfigControl_Remove;
 
 	public static String JSFLibraryConfigControl_RemoveAll;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java
index a386dc1..60d7725 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java
@@ -17,9 +17,7 @@
 import java.util.Vector;
 
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
@@ -101,16 +99,27 @@
 	 * Create the composite
 	 * @param parent
 	 * @param style
-	 * @param IProject
 	 */	
-	public JSFLibraryConfigControl(Composite parent, int style, IProject fProject) {
-		super(parent, style);	
-				
-		this.provider = new JSFLibraryConfigModelAdapter(fProject);
-		
-		initControls();
+	public JSFLibraryConfigControl(Composite parent, int style) {
+		super(parent, style);
+	
+		createControls();
 	}	
-
+	
+	/**
+	 * To initialize control valaues from a model instanciated w/ a project.
+	 * 
+	 * @param project
+	 */
+	public void initControlsValues(IProject project) {
+		if (project != null) {
+			provider = new JSFLibraryConfigModelAdapter(project);		
+			initializeControlValues();
+		} else {
+			JSFUiPlugin.log(IStatus.ERROR, Messages.JSFLibraryConfigControl_NullProject);
+		}
+	}	
+	
 	/**
 	 * Return the working model.
 	 * 
@@ -201,9 +210,8 @@
 		}
 		return selJSFImpl;		
 	}
-	
-	private void initControls() {
-		
+
+	private void createControls() {
 		setRedraw(true);
 		final GridLayout gridLayout = new GridLayout();
 		gridLayout.numColumns = 4;
@@ -409,7 +417,6 @@
 			}
 		});
 		
-		//initializeControlValues();
 		btnAdd.addMouseListener(new MouseAdapter() {
 			public void mouseDown(MouseEvent e) {
 				resetComponentLibSelection((StructuredSelection)tvCompLib.getSelection(), 
@@ -436,8 +443,7 @@
 				resetCompontLibSelectionAll(tvCompLib, ctvSelCompLib, false);
 			}
 		});
-		
-		initializeControlValues();
+			
 	}
 
 	/*
@@ -722,5 +728,5 @@
 		public void removeListener(ILabelProviderListener listener) {
 		}
 	}
-
+	
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryPropertyPage.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryPropertyPage.java
index c169c23..6c905d4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryPropertyPage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryPropertyPage.java
@@ -49,7 +49,7 @@
 	 */
 	public void setElement(IAdaptable element) {
 		super.setElement(element);
-		project= (IProject) element.getAdapter(IResource.class);
+		project = (IProject) element.getAdapter(IResource.class);
 	}	
 	
 	/* (non-Javadoc)
@@ -81,7 +81,8 @@
 	}
 
 	private Control createForJSFProject(Composite parent) {		 
-		jsfLibCfgControl = new JSFLibraryConfigControl(parent, SWT.NULL, project);
+		jsfLibCfgControl = new JSFLibraryConfigControl(parent, SWT.NULL);
+		jsfLibCfgControl.initControlsValues(project);
 				
 		jsfLibCfgControl.addOkClickedListener(new IJSFImplLibraryCreationListener() {			
 			public void okClicked(JSFImplLibraryCreationEvent event) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties
index ef90567..8ea0fff 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties
@@ -73,6 +73,7 @@
 JSFLibraryConfigControl_RemoveAll=\ \ <<  
 JSFLibraryConfigControl_NewComponentLibrary=New...
 JSFLibraryConfigControl_TH_Deploy=Deploy
+JSFLibraryConfigControl_NullProject=No project specified.
 JSFLibraryConfigControl_TH_LibraryName=Library Name
 
 JSFValidationPreferencePage_ELPrefPanel_Title=Expression Language (EL) Validation
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java
index d03a3d2..a760ac3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java
@@ -80,7 +80,7 @@
 	private JSFLibraryConfigControl jsfLibCfgComp = null;
 	private String projectName = null;
 	private Composite composite = null;	
-	
+		
 	/**
 	 * Zero argument constructor
 	 */
@@ -107,10 +107,9 @@
 		lblJSFImpl.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false));
 		lblJSFImpl.setText(Messages.JSFFacetInstallPage_JSFLibraryLabel0);
 		
-		((GridLayout)composite.getLayout()).marginLeft = 0;		
-		IProject project = getProjectHandle();
-		jsfLibCfgComp = new JSFLibraryConfigControl(composite, SWT.NONE, project);
-				
+		((GridLayout)composite.getLayout()).marginLeft = 0;
+		
+		jsfLibCfgComp = new JSFLibraryConfigControl(composite, SWT.NONE);
 		jsfLibCfgComp.addOkClickedListener(new IJSFImplLibraryCreationListener() {
 			public void okClicked(JSFImplLibraryCreationEvent event) {
 				if (((JSFImplLibraryCreationEvent) event).isLibraryCreated()) {
@@ -394,7 +393,7 @@
 	public void propertyChanged(DataModelEvent event) {
 		if (webAppDataModel != null){
 			String propertyName = event.getPropertyName();
-			if (propertyName.equals(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER)){
+			if (propertyName.equals(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER)) {
 				model.setStringProperty(WEBCONTENT_DIR, event.getProperty().toString());
 			}
 		}
@@ -406,14 +405,26 @@
 			webAppDataModel.removeListener(this);
 		super.dispose();
 	}
+	
 	protected void restoreDefaultSettings() {
 		initializeValues();
 	}
 	
+	/**
+	 * (non-Javadoc)
+	 * @see org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage#updateControls()
+	 */
+	protected void updateControls() {
+		projectName = model.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.FACET_PROJECT_NAME);
+		IProject project = getProjectHandle();
+		jsfLibCfgComp.initControlsValues(project);
+	}		
+	
 	private IProject getProjectHandle() {
-		if (projectName != null) {
+		if (projectName != null && projectName.length() > 0) {
 			return ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
 		}
 		return null;
-	}	
+	}
+		
 }
