Index: gli/branches/incremental/src/org/greenstone/gatherer/cdm/CollectionDesignManager.java
===================================================================
--- gli/branches/incremental/src/org/greenstone/gatherer/cdm/CollectionDesignManager.java	(revision 19400)
+++ gli/branches/incremental/src/org/greenstone/gatherer/cdm/CollectionDesignManager.java	(revision 19401)
@@ -80,4 +80,5 @@
     /** A manager of configuring depositor metadata */ 
     static public DepositorMetadataManager depositormetadata_manager;
+
     /** These mark what needs to happen when building a collection where ONLY design options have been changed.
         The build requirements of the higher numbers must include doing everything from the lower numbers. */
@@ -86,4 +87,9 @@
     static final public int NOTHING = 0;
     static private int rebuildTypeRequired = NOTHING; //Rebuild type required if only design options have changed
+
+    /** This indicates whether a minimal or complete build is required.
+        Minimal means do everything with the -incremental flag. Complete means do everything with -removeold */
+    static private boolean isCompleteBuild = false;
+
 
     /** Constructor. Loads a certain collection configuration file, which is parsed into a DOM. This model is then registered with the command information managers, each of whom knows how to, and provides controls to, alter certain commands.
@@ -202,11 +208,19 @@
 
     public static int getRebuildTypeRequired() {
-	return rebuildTypeRequired;
-    }
+        return rebuildTypeRequired;
+    }
+
     public static void resetRebuildTypeRequired() {
-	setRebuildTypeRequired(NOTHING);
+        setRebuildTypeRequired(NOTHING);
     }
     public static void setRebuildTypeRequired(int number) {
-	rebuildTypeRequired = number;
+        rebuildTypeRequired = number;
+    }
+
+    public static boolean isCompleteBuild() {
+        return isCompleteBuild;
+    }
+    public static void setCompleteBuild(boolean icb) {
+        isCompleteBuild = icb;
     }
 
Index: gli/branches/incremental/src/org/greenstone/gatherer/collection/CollectionManager.java
===================================================================
--- gli/branches/incremental/src/org/greenstone/gatherer/collection/CollectionManager.java	(revision 19400)
+++ gli/branches/incremental/src/org/greenstone/gatherer/collection/CollectionManager.java	(revision 19401)
@@ -51,4 +51,6 @@
 import org.greenstone.gatherer.cdm.CollectionMetaManager;
 import org.greenstone.gatherer.cdm.CommandTokenizer;
+import org.greenstone.gatherer.cdm.BuildTypeManager;
+import org.greenstone.gatherer.cdm.CollectionConfiguration;
 import org.greenstone.gatherer.greenstone.Classifiers;
 import org.greenstone.gatherer.greenstone.LocalGreenstone;
@@ -153,8 +155,8 @@
      * @see org.greenstone.gatherer.util.Utility
      */
