[nobug] JS
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizard.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizard.java
index f4242ca..0e920cd 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizard.java
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizard.java
@@ -108,7 +108,7 @@
 			nextPage.setPreviousPage(currentPage);
 		}
 
-		return nextPage;
+		return currentPage == nextPage ? null : nextPage;
 	}
 
 	public String getNextPage(String currentPageName, String expectedNextPageName) {
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroup.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroup.java
index e37b33b..d69edce 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroup.java
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroup.java
@@ -8,6 +8,7 @@
  **************************************************************************************************/
 package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
 
+import java.util.List;
 import java.util.Set;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 
@@ -25,7 +26,7 @@
   
   public Set getDataModelIDs();
   
-  public DataModelWizardPage[] getExtendedPages( IDataModel dataModel );
+  public List getPages(IDataModel dataModel);
   
   public IDMPageHandler getPageHandler( IDataModel dataModel );
   
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/SimplePageGroup.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/SimplePageGroup.java
index de53a55..66154e5 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/SimplePageGroup.java
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/SimplePageGroup.java
@@ -8,6 +8,7 @@
  **************************************************************************************************/
 package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
 
+import java.util.List;
 import java.util.Set;
 import java.util.Vector;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
@@ -65,6 +66,10 @@
 		return pageHandler;
 	}
 
+	public List getPages(IDataModel dataModel) {
+		return pages;
+	}
+	
 	public DataModelWizardPage[] getExtendedPages(IDataModel dataModel) {
 		return (DataModelWizardPage[]) pages.toArray(new DataModelWizardPage[0]);
 	}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DMPageGroupElementImpl.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DMPageGroupElementImpl.java
index 073470d..ac2c0a2 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DMPageGroupElementImpl.java
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DMPageGroupElementImpl.java
@@ -1,9 +1,11 @@
 package org.eclipse.wst.common.frameworks.internal.ui;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Set;
+
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;
 import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroup;
 import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
 import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
@@ -32,10 +34,10 @@
 		return pageElement.createPageGroupHandler(dataModel);
 	}
 
-	public DataModelWizardPage[] getExtendedPages(IDataModel dataModel) {
-		return pageElement.createPageGroup(dataModel);
+	public List getPages(IDataModel dataModel){
+		return Arrays.asList(pageElement.createPageGroup(dataModel));
 	}
-
+	
 	public IDMPageHandler getPageHandler(IDataModel dataModel) {
 		return pageElement.createPageHandler(dataModel);
 	}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/PageGroupManager.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/PageGroupManager.java
index cd525ef..3977217 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/PageGroupManager.java
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/PageGroupManager.java
@@ -11,6 +11,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 import java.util.Stack;
 import java.util.Vector;
@@ -168,7 +169,7 @@
 			StackEntry topEntry = (StackEntry) pageGroupStack.peek();
 			int pageIndex = topEntry.getTopPageIndex();
 
-			page = pageIndex == -1 ? null : topEntry.pageGroupEntry.getPages()[pageIndex];
+			page = pageIndex == -1 ? null : (DataModelWizardPage)topEntry.pageGroupEntry.getPages().get(pageIndex);
 		}
 
 		return page;
@@ -180,9 +181,9 @@
 		if (null == hasMulitplePages) {
 			int pageCount = 0;
 			PageGroupEntry rootEntry = (PageGroupEntry) groupTable.get(rootPageGroup.getPageGroupID());
-			pageCount += rootEntry.getPages().length;
+			pageCount += rootEntry.getPages().size();
 			for (int i = 0; pageCount < 2 && i < rootEntry.groupsThatFollow.size(); i++) {
-				pageCount += ((PageGroupEntry) rootEntry.groupsThatFollow.get(i)).getPages().length;
+				pageCount += ((PageGroupEntry) rootEntry.groupsThatFollow.get(i)).getPages().size();
 			}
 			hasMulitplePages = pageCount > 1 ? Boolean.TRUE : Boolean.FALSE;
 		}
