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