diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryController.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryController.java
index bc78be5fd7f9c34bfde0a8634e7e323d91952bdf..6881bb2e8880dc0eac0d295defb90cfa59dd3bfc 100644
--- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryController.java
+++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryController.java
@@ -450,7 +450,8 @@ public boolean hasTooManyFiles(DataSource datasource) throws TskCoreException {
     public boolean hasFilesWithNoMimetype(Content datasource) throws TskCoreException {
         
         // There are some special files/attributes in the root folder, like $BadClus:$Bad and $Security:$SDS  
-        // that do not go through any ingest modules, and hence do not have any assigned mimetype
+        // The IngestTasksScheduler does not push them down to the ingest modules, 
+        // and hence they do not have any assigned mimetype
         String whereClause = "data_source_obj_id = " + datasource.getId()
                     + " AND ( meta_type = " + TskData.TSK_FS_META_TYPE_ENUM.TSK_FS_META_TYPE_REG.getValue() + ")"
                     + " AND ( mime_type IS NULL )"
diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryModule.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryModule.java
index 2dd4ba23627203cac06e1124a837ca17f6ce12d2..530e3eb7d689990fa8c8bf0cb255a6dbfe839258 100644
--- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryModule.java
+++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryModule.java
@@ -50,7 +50,6 @@
 import org.sleuthkit.datamodel.BlackboardArtifact;
 import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE;
 import org.sleuthkit.datamodel.Content;
-import org.sleuthkit.datamodel.DataSource;
 import org.sleuthkit.datamodel.TskCoreException;
 import org.sleuthkit.datamodel.TskData;
 
diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryTopComponent.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryTopComponent.java
index e9753daf5aea2ef678b72ecee7cfb0f7eb7520cc..927dc6b70e4e50b587bfb1a1ac589462fc5bb098 100644
--- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryTopComponent.java
+++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryTopComponent.java
@@ -65,7 +65,6 @@
 import org.sleuthkit.autopsy.coreutils.Logger;
 import org.sleuthkit.autopsy.coreutils.ThreadConfined;
 import org.sleuthkit.autopsy.imagegallery.datamodel.DrawableAttribute;
-import org.sleuthkit.autopsy.imagegallery.datamodel.DrawableDB;
 import org.sleuthkit.autopsy.imagegallery.datamodel.grouping.GroupManager;
 import org.sleuthkit.autopsy.imagegallery.gui.DataSourceCell;
 import org.sleuthkit.autopsy.imagegallery.gui.GuiUtils;
diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/OpenAction.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/OpenAction.java
index 230dd12867b484cce025e800ea91cc4859379210..5a921e613074c195d9423da7dee3329dc8dd2b2d 100644
--- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/OpenAction.java
+++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/OpenAction.java
@@ -69,7 +69,8 @@
     "OpenAction.stale.confDlg.msg=The image / video database may be out of date. "
     + "Do you want to update and listen for further ingest results?\n"
     + "Choosing 'yes' will update the database and enable listening to future ingests.",
-    "OpenAction.notAnalyzedDlg.msg=No image/video files available to display yet. Please run FileType and EXIF ingest modules.",
+    "OpenAction.notAnalyzedDlg.msg=No image/video files available to display yet.\n"
+        + "Please run FileType and EXIF ingest modules.",
     "OpenAction.stale.confDlg.title=Image Gallery"})
 public final class OpenAction extends CallableSystemAction {
 
diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableDB.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableDB.java
index dee725db34b09152b088fb714a45a3d769b73978..13eea6d654215c013c4eff02e1a1ab3fcdef08c7 100644
--- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableDB.java
+++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableDB.java
@@ -178,10 +178,10 @@ public final class DrawableDB {
      * DO NOT add in the middle.
      */
     public enum DrawableDbBuildStatusEnum {
-        UNKNOWN,        /// drawable db does not have an entry for this data source
-        IN_PROGRESS,    /// drawable db rebuild has been started for the data source
-        COMPLETE,       /// drawable db rebuild is complete for the data source
-        DEFAULT;        /// drawable db needs to be updated for this data source
+        UNKNOWN,        /// no known status
+        IN_PROGRESS,    /// ingest or db rebuild is in progress
+        COMPLETE,       /// All files in the data source have had file type detected
+        DEFAULT;        /// Not all files in the data source have had file type detected
     }
 
     //////////////general database logic , mostly borrowed from sleuthkitcase
diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DataSourceCell.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DataSourceCell.java
index 76190ad1efb6d9dbe4c81734f798e1dace0bdba4..7626c4fd776df520421ecb6b94c71a4d6a876e3b 100644
--- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DataSourceCell.java
+++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DataSourceCell.java
@@ -33,8 +33,19 @@ public class DataSourceCell extends ListCell<Optional<DataSource>> {
     private final Map<DataSource, Boolean> dataSourcesTooManyFiles;
     private final Map<Long, DrawableDB.DrawableDbBuildStatusEnum> dataSourcesDrawableDBStatus;
 
-    public DataSourceCell(Map<DataSource, Boolean> dataSourcesViewable, Map<Long, DrawableDB.DrawableDbBuildStatusEnum> dataSourcesDrawableDBStatus) {
-        this.dataSourcesTooManyFiles = dataSourcesViewable;
+    /**
+     * 
+     * @param dataSourcesTooManyFiles: a map of too many files indicator for 
+     *      each data source.  
+     *      Data sources with too many files may substantially slow down 
+     *      the system and hence are disabled for selection.
+     * @param dataSourcesDrawableDBStatus a map of drawable DB status for 
+     *      each data sources.
+     *      Data sources in DEFAULT state are not fully analyzed yet and are 
+     *      disabled for selection.
+     */
+    public DataSourceCell(Map<DataSource, Boolean> dataSourcesTooManyFiles, Map<Long, DrawableDB.DrawableDbBuildStatusEnum> dataSourcesDrawableDBStatus) {
+        this.dataSourcesTooManyFiles = dataSourcesTooManyFiles;
         this.dataSourcesDrawableDBStatus = dataSourcesDrawableDBStatus;
         
     }
diff --git a/release/update_autopsy_version.pl b/release/update_autopsy_version.pl
new file mode 100755
index 0000000000000000000000000000000000000000..0a115c8dafb7220c423f600dffca6af9b6952a41
--- /dev/null
+++ b/release/update_autopsy_version.pl
@@ -0,0 +1,268 @@
+#!/usr/bin/perl
+
+# Updates various Autopsy version numbers 
+
+use strict;
+use File::Copy;
+
+# global variables
+my $VER;
+
+
+my $TESTING = 0;
+print "TESTING MODE (no commits)\n" if ($TESTING);
+
+
+
+sub main {
+
+	# Get the Autopsy version argument
+	if (scalar (@ARGV) != 1) {
+	    print stderr "Missing release version argument (i.e.  4.9.0)\n";
+	    exit;
+	}
+	
+	$VER = $ARGV[0];
+	die "Invalid version number: $VER (1.2.3 or 1.2.3b1 expected)" unless ($VER =~ /^\d+\.\d+\.\d+(b\d+)?$/);
+	
+	
+	my $AUT_RELNAME = "autopsy-${VER}";
+	# Verify the tag doesn't already exist
+	exec_pipe(*OUT, "git tag | grep \"${AUT_RELNAME}\$\"");
+	my $foo = read_pipe_line(*OUT);
+	if ($foo ne "") {
+		print "Tag ${AUT_RELNAME} already exists\n";
+		print "Remove with 'git tag -d ${AUT_RELNAME}'\n";
+		die "stopping";
+	}
+	close(OUT);
+	
+	# Assume we running out of 'release' folder
+	chdir ".." or die "Error changing directories to root";
+	
+	
+	# verify_precheckin();
+	
+	
+	# Update the version info in that tag
+	update_project_properties();
+	update_doxygen_dev();
+	update_doxygen_user();
+	
+	print "Files updated.  You need to commit and push them\n";
+}
+
+
+
+
+
+######################################################
+# Utility functions
+
+
+# Function to execute a command and send output to pipe
+# returns handle
+# exec_pipe(HANDLE, CMD);
+sub exec_pipe {
+    my $handle = shift(@_);
+    my $cmd    = shift(@_);
+
+    die "Can't open pipe for exec_pipe"
+      unless defined(my $pid = open($handle, '-|'));
+
+    if ($pid) {
+        return $handle;
+    }
+    else {
+        $| = 1;
+        exec("$cmd") or die "Can't exec program: $!";
+    }
+}
+
+# Read a line of text from an open exec_pipe handle
+sub read_pipe_line {
+    my $handle = shift(@_);
+    my $out;
+
+    for (my $i = 0; $i < 100; $i++) {
+        $out = <$handle>;
+        return $out if (defined $out);
+    }
+    return $out;
+}
+
+
+# Prompt user for argument and return response
+sub prompt_user {
+    my $q = shift(@_);
+    print "$q: ";
+    $| = 1;
+    $_ = <STDIN>;
+    chomp;
+    return $_;
+}
+
+
+
+#############################################
+# File update methods
+
+
+
+# Verify that all files in the current source directory
+# are checked in.  dies if any are modified.
+sub verify_precheckin {
+
+    #system ("git pull");
+
+    print "Verifying everything is checked in\n";
+    exec_pipe(*OUT, "git status -s | grep \"^ M\"");
+
+    my $foo = read_pipe_line(*OUT);
+    if ($foo ne "") {
+        print "Files not checked in\n";
+        while ($foo ne "") {
+            print "$foo";
+            $foo = read_pipe_line(*OUT);
+        }
+        die "stopping" unless ($TESTING);
+    }
+    close(OUT);
+
+    print "Verifying everything is pushed\n";
+    exec_pipe(*OUT, "git status -sb | grep \"^##\" | grep \"ahead \"");
+    my $foo = read_pipe_line(*OUT);
+    if ($foo ne "") {
+            print "$foo";
+        print "Files not pushed to remote\n";
+        die "stopping" unless ($TESTING);
+    }
+    close(OUT);
+}
+
+
+
+# update the version in nbproject/project.properties 
+sub update_project_properties {
+
+    my $orig = "project.properties";
+    my $temp = "${orig}-bak";
+
+    print "Updating the version in ${orig}\n";
+    
+    chdir "nbproject" or die "cannot change into nbproject directory";
+    
+
+    open (CONF_IN, "<${orig}") or die "Cannot open ${orig}";
+    open (CONF_OUT, ">${temp}") or die "Cannot open ${temp}";
+
+    my $found = 0;
+    while (<CONF_IN>) {
+        if (/^app\.version=/) {
+            print CONF_OUT "app.version=$VER\n";
+            $found++;
+        }
+        else {
+            print CONF_OUT $_;
+        }
+    }
+    close (CONF_IN);
+    close (CONF_OUT);
+
+    if ($found != 1) {
+        die "$found (instead of 1) occurrences of app.version found in ${orig}";
+    }
+
+    unlink ($orig) or die "Error deleting ${orig}";
+    rename ($temp, $orig) or die "Error renaming tmp $orig file";
+    system("git add ${orig}") unless ($TESTING);
+    chdir ".." or die "Error changing directories back to root";
+}
+
+
+
+# update the dev docs
+sub update_doxygen_dev {
+
+    my $orig = "Doxyfile";
+    my $temp = "${orig}-bak";
+
+    print "Updating the version in ${orig} (Dev)\n";
+    
+    chdir "docs/doxygen" or die "cannot change into docs/doxygen directory";
+    
+
+    open (CONF_IN, "<${orig}") or die "Cannot open ${orig}";
+    open (CONF_OUT, ">${temp}") or die "Cannot open ${temp}";
+
+    my $found = 0;
+    while (<CONF_IN>) {
+        if (/^PROJECT_NUMBER/) {
+            print CONF_OUT "PROJECT_NUMBER = ${VER}\n";
+            $found++;
+        }
+        elsif (/^HTML_OUTPUT/) {
+            print CONF_OUT "HTML_OUTPUT = api-docs/${VER}/\n";
+            $found++;
+        }     
+        else {
+            print CONF_OUT $_;
+        }
+    }
+    close (CONF_IN);
+    close (CONF_OUT);
+
+    if ($found != 2) {
+        die "$found (instead of 2) occurrences of version found in (DEV) ${orig}";
+    }
+
+    unlink ($orig) or die "Error deleting ${orig}";
+    rename ($temp, $orig) or die "Error renaming tmp $orig file";
+    system("git add ${orig}") unless ($TESTING);
+    chdir "../.." or die "Error changing directories back to root";
+}
+
+
+# update the user docs 
+sub update_doxygen_user {
+
+    my $orig = "Doxyfile";
+    my $temp = "${orig}-bak";
+
+    print "Updating the version in ${orig} (User)\n";
+    
+    chdir "docs/doxygen-user" or die "cannot change into docs/doxygen-user directory";
+    
+
+    open (CONF_IN, "<${orig}") or die "Cannot open ${orig}";
+    open (CONF_OUT, ">${temp}") or die "Cannot open ${temp}";
+
+    my $found = 0;
+    while (<CONF_IN>) {
+        if (/^PROJECT_NUMBER/) {
+            print CONF_OUT "PROJECT_NUMBER = ${VER}\n";
+            $found++;
+        }
+        elsif (/^HTML_OUTPUT/) {
+            print CONF_OUT "HTML_OUTPUT = ${VER}\n";
+            $found++;
+        }     
+        else {
+            print CONF_OUT $_;
+        }
+    }
+    close (CONF_IN);
+    close (CONF_OUT);
+
+    if ($found != 2) {
+        die "$found (instead of 2) occurrences of version found in (USER) ${orig}";
+    }
+
+    unlink ($orig) or die "Error deleting ${orig}";
+    rename ($temp, $orig) or die "Error renaming tmp $orig file";
+    system("git add ${orig}") unless ($TESTING);
+    chdir "../.." or die "Error changing directories back to root";
+}
+
+
+main();
\ No newline at end of file
diff --git a/release/update_sleuthkit_version.pl b/release/update_sleuthkit_version.pl
new file mode 100755
index 0000000000000000000000000000000000000000..e630e4890bb6c0666fea434a4c84fd6f8dbb6454
--- /dev/null
+++ b/release/update_sleuthkit_version.pl
@@ -0,0 +1,199 @@
+#!/usr/bin/perl
+
+# Updates various TSK version numbers 
+# use this when the version of TSK that Autopsy depends on changes
+
+use strict;
+use File::Copy;
+
+# global variables
+my $VER;
+
+my $TESTING = 0;
+print "TESTING MODE (no commits)\n" if ($TESTING);
+
+
+sub main {
+
+	# Get the TSK version argument
+	if (scalar (@ARGV) != 1) {
+	    print stderr "Missing release version argument (i.e.  4.9.0)\n";
+	    exit;
+	}
+	
+	$VER = $ARGV[0];
+	die "Invalid version number: $VER (1.2.3 or 1.2.3b1 expected)" unless ($VER =~ /^\d+\.\d+\.\d+(b\d+)?$/);
+	
+	# Assume we running out of 'release' folder
+	chdir ".." or die "Error changing directories to root";
+	
+	# Update the version info in that tag
+	update_tsk_version();
+	update_core_project_properties();
+	update_core_project_xml();
+	
+	print "Files updated.  You need to commit and push them\n";
+}
+
+
+
+
+
+######################################################
+# Utility functions
+
+
+# Function to execute a command and send output to pipe
+# returns handle
+# exec_pipe(HANDLE, CMD);
+sub exec_pipe {
+    my $handle = shift(@_);
+    my $cmd    = shift(@_);
+
+    die "Can't open pipe for exec_pipe"
+      unless defined(my $pid = open($handle, '-|'));
+
+    if ($pid) {
+        return $handle;
+    }
+    else {
+        $| = 1;
+        exec("$cmd") or die "Can't exec program: $!";
+    }
+}
+
+# Read a line of text from an open exec_pipe handle
+sub read_pipe_line {
+    my $handle = shift(@_);
+    my $out;
+
+    for (my $i = 0; $i < 100; $i++) {
+        $out = <$handle>;
+        return $out if (defined $out);
+    }
+    return $out;
+}
+
+
+
+#############################################
+# File update methods
+
+
+
+# update the tskversion.xml
+sub update_tsk_version {
+
+    my $orig = "TSKVersion.xml";
+    my $temp = "${orig}-bak";
+
+    print "Updating the version in ${orig}\n";
+    
+    open (CONF_IN, "<${orig}") or die "Cannot open ${orig}";
+    open (CONF_OUT, ">${temp}") or die "Cannot open ${temp}";
+
+    my $found = 0;
+    while (<CONF_IN>) {
+        if (/name="TSK_VERSION" value=/) {
+            print CONF_OUT "    <property name=\"TSK_VERSION\" value=\"${VER}\"/>\n";
+            $found++;
+        }
+        else {
+            print CONF_OUT $_;
+        }
+    }
+    close (CONF_IN);
+    close (CONF_OUT);
+
+    if ($found != 1) {
+        die "$found (instead of 1) occurrences of app.version found in ${orig}";
+    }
+
+    unlink ($orig) or die "Error deleting ${orig}";
+    rename ($temp, $orig) or die "Error renaming tmp $orig file";
+    system("git add ${orig}") unless ($TESTING);
+    
+}
+
+
+
+sub update_core_project_properties {
+
+    my $orig = "project.properties";
+    my $temp = "${orig}-bak";
+
+    print "Updating the version in ${orig}\n";
+    
+    chdir "Core/nbproject" or die "cannot change into Core/nbproject directory";
+    
+
+    open (CONF_IN, "<${orig}") or die "Cannot open ${orig}";
+    open (CONF_OUT, ">${temp}") or die "Cannot open ${temp}";
+
+    my $found = 0;
+    while (<CONF_IN>) {
+        if (/^file\.reference\.sleuthkit\-postgresql-/) {
+            print CONF_OUT "file.reference.sleuthkit-postgresql-${VER}.jar=release/modules/ext/sleuthkit-postgresql-${VER}.jar\n";
+            $found++;
+        }
+            
+        else {
+            print CONF_OUT $_;
+        }
+    }
+    close (CONF_IN);
+    close (CONF_OUT);
+
+    if ($found != 1) {
+        die "$found (instead of 1) occurrences of version found in ${orig}";
+    }
+
+    unlink ($orig) or die "Error deleting ${orig}";
+    rename ($temp, $orig) or die "Error renaming tmp $orig file";
+    system("git add ${orig}") unless ($TESTING);
+    chdir "../.." or die "Error changing directories back to root";
+}
+
+sub update_core_project_xml {
+
+    my $orig = "project.xml";
+    my $temp = "${orig}-bak";
+
+    print "Updating the version in ${orig}\n";
+    
+    chdir "Core/nbproject" or die "cannot change into Core/nbproject directory";
+    
+    open (CONF_IN, "<${orig}") or die "Cannot open ${orig}";
+    open (CONF_OUT, ">${temp}") or die "Cannot open ${temp}";
+
+    my $found = 0;
+    while (<CONF_IN>) {
+        if (/<runtime-relative-path>ext\/sleuthkit-postgresql/) {
+            print CONF_OUT "                <runtime-relative-path>ext/sleuthkit-postgresql-${VER}.jar</runtime-relative-path>\n";
+            $found++;
+        }
+        elsif (/<binary-origin>release\/modules\/ext\/sleuthkit-postgresql/) {
+            print CONF_OUT "                <binary-origin>release/modules/ext/sleuthkit-postgresql-${VER}.jar</binary-origin>\n";
+            $found++;
+        }    
+        else {
+            print CONF_OUT $_;
+        }
+    }
+    close (CONF_IN);
+    close (CONF_OUT);
+
+    if ($found != 2) {
+        die "$found (instead of 2) occurrences of version found in ${orig}";
+    }
+
+    unlink ($orig) or die "Error deleting ${orig}";
+    rename ($temp, $orig) or die "Error renaming tmp $orig file";
+    system("git add ${orig}") unless ($TESTING);
+    chdir "../.." or die "Error changing directories back to root";
+}
+
+
+
+
+main();
\ No newline at end of file