@@ -420,11 +421,11 @@
 			int result = -1;
 
 			if (!pagesComplete) {
-				DataModelWizardPage[] pages = pageGroupEntry.getPages();
+				List pages = pageGroupEntry.getPages();
 
 				int pageIndex = getTopPageIndex();
-				String pageId = pageIndex == -1 ? null : pages[pageIndex].getName();
-				String expectedId = pageIndex + 1 >= pages.length ? null : pages[pageIndex + 1].getName();
+				String pageId = pageIndex == -1 ? null : ((DataModelWizardPage)pages.get(pageIndex)).getName();
+				String expectedId = pageIndex + 1 >= pages.size() ? null : ((DataModelWizardPage)pages.get(pageIndex + 1)).getName();
 				String newPageId = null;
 
 				try {
@@ -433,7 +434,7 @@
 					Logger.getLogger().logError(exc);
 				}
 
-				if (newPageId != null && newPageId.equals(IDMPageHandler.SKIP_PAGE) && pageIndex >= 0 && pageIndex < pages.length - 2) {
+				if (newPageId != null && newPageId.equals(IDMPageHandler.SKIP_PAGE) && pageIndex >= 0 && pageIndex < pages.size() - 2) {
 					result = pageIndex + 2;
 				} else {
 					result = pageGroupEntry.checkForSpecialIds(newPageId);
@@ -489,7 +490,6 @@
 		public Vector groupsThatFollow;
 		private IDMPageHandler pageHandler;
 		private IDMPageGroupHandler pageGroupHandler;
-		private DataModelWizardPage[] pages;
 		private boolean initialized;
 
 		public PageGroupEntry(IDMPageGroup newPageGroup) {
@@ -512,11 +512,11 @@
 			return pageGroupHandler;
 		}
 
-		public DataModelWizardPage[] getPages() {
+		public List getPages() {
 			if (!initialized)
 				init();
 
-			return pages;
+			return pageGroup.getPages(dataModel);
 		}
 
 		public PageGroupEntry(PageGroupEntry originalEntry) {
@@ -524,14 +524,12 @@
 			groupsThatFollow = originalEntry.groupsThatFollow;
 			pageHandler = originalEntry.pageHandler;
 			pageGroupHandler = originalEntry.pageGroupHandler;
-			pages = originalEntry.pages;
 		}
 
 		private void init() {
 			try {
 				pageHandler = pageGroup.getPageHandler(dataModel);
 				pageGroupHandler = pageGroup.getPageGroupHandler(dataModel);
-				pages = pageGroup.getExtendedPages(dataModel);
 			} catch (Throwable exc) {
 				Logger.getLogger().logError(exc);
 			}
@@ -542,26 +540,25 @@
 			if (pageGroupHandler == null)
 				pageGroupHandler = new SimplePageGroupHandler();
 
-			if (pages == null)
-				pages = new DataModelWizardPage[0];
-
 			initialized = true;
 		}
 
 		private int checkForSpecialIds(String pageId) {
 			int result = -1;
 
-			if (pages.length == 0 || pageId == null)
+			List pages = getPages();
+			
+			if (pages.isEmpty() || pageId == null)
 				return -1;
 
 			if (pageId.startsWith(IDMPageHandler.PAGE_AFTER)) {
 				String afterID = pageId.substring(IDMPageHandler.PAGE_AFTER.length(), pageId.length());
 				result = getIndexOf(afterID);
-				result = result >= 0 && result < pages.length - 1 ? result + 1 : -1;
+				result = result >= 0 && result < pages.size() - 1 ? result + 1 : -1;
 			} else if (pageId.startsWith(IDMPageHandler.PAGE_BEFORE)) {
 				String beforeID = pageId.substring(IDMPageHandler.PAGE_BEFORE.length(), pageId.length());
 				result = getIndexOf(beforeID);
-				result = result >= 1 && result < pages.length ? result - 1 : -1;
+				result = result >= 1 && result < pages.size() ? result - 1 : -1;
 			} else {
 				result = getIndexOf(pageId);
 			}
@@ -572,8 +569,9 @@
 		private int getIndexOf(String pageId) {
 			int result = -1;
 
-			for (int index = 0; index < pages.length; index++) {
-				if (pages[index].getName().equals(pageId)) {
+			List pages = getPages();
+			for (int index = 0; index < pages.size(); index++) {
+				if (((DataModelWizardPage)pages.get(index)).getName().equals(pageId)) {
 					result = index;
 					break;
 				}