-    public void buildCollection(boolean incremental_build)
-    {
-          
-	DebugStream.println("In CollectionManager.buildCollection(), incremental_build: " + incremental_build);
+    public void buildCollection()
+    {
+    
+	DebugStream.println("In CollectionManager.buildCollection(), CollectionDesignManager.isCompleteBuild(): " + CollectionDesignManager.isCompleteBuild());
 	DebugStream.println("Is event dispatch thread: " + SwingUtilities.isEventDispatchThread());
 	building = true;
@@ -187,5 +189,10 @@
 	}
 	else {
-	    command_parts_list.add(LocalGreenstone.getBinScriptDirectoryPath() + "buildcol.pl");
+		String buildType = (new CollectionMeta( CollectionDesignManager.collect_config.getBuildType() )).getValue(CollectionMeta.TEXT);
+		if ( !CollectionDesignManager.isCompleteBuild() && buildType.equals( BuildTypeManager.BUILD_TYPE_LUCENE ) ) {
+			command_parts_list.add(LocalGreenstone.getBinScriptDirectoryPath() + "incremental-buildcol.pl");
+		} else {
+			command_parts_list.add(LocalGreenstone.getBinScriptDirectoryPath() + "full-buildcol.pl");
+		}
 	}
 	command_parts_list.add("-gli");
@@ -194,9 +201,4 @@
 	command_parts_list.add("-collectdir");
 	command_parts_list.add(getCollectDirectory());
-
-	// If the user hasn't manually specified "-keepold" or "-removeold" then pick one based on incremental_build
-	if (!collection.build_options.getValueEnabled("keepold") && !collection.build_options.getValueEnabled("removeold")) {
-	    command_parts_list.add(incremental_build ? "-keepold" : "-removeold");
-	}
 
 	String[] build_options = collection.build_options.getValues();
@@ -217,8 +219,7 @@
 
     /*probably repeating alot of work, but I want to keep this separate... wendy*/
-    public void scheduleBuild(boolean incremental_build)
-    {
-
-	DebugStream.println("In CollectionManager.scheduleBuild(), incremental_build: " + incremental_build); 
+    public void scheduleBuild()
+    {
+	DebugStream.println("In CollectionManager.scheduleBuild(), CollectionDesignManager.isCompleteBuild(): " + CollectionDesignManager.isCompleteBuild()); 
 	DebugStream.println("Is event dispatch threa: " + SwingUtilities.isEventDispatchThread()); 
 
@@ -240,5 +241,7 @@
 	    import_list.add("-S");
 	}
-        import_list.add(LocalGreenstone.getBinScriptDirectoryPath() + "import.pl");
+
+	String cmdPrefix = CollectionDesignManager.isCompleteBuild() ? "full-" : "incremental-";
+    import_list.add(LocalGreenstone.getBinScriptDirectoryPath() + cmdPrefix + "import.pl");
 	import_list.add("-language");
 	import_list.add(Configuration.getLanguage());
@@ -273,14 +276,16 @@
 	    build_list.add("-S");
 	}
-	build_list.add(LocalGreenstone.getBinScriptDirectoryPath() + "buildcol.pl");
+
+	String buildType = (new CollectionMeta( CollectionDesignManager.collect_config.getBuildType() )).getValue(CollectionMeta.TEXT);
+	if ( !CollectionDesignManager.isCompleteBuild() && buildType.equals( BuildTypeManager.BUILD_TYPE_LUCENE ) ) {
+		build_list.add(LocalGreenstone.getBinScriptDirectoryPath() + "incremental-buildcol.pl");
+	} else {
+		build_list.add(LocalGreenstone.getBinScriptDirectoryPath() + "full-buildcol.pl");
+	}
+
 	build_list.add("-language");
 	build_list.add(Configuration.getLanguage());
 	build_list.add("-collectdir");
 	build_list.add(getCollectDirectory());
-
-	// If the user hasn't manually specified "-keepold" or "-removeold" then pick one based on incremental_build
-	if (!collection.build_options.getValueEnabled("keepold") && !collection.build_options.getValueEnabled("removeold")) {
-	    build_list.add(incremental_build ? "-keepold" : "-removeold");
-	}
 
 	String[] build_options = collection.build_options.getValues();
@@ -345,4 +350,15 @@
     }
 
+    /** Used to determine whether the currently active collection has been imported.
+     * @return A boolean indicating the imported status of the collection.
+     */
+    public boolean imported() {
+        if ( collection != null ) {
+            String file_name = getLoadedCollectionDirectoryPath() + "archives";
+            File test_file = new File(file_name);
+            return test_file.exists();
+        }
+        return false;
+    }
 
     /** a test method to see if we can delete a directory/file - returns false is the file or any of the contents of a directory cannot be deleted */
@@ -549,6 +565,6 @@
 	    collection = new Collection(new File(collection_directory_path, name + ".col"));
 
-	    // "-removeold" is on by default for import.pl
-	    collection.import_options.setValue("removeold", true, null);
+	    // "-removeold" is on by default for import.pl (not anymore; it would wreck incremental import)
+	    //collection.import_options.setValue("removeold", true, null);
 
 	    // for remote case, scheduling causes an Exception on creating a new collection that 
@@ -1031,5 +1047,6 @@
 	}
 	else {
-	    command_parts_list.add(LocalGreenstone.getBinScriptDirectoryPath() + "import.pl");
+		String cmdPrefix = CollectionDesignManager.isCompleteBuild() ? "full-" : "incremental-";
+	    command_parts_list.add(LocalGreenstone.getBinScriptDirectoryPath() + cmdPrefix + "import.pl");
 	}
 
@@ -1042,4 +1059,5 @@
 	String[] import_options = collection.import_options.getValues();
 	for (int i = 0; i < import_options.length; i++) {
+        System.err.println( "Tacking on option: " + import_options[i] );
 	    command_parts_list.add(import_options[i]);
 	}
@@ -1050,4 +1068,5 @@
 	String[] command_parts = (String[]) command_parts_list.toArray(new String[0]);
 	GShell shell = new GShell(command_parts, GShell.IMPORT, BUILDING, this, import_monitor, GShell.GSHELL_IMPORT);
+	//shell.setEventProperty("is_incremental", Boolean.toString(is_incremental));
 	shell.addGShellListener(Gatherer.g_man.create_pane);
         shell.addGShellListener(Gatherer.g_man.format_pane);
@@ -1497,5 +1516,5 @@
 	//ystem.err.println("CollectionManager.processComplete(" + event.getType() + ")");
 	Gatherer.g_man.lockCollection((event.getType() == GShell.IMPORT), false);
