*** empty log message ***
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/core/IFeature.java b/update/org.eclipse.update.core/src/org/eclipse/update/core/IFeature.java
index e01673b..bbbfbd2 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/core/IFeature.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/core/IFeature.java
@@ -100,7 +100,8 @@
 	 * if there are no discovey info.

 	 * @since 2.0 

 	 */

-

+	//VK: method name: getDiscoveryInfo (singular == plural)

+	

 	IInfo [] getDiscoveryInfos() ;

 	

 	/**

@@ -269,6 +270,15 @@
 	 * @return 

 	 * @since 2.0 

 	 */

+	// VK: I am confused ... pluginEntry, dataEntry, archive

+	// VK: getPluginEntries()

+	// VK: getPluginEntryCount()

+	// VK: addPluginEntry(...)

+	// VK: remove(IPluginEntry)

+	// VK: getDataEntries()

+	// VK: addDataEntry(...)

+	// VK: no count, no remove

+	// VK: getArchives() .... no rest

 	// FIXME: javadoc	

 	IDataEntry[] getDataEntries();

 	

@@ -278,6 +288,7 @@
 	 * @param entry the data entry

 	 * @since 2.0 

 	 */

+	//VK: what is this used for. Why do we not have addArchive as well?

 	

 	void addDataEntry(IDataEntry dataEntry);

 	

diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfigurationPolicy.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfigurationPolicy.java
index a14da8d..d81b174 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfigurationPolicy.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfigurationPolicy.java
@@ -215,7 +215,9 @@
 					IPluginEntry entry = entries[index];

 					String id = entry.getIdentifier().toString();

 					// obtain the path of the plugin directory on teh site	

-					String archiveID = ((Feature)feature).getArchiveID(entry);				

+					String archiveID = ((Feature)feature).getArchiveID(entry);	

+		// VK: any time you need to cast like this it means that any other implementation of