-	///ystem.err.println("Recieved process complete event - " + event);
+	///ystem.err.println("Received process complete event - " + event);
 	// If we were running an import, now run a build.
 	if(event.getType() == GShell.IMPORT && event.getStatus() == GShell.OK) {
@@ -1504,5 +1523,5 @@
 	    collection.setFilesChanged(false);
 	    collection.setMetadataChanged(false);
-	    buildCollection(false);
+	    buildCollection();
 	}
 	else if(event.getType() == GShell.SCHEDULE && event.getStatus() == GShell.OK ) {
@@ -1517,32 +1536,34 @@
 	else if(event.getType() == GShell.BUILD && event.getStatus() == GShell.OK) {
             
-	    if(installCollection()) {
-		// If we have a local library running then ask it to add our newly create collection
-		if (LocalLibraryServer.isRunning() == true) {
-		    LocalLibraryServer.addCollection(collection.getName());
-		}
-		else if (Gatherer.GS3) {
-		    //xiao comment out this: convertToGS3Collection();
-		    Gatherer.configGS3Server(Configuration.site_name, ServletConfiguration.ADD_COMMAND + collection.getName());
-		}  
-
-		// Fire a collection changed first to update the preview etc buttons
-		Gatherer.refresh(Gatherer.COLLECTION_REBUILT);
-
-  		// Now display a message dialog saying its all built
-  		WarningDialog collection_built_warning_dialog = new WarningDialog("warning.CollectionBuilt", Dictionary.get("CollectionBuilt.Title"), Dictionary.get("CollectionBuilt.Message"), null, false);
-  		collection_built_warning_dialog.setMessageOnly(true); // Not a warning
-  		collection_built_warning_dialog.display();
-  		collection_built_warning_dialog.dispose();
-  		collection_built_warning_dialog = null;
-
-		//Set nothing as needing rebuilding, as a build has just finished :-)
-		CollectionDesignManager.resetRebuildTypeRequired();
-	    }
-	    else {
-		JOptionPane.showMessageDialog(Gatherer.g_man, Dictionary.get("CollectionManager.Preview_Ready_Failed"), Dictionary.get("CollectionManager.Preview_Ready_Title"), JOptionPane.ERROR_MESSAGE);
-		Gatherer.refresh(Gatherer.COLLECTION_REBUILT);
-		DebugStream.println("Status is ok but !installCollection()");
-	    }
+        if ( CollectionDesignManager.isCompleteBuild() ) {
+	        if(installCollection()) {
+		    // If we have a local library running then ask it to add our newly create collection
+		    if (LocalLibraryServer.isRunning() == true) {
+		        LocalLibraryServer.addCollection(collection.getName());
+		    }
+		    else if (Gatherer.GS3) {
+		        //xiao comment out this: convertToGS3Collection();
+		        Gatherer.configGS3Server(Configuration.site_name, ServletConfiguration.ADD_COMMAND + collection.getName());
+		    }  
+
+		    // Fire a collection changed first to update the preview etc buttons
+		    Gatherer.refresh(Gatherer.COLLECTION_REBUILT);
+
+      		// Now display a message dialog saying its all built
+      		WarningDialog collection_built_warning_dialog = new WarningDialog("warning.CollectionBuilt", Dictionary.get("CollectionBuilt.Title"), Dictionary.get("CollectionBuilt.Message"), null, false);
+      		collection_built_warning_dialog.setMessageOnly(true); // Not a warning
+      		collection_built_warning_dialog.display();
+      		collection_built_warning_dialog.dispose();
+      		collection_built_warning_dialog = null;
+
+		    //Set nothing as needing rebuilding, as a build has just finished :-)
+		    CollectionDesignManager.resetRebuildTypeRequired();
+	        }
+	        else {
+		    JOptionPane.showMessageDialog(Gatherer.g_man, Dictionary.get("CollectionManager.Preview_Ready_Failed"), Dictionary.get("CollectionManager.Preview_Ready_Title"), JOptionPane.ERROR_MESSAGE);
+		    Gatherer.refresh(Gatherer.COLLECTION_REBUILT);
+		    DebugStream.println("Status is ok but !installCollection()");
+	        }
+        }
 	}
 	else if (event.getStatus() == GShell.CANCELLED) {
Index: gli/branches/incremental/src/org/greenstone/gatherer/gui/CreatePane.java
===================================================================
--- gli/branches/incremental/src/org/greenstone/gatherer/gui/CreatePane.java	(revision 19400)
+++ gli/branches/incremental/src/org/greenstone/gatherer/gui/CreatePane.java	(revision 19401)
@@ -206,27 +206,44 @@
 	Gatherer.c_man.registerScheduleMonitor(schedule_monitor); 
 
-	// And the simple panel
-	slower_panel = new JPanel();
-	sbutton_panel = new JPanel();
-	sinner_panel = new JPanel();
-        
-        slower_panel.setComponentOrientation(Dictionary.getOrientation());
-        sbutton_panel.setComponentOrientation(Dictionary.getOrientation());
-        sinner_panel.setComponentOrientation(Dictionary.getOrientation());
-        
-	//Radio buttons
-	incremental_build_radio_button = new JRadioButton(Dictionary.get("CreatePane.Minimal_Build"));
-        incremental_build_radio_button.setComponentOrientation(Dictionary.getOrientation());
-	incremental_build_radio_button.setToolTipText(Dictionary.get("CreatePane.Minimal_Build_Tooltip"));
-	full_build_radio_button = new JRadioButton(Dictionary.get("CreatePane.Full_Build"));
-        full_build_radio_button.setComponentOrientation(Dictionary.getOrientation());
-	full_build_radio_button.setToolTipText(Dictionary.get("CreatePane.Full_Build_Tooltip"));
-	sincremental_build_radio_button = new JRadioButton(Dictionary.get("CreatePane.Minimal_Build"));
-        sincremental_build_radio_button.setComponentOrientation(Dictionary.getOrientation());
-	sincremental_build_radio_button.setToolTipText(Dictionary.get("CreatePane.Minimal_Build_Tooltip"));
-	sfull_build_radio_button = new JRadioButton(Dictionary.get("CreatePane.Full_Build"));
-        sfull_build_radio_button.setComponentOrientation(Dictionary.getOrientation());
-	sfull_build_radio_button.setToolTipText(Dictionary.get("CreatePane.Full_Build_Tooltip"));
-
+    // And the simple panel
+    slower_panel = new JPanel();
+    sbutton_panel = new JPanel();
+    sinner_panel = new JPanel();
+    
+    slower_panel.setComponentOrientation(Dictionary.getOrientation());
+    sbutton_panel.setComponentOrientation(Dictionary.getOrientation());
+    sinner_panel.setComponentOrientation(Dictionary.getOrientation());
+    
+    //Radio buttons
+    incremental_build_radio_button = new JRadioButton(Dictionary.get("CreatePane.Minimal_Build"));
+    incremental_build_radio_button.setComponentOrientation(Dictionary.getOrientation());
+    incremental_build_radio_button.setToolTipText(Dictionary.get("CreatePane.Minimal_Build_Tooltip"));
+    full_build_radio_button = new JRadioButton(Dictionary.get("CreatePane.Full_Build"));
+    full_build_radio_button.setComponentOrientation(Dictionary.getOrientation());
+    full_build_radio_button.setToolTipText(Dictionary.get("CreatePane.Full_Build_Tooltip"));
+    sincremental_build_radio_button = new JRadioButton(Dictionary.get("CreatePane.Minimal_Build"));
+    sincremental_build_radio_button.setComponentOrientation(Dictionary.getOrientation());
+    sincremental_build_radio_button.setToolTipText(Dictionary.get("CreatePane.Minimal_Build_Tooltip"));
+    sfull_build_radio_button = new JRadioButton(Dictionary.get("CreatePane.Full_Build"));
+    sfull_build_radio_button.setComponentOrientation(Dictionary.getOrientation());
+    sfull_build_radio_button.setToolTipText(Dictionary.get("CreatePane.Full_Build_Tooltip"));
+
+    //keep them in sync
+    full_build_radio_button.addActionListener(
+        new ActionListener() { public void actionPerformed(ActionEvent e) {
+            sfull_build_radio_button.setSelected( full_build_radio_button.isSelected() );
+        }});
+    sfull_build_radio_button.addActionListener(
+        new ActionListener() { public void actionPerformed(ActionEvent e) {
+            full_build_radio_button.setSelected( sfull_build_radio_button.isSelected() );
+        }});
+    incremental_build_radio_button.addActionListener(
+        new ActionListener() { public void actionPerformed(ActionEvent e) {
+            sincremental_build_radio_button.setSelected( incremental_build_radio_button.isSelected() );
+        }});
+    sincremental_build_radio_button.addActionListener(
+        new ActionListener() { public void actionPerformed(ActionEvent e) {
+            incremental_build_radio_button.setSelected( sincremental_build_radio_button.isSelected() );
+        }});
 
 	// Buttons
@@ -286,141 +303,142 @@
     public void display() {
 
-	int current_mode = Configuration.getMode();
-
-	//Complete/incremental build options panel
-	//For some reason I need to create seperate objects for each mode. Is there a better way??
-	ButtonGroup build_type_group = new ButtonGroup();
-	build_type_group.add(incremental_build_radio_button);
-	full_build_radio_button.setSelected(true);
-	build_type_group.add(full_build_radio_button);
-	ButtonGroup sbuild_type_group = new ButtonGroup();
-	sbuild_type_group.add(sincremental_build_radio_button);
-	sfull_build_radio_button.setSelected(true);
-	sbuild_type_group.add(sfull_build_radio_button);
-	JPanel build_type_pane = new JPanel(new GridLayout(2,1));
+        int current_mode = Configuration.getMode();
+
+        //Complete/incremental build options panel
+        ButtonGroup build_type_group = new ButtonGroup();
+        build_type_group.add(incremental_build_radio_button);
+        build_type_group.add(full_build_radio_button);
+        full_build_radio_button.setSelected(true);
+
+        ButtonGroup sbuild_type_group = new ButtonGroup();
+        sbuild_type_group.add(sincremental_build_radio_button);
+        sbuild_type_group.add(sfull_build_radio_button);
+        sfull_build_radio_button.setSelected(true);
+
+        JPanel build_type_pane = new JPanel(new GridLayout(2,1));
         build_type_pane.setComponentOrientation(Dictionary.getOrientation());
-	build_type_pane.add(full_build_radio_button);
-	build_type_pane.add(incremental_build_radio_button);
-	JPanel sbuild_type_pane = new JPanel(new GridLayout(2,1));
+        build_type_pane.add(full_build_radio_button);
+        build_type_pane.add(incremental_build_radio_button);
+
+        JPanel sbuild_type_pane = new JPanel(new GridLayout(2,1));
         sbuild_type_pane.setComponentOrientation(Dictionary.getOrientation());
-	sbuild_type_pane.add(sfull_build_radio_button);
-	sbuild_type_pane.add(sincremental_build_radio_button);
-	
-	
-
-	// Build control_pane
-	JPanel left = new JPanel();
-        left.setComponentOrientation(Dictionary.getOrientation());
-	left.setBorder(BorderFactory.createEmptyBorder(0,5,5,5));
-	left.setLayout(new BorderLayout());
-	left.add(tree, BorderLayout.CENTER);
-	left.add(build_type_pane, BorderLayout.SOUTH);
-	//left.add(full_build_radio_button, BorderLayout.SOUTH);
-
-	right = new JPanel();
-        right.setComponentOrientation(Dictionary.getOrientation());
-	right.setBorder(BorderFactory.createEmptyBorder(0,0,5,5));
-	right.setLayout(new BorderLayout());
-
-	JPanel options_area = new JPanel();
-        options_area.setComponentOrientation(Dictionary.getOrientation());
-	options_area.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,5,5), BorderFactory.createTitledBorder(Dictionary.get("CreatePane.Options_Title"))));
-	options_area.setLayout(new BorderLayout());
-	options_area.add(left, BorderLayout.LINE_START);
-	options_area.add(right, BorderLayout.CENTER);
-
-	button_pane = new JPanel();
-        button_pane.setComponentOrientation(Dictionary.getOrientation());
-	button_pane.setBorder(BorderFactory.createEmptyBorder(5,10,10,10));
-	button_pane.setLayout(new GridLayout(1,4));
-	button_pane.add(build_button);
-	button_pane.add(cancel_button);
-	button_pane.add(preview_button);
-
-	control_pane.setLayout(new BorderLayout());
-	control_pane.add(options_area, BorderLayout.CENTER);
-	control_pane.add(button_pane, BorderLayout.SOUTH);
-
-	// Build progress_pane
-	JPanel labels_pane = new JPanel();
-        labels_pane.setComponentOrientation(Dictionary.getOrientation());
-	labels_pane.setLayout(new GridLayout(2,1,0,5));
-	labels_pane.add(progress_import_label);
-	labels_pane.add(progress_build_label);
-
-	JPanel monitors_pane = new JPanel();
-        monitors_pane.setComponentOrientation(Dictionary.getOrientation());
-	monitors_pane.setLayout(new GridLayout(2,1,0,5));
-	monitors_pane.add(import_monitor.getProgress());
-	monitors_pane.add(build_monitor.getProgress());
-
-	bar_area.setBorder(BorderFactory.createEmptyBorder(10,10,5,10));
-	bar_area.setLayout(new BorderLayout(5,5));
-	bar_area.add(labels_pane, BorderLayout.LINE_START);
-	bar_area.add(monitors_pane, BorderLayout.CENTER);
-
-	progress_pane.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
-	progress_pane.setLayout(new BorderLayout());
-	progress_pane.add(bar_area, BorderLayout.NORTH);
-	if(current_mode >= THRESHOLD) {
-	    progress_pane.add(log_scroll, BorderLayout.CENTER);
-	}
-
-	// Simple panel
-	sbutton_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
-	sbutton_panel.setLayout(new GridLayout(1,3));
-	sbutton_panel.add(simple_build_button);
-	sbutton_panel.add(simple_cancel_button);
-	sbutton_panel.add(simple_preview_button);
-
-	JPanel simple_bar_area = new JPanel(new GridLayout(2,1));
-        simple_bar_area.setComponentOrientation(Dictionary.getOrientation());
-	simple_bar_area.setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
-	simple_bar_area.add(import_monitor.getSharedProgress());
-	simple_bar_area.add(sbutton_panel);
-
-	sinner_panel.setBorder(BorderFactory.createEmptyBorder(5,0,5,0));
-	sinner_panel.setLayout(new BorderLayout());
-	sinner_panel.add(sbuild_type_pane, BorderLayout.LINE_START);
-	//sinner_panel.add(full_build_radio_button, BorderLayout.WEST);
-	sinner_panel.add(simple_bar_area, BorderLayout.CENTER);
-	
-	if(options_pane != null) {
-	    sargument_configuration_panel = options_pane.buildImport(null);
-	    sargument_configuration_panel = options_pane.buildBuild(sargument_configuration_panel);
-	    // if(CollectionManager.canDoScheduling()) {
-	    //	sargument_configuration_panel = options_pane.buildSchedule(sargument_configuration_panel); 
-	    // }
-	}
-	else {
-	    sargument_configuration_panel = new JPanel();
-	}
-        sargument_configuration_panel.setComponentOrientation(Dictionary.getOrientation());
-	sargument_configuration_scroll = new JScrollPane(sargument_configuration_panel);
-	sargument_configuration_scroll.setPreferredSize(ARGUMENT_SIZE);
-        sargument_configuration_scroll.setComponentOrientation(Dictionary.getOrientation());
-        
-	slower_panel.setLayout(new BorderLayout());
-	slower_panel.add(sinner_panel, BorderLayout.NORTH);
-	if(current_mode < THRESHOLD) {
-	    slower_panel.add(log_scroll, BorderLayout.CENTER);
-	}
-	
-	simple_panel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, sargument_configuration_scroll, slower_panel);
-        simple_panel.setComponentOrientation(Dictionary.getOrientation());
-	// Main pane
-	main_pane = new JPanel(card_layout);
-        main_pane.setComponentOrientation(Dictionary.getOrientation());
-	if(current_mode < THRESHOLD) { // Simple mode - add first
-	    main_pane.add(simple_panel, SIMPLE);
-	}
-	main_pane.add(control_pane, CONTROL);
-	main_pane.add(progress_pane, PROGRESS);
-	if(current_mode >= THRESHOLD) { // Expert mode - add last
-	    main_pane.add(simple_panel, SIMPLE);
-	}
-
-	this.setLayout(new BorderLayout());
-	this.add(main_pane, BorderLayout.CENTER);
+        sbuild_type_pane.add(sfull_build_radio_button);
+        sbuild_type_pane.add(sincremental_build_radio_button);
+
+
+        // Build control_pane
+        JPanel left = new JPanel();
+            left.setComponentOrientation(Dictionary.getOrientation());
+        left.setBorder(BorderFactory.createEmptyBorder(0,5,5,5));
+        left.setLayout(new BorderLayout());
+        left.add(tree, BorderLayout.CENTER);
+        left.add(build_type_pane, BorderLayout.SOUTH);
+        //left.add(full_build_radio_button, BorderLayout.SOUTH);
+
+        right = new JPanel();
+            right.setComponentOrientation(Dictionary.getOrientation());
+        right.setBorder(BorderFactory.createEmptyBorder(0,0,5,5));
+        right.setLayout(new BorderLayout());
+
+        JPanel options_area = new JPanel();
+            options_area.setComponentOrientation(Dictionary.getOrientation());
+        options_area.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,5,5), BorderFactory.createTitledBorder(Dictionary.get("CreatePane.Options_Title"))));
+        options_area.setLayout(new BorderLayout());
+        options_area.add(left, BorderLayout.LINE_START);
+        options_area.add(right, BorderLayout.CENTER);
+
+        button_pane = new JPanel();
+            button_pane.setComponentOrientation(Dictionary.getOrientation());
+        button_pane.setBorder(BorderFactory.createEmptyBorder(5,10,10,10));
+        button_pane.setLayout(new GridLayout(1,4));
+        button_pane.add(build_button);
+        button_pane.add(cancel_button);
+        button_pane.add(preview_button);
+
+        control_pane.setLayout(new BorderLayout());
+        control_pane.add(options_area, BorderLayout.CENTER);
+        control_pane.add(button_pane, BorderLayout.SOUTH);
+
+        // Build progress_pane
+        JPanel labels_pane = new JPanel();
+            labels_pane.setComponentOrientation(Dictionary.getOrientation());
+        labels_pane.setLayout(new GridLayout(2,1,0,5));
+        labels_pane.add(progress_import_label);
+        labels_pane.add(progress_build_label);
+
+        JPanel monitors_pane = new JPanel();
+            monitors_pane.setComponentOrientation(Dictionary.getOrientation());
+        monitors_pane.setLayout(new GridLayout(2,1,0,5));
+        monitors_pane.add(import_monitor.getProgress());
+        monitors_pane.add(build_monitor.getProgress());
+
+        bar_area.setBorder(BorderFactory.createEmptyBorder(10,10,5,10));
+        bar_area.setLayout(new BorderLayout(5,5));
+        bar_area.add(labels_pane, BorderLayout.LINE_START);
+        bar_area.add(monitors_pane, BorderLayout.CENTER);
+
+        progress_pane.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
+        progress_pane.setLayout(new BorderLayout());
+        progress_pane.add(bar_area, BorderLayout.NORTH);
+        if(current_mode >= THRESHOLD) {
+            progress_pane.add(log_scroll, BorderLayout.CENTER);
+        }
+
+        // Simple panel
+        sbutton_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
+        sbutton_panel.setLayout(new GridLayout(1,3));
+        sbutton_panel.add(simple_build_button);
+        sbutton_panel.add(simple_cancel_button);
+        sbutton_panel.add(simple_preview_button);
+
+        JPanel simple_bar_area = new JPanel(new GridLayout(2,1));
+            simple_bar_area.setComponentOrientation(Dictionary.getOrientation());
+        simple_bar_area.setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
+        simple_bar_area.add(import_monitor.getSharedProgress());
+        simple_bar_area.add(sbutton_panel);
+
+        sinner_panel.setBorder(BorderFactory.createEmptyBorder(5,0,5,0));
+        sinner_panel.setLayout(new BorderLayout());
+        sinner_panel.add(sbuild_type_pane, BorderLayout.LINE_START);
+        //sinner_panel.add(full_build_radio_button, BorderLayout.WEST);
+        sinner_panel.add(simple_bar_area, BorderLayout.CENTER);
+
+        if(options_pane != null) {
+            sargument_configuration_panel = options_pane.buildImport(null);
+            sargument_configuration_panel = options_pane.buildBuild(sargument_configuration_panel);
+            // if(CollectionManager.canDoScheduling()) {
+            //	sargument_configuration_panel = options_pane.buildSchedule(sargument_configuration_panel); 
+            // }
+        }
+        else {
+            sargument_configuration_panel = new JPanel();
+        }
+            sargument_configuration_panel.setComponentOrientation(Dictionary.getOrientation());
+        sargument_configuration_scroll = new JScrollPane(sargument_configuration_panel);
+        sargument_configuration_scroll.setPreferredSize(ARGUMENT_SIZE);
+            sargument_configuration_scroll.setComponentOrientation(Dictionary.getOrientation());
+            
+        slower_panel.setLayout(new BorderLayout());
+        slower_panel.add(sinner_panel, BorderLayout.NORTH);
+        if(current_mode < THRESHOLD) {
+            slower_panel.add(log_scroll, BorderLayout.CENTER);
+        }
+
+        simple_panel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, sargument_configuration_scroll, slower_panel);
+            simple_panel.setComponentOrientation(Dictionary.getOrientation());
+        // Main pane
+        main_pane = new JPanel(card_layout);
+            main_pane.setComponentOrientation(Dictionary.getOrientation());
+        if(current_mode < THRESHOLD) { // Simple mode - add first
+            main_pane.add(simple_panel, SIMPLE);
+        }
+        main_pane.add(control_pane, CONTROL);
+        main_pane.add(progress_pane, PROGRESS);
+        if(current_mode >= THRESHOLD) { // Expert mode - add last
+            main_pane.add(simple_panel, SIMPLE);
+        }
+
+        this.setLayout(new BorderLayout());
+        this.add(main_pane, BorderLayout.CENTER);
     }
 
@@ -449,17 +467,4 @@
 	tree.setSelectionPath(path);
 
-	//Disable the full/incremental buttons if the collection has not been built.
-	if(Gatherer.c_man.built()) {
-	    full_build_radio_button.setEnabled(true);
-	    incremental_build_radio_button.setEnabled(true);
-	    sfull_build_radio_button.setEnabled(true);
-	    sincremental_build_radio_button.setEnabled(true);
-	}
-	else {
-	    full_build_radio_button.setEnabled(false);
-	    incremental_build_radio_button.setEnabled(false);
-	    sfull_build_radio_button.setEnabled(false);
-	    sincremental_build_radio_button.setEnabled(false);
-	}
     }
 
@@ -467,27 +472,4 @@
     public void loseFocus() {
 	tree.valueChanged(null);
-    }
-
-    /**
-     * Check to see if doing an incremental build is chosen.
-     * If not, the full rebuild option must be chosen.
-     * @return boolean - true if the collection should be rebuilt incrementally.
-     */
-    public boolean isIncremental() {
-	boolean incremental = false;
-
-	//This is horrible. What if the mode is changed, and different options are chosen on different modes??
-	if(Gatherer.c_man.built()) {
-	    if(Configuration.getMode() >= THRESHOLD) {
-		incremental = incremental_build_radio_button.isSelected();
-	    }
-	    else {
-		incremental = sincremental_build_radio_button.isSelected();
-	    }
-	}
-	else {
-	    incremental = false; //The collection has not yet been built
-	}
-	return incremental;
     }
 