+		// IFeature will not work !!!!			

 					URL url =  ((Site) site).getURL(archiveID);

 					if (url!=null){

 						// make it relative to teh site

diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Feature.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Feature.java
index 00758a4..af1ce85 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Feature.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Feature.java
@@ -16,6 +16,12 @@
  * Abstract Class that implements most of the behavior of a feature

  * A feature ALWAYS belongs to an ISite

  */

+// VK: we need to rework this as an API base class. Also need to rework which methods

+// VK: need to be exposed on IFeature (same comment for Site, ISite)

+// VK: Also, need to be able to poof-up a feature model from XML without having a site,

+// VK: or passing null site (needed in PDE, build code, etc). Need a constructor

+// VK: that takes a stream

+

 public abstract class Feature implements IFeature {

 

 	/**

@@ -232,6 +238,7 @@
 	/**

 	 * @see IFeature#getDiscoveryInfos()

 	 */

+	//VK: method name: getDiscoveryInfo (plural==singular)

 	public IInfo[] getDiscoveryInfos() {

 		IInfo[] result = new IInfo[0];

 		if (discoveryInfos == null && !isInitialized)

@@ -365,6 +372,7 @@
 	 * Sets the discoveryInfos

 	 * @param discoveryInfos The discoveryInfos to set

 	 */

+	//VK: method name: getDiscoveryInfo (plural==singular)

 	public void setDiscoveryInfos(IInfo[] discoveryInfos) {

 		if (discoveryInfos != null) {

 			this.discoveryInfos = (new ArrayList());

@@ -732,6 +740,7 @@
 	/** 

 	 * initialize teh feature by reading the feature.xml if it exists

 	 */

+	// VK: why is this public ???

 	public void initializeFeature() throws CoreException {

 		if (!isInitialized) {

 			isInitialized = true;

@@ -765,6 +774,7 @@
 

 	/**

 	 */

+	// VK: method name ... downloadArchives(...)

 	private void downloadArchivesLocally(ISite tempSite, String[] archiveIDToInstall, IProgressMonitor monitor) throws CoreException, IOException {

 

 		URL sourceURL;

@@ -785,6 +795,7 @@
 			// should be the regular plugins/pluginID_ver as the Temp site is OUR site

 			newFile = Site.DEFAULT_PLUGIN_PATH + archiveIDToInstall[i];

 			newURL = UpdateManagerUtils.resolveAsLocal(sourceURL, newFile, monitor);

+			// VK: this is a very confusing way to do a download

 

 			// transfer the possible mapping to the temp site						

 			 ((Site) tempSite).addArchive(new Info(archiveIDToInstall[i], newURL));

@@ -808,11 +819,15 @@
 

 	/**

 	 */

+	// VK: downloadData ... why are we handling the download of plugin and non-plugin

+	// VK: file differently??? Why not just have one download method that takes a source

+	// VK: and target??? Would have one download code handling progress, recovery, etc

 	private void downloadDataLocally(IFeature targetFeature, IDataEntry[] dataToInstall, IProgressMonitor monitor) throws CoreException, IOException {

 

 		URL sourceURL;

 		// any other data

 		IDataEntry[] entries = getDataEntries();

+		// VK: why getDataEntries() when this is passed as dataToInstall ??? It is not used anywhere else.

 		if (entries != null) {

 			if (monitor != null) {

 				monitor.beginTask("Installing Other Data information", dataToInstall.length);

@@ -822,6 +837,7 @@
 			}

 

 			for (int j = 0; j < entries.length; j++) {

+				// VK: see above ... use "entries.length" but iterate over dataToInstall[j] !!!!

 				String name = dataToInstall[j].getIdentifier();

 				if (monitor != null) {

 					monitor.subTask("..." + name);

@@ -1012,6 +1028,7 @@
 		/**

 		 * perform pre processing before opening the feature archive

 		 */

+		// VK: why is open protected and close public

 		protected void openFeature() {

 		};

 

@@ -1052,6 +1069,9 @@
 		 * the default ID is plugins/pluginId_pluginVer or

 		 * the default ID is fragments/pluginId_pluginVer or

 	 	*/

+		// VK: what do we want the concept of the id to be? we override it in PackagedFeature.

+		// VK: the whole handling of pluginEntry, dataEntry, archive is CONFUSING !!!

+		// VK: what about non-plugin data ??? are these archives???

 		public String getArchiveID(IPluginEntry entry){

 			//FIXME: fragments

 			String type = (entry.isFragment())?Site.DEFAULT_FRAGMENT_PATH:Site.DEFAULT_PLUGIN_PATH;

@@ -1061,11 +1081,14 @@
 		/**

 		 * return the list of FILE to be transfered for a Plugin

 		 */

+		// VK: why are some of the abstract methods public and others are protected. All

+		// VK: methods that need to be called by other objects (ec. Site) need to be public

 		protected abstract String[] getStorageUnitNames(IPluginEntry pluginEntry) throws CoreException;

 

 		/**

 		 * return the list of FILE to be transfered from within the Feature

 		 */

+		// VK: the term "storage unit" is confusing ...

 		protected abstract String[] getStorageUnitNames() throws CoreException;

 

 		/**

@@ -1089,6 +1112,7 @@
 		/*

 	 * @see IAdaptable#getAdapter(Class)

 	 */

+	 //VK: who calls this. Why is this needed?

 	public Object getAdapter(Class adapter) {

 		return null;

 	}

diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeaturePackaged.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeaturePackaged.java
index b45a9f5..3263972 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeaturePackaged.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeaturePackaged.java
@@ -170,6 +170,8 @@
 	/**

 	 * @see AbstractFeature#getContentReferences()

 	 */

+	// VK: javadoc: AbstractFeature does not exist

+	// VK: code below handles plugin data only. What about non-plugin data???

 	public String[] getArchives() {

 		String[] names = new String[getPluginEntryCount()];

 		IPluginEntry[] entries = getPluginEntries();

@@ -182,6 +184,7 @@
 	/**

 	 * @see AbstractFeature#isInstallable()

 	 */

+	// VK: javadoc: AbstractFeature does not exist

 	public boolean isInstallable() {

 		return true;

 	}

@@ -189,6 +192,7 @@
 	/**

 	 * @see AbstractFeature#getInputStreamFor(String)

 	 */

+	// VK: javadoc: AbstractFeature does not exist

 	protected InputStream getInputStreamFor(String name) throws CoreException, IOException {

 		InputStream result = null;

 		try {

@@ -213,6 +217,7 @@
 	/**

 	 * @see AbstractFeature#getStorageUnitNames()

 	 */

+	// VK: javadoc: AbstractFeature does not exist

 	protected String[] getStorageUnitNames() throws CoreException {

 

 		// make sure the feature archive has been transfered locally

@@ -267,6 +272,7 @@
 	/**

 	 * @see AbstractFeature#close(IPluginEntry)

 	 */

+	// VK: javadoc: AbstractFeature does not exist

 	protected void close(IPluginEntry entry) throws IOException {

 		if (currentOpenJarFile != null)

 			currentOpenJarFile.close();

@@ -275,6 +281,7 @@
 	/**

 	 * @see AbstractFeature#closeFeature()

 	 */

+	// VK: javadoc: AbstractFeature does not exist

 	public void closeFeature() throws IOException {

 		if (currentOpenJarFile != null)

 			currentOpenJarFile.close();

@@ -328,6 +335,8 @@
 	 * baseclass 

 	 * baseclass + ".properties" 

 	 */

+	// VK: why do we not use the class loader to load these? would not need to do the lookup

+	// VK: (ie. use the ResourceBundle support)

 	public ResourceBundle getResourceBundle() throws IOException, CoreException {

 

 		ResourceBundle result = null;

diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeatureParser.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeatureParser.java
index 3f4f76d..c300423 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeatureParser.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/FeatureParser.java
@@ -56,6 +56,8 @@
 		

 		Assert.isTrue(feature instanceof Feature);

 		this.feature = (Feature)feature;

+		// VK: any time you need to cast like this it means that any other implementation of

+		// IFeature will not work !!!!

 

 		// DEBUG:		

 		if (UpdateManagerPlugin.DEBUG && UpdateManagerPlugin.DEBUG_SHOW_PARSING){

@@ -63,6 +65,8 @@
 		}

 

 		bundle = ((Feature)feature).getResourceBundle();

+		// VK: any time you need to cast like this it means that any other implementation of

+		// IFeature will not work !!!!

 		

 		parser.parse(new InputSource(featureStream));

 	}

diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InternalSiteManager.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InternalSiteManager.java
index 37121f4..77c1bcf 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InternalSiteManager.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/InternalSiteManager.java
@@ -82,6 +82,7 @@
 				if (UpdateManagerPlugin.DEBUG && UpdateManagerPlugin.DEBUG_SHOW_WARNINGS) {

 					UpdateManagerPlugin.getPlugin().debug("URL's protocol :" + protocol + " is not recongnize, attempting to discover site type in site.xml");

 				}

+				// VK: should have local private debug(String) that delegates as above ... readability

 

 				// protocol not found, attempt to use default site

 				// we will atemopt to read teh site.xml 

@@ -144,6 +145,7 @@
 	 * Gets the sitesTypes

 	 * @return Returns a Map

 	 */

+	// VK: getSiteTypes() ???

 	public Map getSitesTypes() {

 		return sitesTypes;

 	}

diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Site.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Site.java
index 7dd6cac..86b7df4 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Site.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Site.java
@@ -23,6 +23,7 @@
 	 * default path under the site where plugins will be installed

 	 */

 	//FIXME: fragment

+	//VK: plugins and fragments are going to be in plugins/ (no separate fragment path)

 	public static final String DEFAULT_FRAGMENT_PATH = "fragments/";

 

 	/**

@@ -145,6 +146,8 @@
 		// should start Unit Of Work and manage Progress Monitor

 		Feature localFeature = createExecutableFeature(sourceFeature);

 		((Feature) sourceFeature).install(localFeature, monitor);

+		// VK: any time you need to cast like this it means that any other implementation of

+		// IFeature will not work !!!!

 		IFeatureReference localReference = new FeatureReference(this, localFeature.getURL());

 		this.addFeatureReference(localReference);

 

@@ -162,6 +165,8 @@
 	public void remove(IFeature feature, IProgressMonitor monitor) throws CoreException {

 

 		((Feature)feature).remove(monitor);

+		// VK: any time you need to cast like this it means that any other implementation of

+		// IFeature will not work !!!!

 

 		// remove feature reference

 		IFeatureReference[] featureReferences = getFeatureReferences();

diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteURL.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteURL.java
index 75b4a14..d21ad26 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteURL.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteURL.java
Binary files differ
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Writer.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Writer.java
index 96dde13..ee52d5e 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Writer.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/Writer.java
@@ -33,6 +33,7 @@
  * @param buffer

  * @param c

  */

+// VK: if we are reading/ writing as UTF-8, why are we doing this ?????

 private static void appendEscapedChar(StringBuffer buffer, char c) {

 	String replacement = getReplacement(c);

 	if (replacement != null) {