@@ -695,48 +677,38 @@
 	 * @see org.greenstone.gatherer.shell.GShellProgressMonitor
 	 */
-	public void actionPerformed(ActionEvent event) {
-	    Collection collection = Gatherer.c_man.getCollection();
-	    String collection_name = collection.getName();
-
-	    //if button is labelled for Building
-	    if(event.getActionCommand().equals(Dictionary.get("CreatePane.Build_Collection"))) { 
-
-		if(!collection.getMetadataChanged() && !collection.getFilesChanged() && isIncremental()) {
-		    //Only design options have changes, and we want to be smart in the way we handle them.
-		    int rebuildTypeRequired = CollectionDesignManager.getRebuildTypeRequired();
-		    if (rebuildTypeRequired == CollectionDesignManager.BUILDCOL) {
-			// Just run the buildcol command.
-			DebugStream.println("Just want to run buildcol.pl");
-			prepareForBuild();
-			Gatherer.c_man.buildCollection(isIncremental());
-		    }
-		    else if (rebuildTypeRequired == CollectionDesignManager.ALL) {
-			// Do both import and buildcol
-			DebugStream.println("Want to do a complete build");
-			prepareForBuild();
-			Gatherer.c_man.importCollection(); //This starts the building process.
-		    }
-		    else {
-			//Nothing at all needs doing.
-			//This is bad HCI. Maybe should disable the build button in this situation?
-			JOptionPane.showMessageDialog(Gatherer.g_man, Dictionary.get("CreatePane.Minimal_Build_Not_Required"));
-		    }
-		}
-		else {
-		    //Do a complete build.
-		    prepareForBuild();
-		    Gatherer.c_man.importCollection(); //This starts the building process.
-		} 
-
-	    } else {   //button is labelled for setting up scheduling
-
-		//this needs to be called to configure buttons... but no building is done
-		prepareForBuild(); 
-	
-		Gatherer.c_man.scheduleBuild(isIncremental()); 
-	    }
-		
-	    //Re-setting the rebuildTypeRequired is handled by CollectionManager.processComplete(GShellEvent)
-	}
+    public void actionPerformed(ActionEvent event) {
+        Collection collection = Gatherer.c_man.getCollection();
+        String collection_name = collection.getName();
+
+        //if button is labelled for Building
+        if(event.getActionCommand().equals(Dictionary.get("CreatePane.Build_Collection"))) { 
+
+            //set a static variable marking whether this is a "Complete" or "Minimal" build
+            CollectionDesignManager.setCompleteBuild( full_build_radio_button.isSelected() );
+
+            //do the import and build, skipping import if possible
+            if( !CollectionDesignManager.isCompleteBuild() &&
+                !collection.getMetadataChanged() && !collection.getFilesChanged() && Gatherer.c_man.imported() &&
+                CollectionDesignManager.getRebuildTypeRequired() <= CollectionDesignManager.BUILDCOL
+                ) {
+                    // Just do build (no import)
+                    DebugStream.println("Just want to run buildcol.pl");
+                    prepareForBuild();
+                    Gatherer.c_man.buildCollection();
+            }
+            else {
+                prepareForBuild();
+                Gatherer.c_man.importCollection(); //This starts the building process.
+            } 
+
+        } else { //button is labelled for setting up scheduling
+
+            //this needs to be called to configure buttons... but no building is done
+            prepareForBuild(); 
+            Gatherer.c_man.scheduleBuild(); 
+        }
+        //Re-setting the rebuildTypeRequired is handled by CollectionManager.processComplete(GShellEvent)
+    }
+
 	    
 	/**
@@ -795,6 +767,9 @@
 	    String collection_name = collection.getName();
 
+        //set a static variable marking whether this is a "Complete" or "Minimal" build
+        CollectionDesignManager.setCompleteBuild( full_build_radio_button.isSelected() );
+
 		//prepareForBuild(); 
-		if(!collection.getMetadataChanged() && !collection.getFilesChanged() && isIncremental()) {
+		if(!collection.getMetadataChanged() && !collection.getFilesChanged()) {
 		    //Only design options have changes, and we want to be smart in the way we handle them.
 		    int rebuildTypeRequired = CollectionDesignManager.getRebuildTypeRequired();
@@ -803,5 +778,5 @@
 			DebugStream.println("Just want to run buildcol.pl");
 			prepareForBuild();
-			Gatherer.c_man.buildCollection(isIncremental());
+			Gatherer.c_man.buildCollection();
 		    }
 		    else if (rebuildTypeRequired == CollectionDesignManager.ALL) {
