diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.h b/bindings/java/jni/dataModel_SleuthkitJNI.h
index 53c804f6ee7b060d5121be6c320a9be42406d446..157e402672140603a21a9c57dd7cbd994894da6e 100644
--- a/bindings/java/jni/dataModel_SleuthkitJNI.h
+++ b/bindings/java/jni/dataModel_SleuthkitJNI.h
@@ -39,7 +39,7 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_newCaseDbNat
  * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)J
  */
 JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_newCaseDbMultiNat
-    (JNIEnv *env, jclass cls, jstring host, jstring port, jstring user, jstring pass, jint asdf, jstring dbName);
+  (JNIEnv *, jclass, jstring, jstring, jstring, jstring, jint, jstring);
 
 /*
  * Class:     org_sleuthkit_datamodel_SleuthkitJNI
diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java
index a24a8f4a8e6e80ef995ceafbe8ef098dba86e5c8..f4cb79541e900077a5497680da7cf1c57863fc2d 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java
@@ -87,14 +87,15 @@ public class SleuthkitCase {
 	 * @param dbPath The full path to a SQLite case database file.
 	 * @param caseHandle A handle to a case database object in the native code
 	 * SleuthKit layer.
+	 * @param dbType The type of database we're dealing with
 	 * @throws Exception
 	 */
-	private SleuthkitCase(String dbPath, SleuthkitJNI.CaseDbHandle caseHandle) throws Exception {
+	private SleuthkitCase(String dbPath, SleuthkitJNI.CaseDbHandle caseHandle, DbType dbType) throws Exception {
 		Class.forName("org.sqlite.JDBC");
 		this.dbPath = dbPath;
 		this.caseDirPath = new java.io.File(dbPath).getParentFile().getAbsolutePath();
 		this.connections = new SQLiteConnections(dbPath);
-		init(caseHandle);
+		init(caseHandle, dbType);
 		updateDatabaseSchema(dbPath);
 		logSQLiteJDBCDriverInfo();
 	}
@@ -109,22 +110,23 @@ private SleuthkitCase(String dbPath, SleuthkitJNI.CaseDbHandle caseHandle) throw
 	 * @param userName The user name to use to connect to the case database.
 	 * @param password The password to use to connect to the case database.
 	 * @param caseHandle A handle to a case database object in the native code
+	 * @param dbType The type of database we're dealing with
 	 * SleuthKit layer.
 	 * @param caseDirPath The path to the root case directory.
 	 * @throws Exception
 	 */
-	private SleuthkitCase(String host, int port, String dbName, String userName, String password, SleuthkitJNI.CaseDbHandle caseHandle, String caseDirPath) throws Exception {
+	private SleuthkitCase(String host, int port, String dbName, String userName, String password, SleuthkitJNI.CaseDbHandle caseHandle, String caseDirPath, DbType dbType) throws Exception {
 		this.dbPath = "";
 		this.caseDirPath = caseDirPath;
 		this.connections = new PostgreSQLConnections(host, port, dbName, userName, password);
-		init(caseHandle);
+		init(caseHandle, dbType);
 		updateSchemaVersion();
 	}
 
-	private void init(SleuthkitJNI.CaseDbHandle caseHandle) throws Exception {
+	private void init(SleuthkitJNI.CaseDbHandle caseHandle, DbType dbType) throws Exception {
 		this.caseHandle = caseHandle;
-		initBlackboardArtifactTypes();
-		initBlackboardAttributeTypes();
+		initBlackboardArtifactTypes(dbType);
+		initBlackboardAttributeTypes(dbType);
 		initNextArtifactId();
 	}
 
@@ -133,7 +135,7 @@ private void init(SleuthkitJNI.CaseDbHandle caseHandle) throws Exception {
 	 *
 	 * @throws SQLException
 	 */
-	private void initBlackboardArtifactTypes() throws SQLException, TskCoreException {
+	private void initBlackboardArtifactTypes(DbType dbType) throws SQLException, TskCoreException {
 		CaseDbConnection connection = connections.getConnection();
 		Statement statement = null;
 		ResultSet resultSet = null;
@@ -150,6 +152,10 @@ private void initBlackboardArtifactTypes() throws SQLException, TskCoreException
 			}
 		} finally {
 			closeResultSet(resultSet);
+			if(dbType==DbType.POSTGRESQL) {
+				int newPrimaryKeyIndex = Collections.max(Arrays.asList(ARTIFACT_TYPE.values())).getTypeID()+1;
+				statement.execute("ALTER SEQUENCE blackboard_artifact_types_artifact_type_id_seq RESTART WITH "+newPrimaryKeyIndex);
+			}
 			closeStatement(statement);
 		}
 	}
@@ -160,7 +166,7 @@ private void initBlackboardArtifactTypes() throws SQLException, TskCoreException
 	 *
 	 * @throws SQLException
 	 */
-	private void initBlackboardAttributeTypes() throws SQLException, TskCoreException {
+	private void initBlackboardAttributeTypes(DbType dbType) throws SQLException, TskCoreException {
 		CaseDbConnection connection = connections.getConnection();
 		Statement statement = null;
 		ResultSet resultSet = null;
@@ -177,6 +183,10 @@ private void initBlackboardAttributeTypes() throws SQLException, TskCoreExceptio
 			}
 		} finally {
 			closeResultSet(resultSet);
+			if (dbType == DbType.POSTGRESQL) {
+				int newPrimaryKeyIndex = Collections.max(Arrays.asList(ATTRIBUTE_TYPE.values())).getTypeID() + 1;
+				statement.execute("ALTER SEQUENCE blackboard_attribute_types_attribute_type_id_seq RESTART WITH " + newPrimaryKeyIndex);
+			}
 			closeStatement(statement);
 		}
 	}
@@ -576,7 +586,7 @@ public void releaseSharedLock() {
 	public static SleuthkitCase openCase(String dbPath) throws TskCoreException {
 		try {
 			final SleuthkitJNI.CaseDbHandle caseHandle = SleuthkitJNI.openCaseDb(dbPath);
-			return new SleuthkitCase(dbPath, caseHandle);
+			return new SleuthkitCase(dbPath, caseHandle, DbType.UNKNOWN);
 		} catch (Exception ex) {
 			throw new TskCoreException("Failed to open case database at " + dbPath, ex);
 		}
@@ -596,7 +606,7 @@ public static SleuthkitCase openCase(String databaseName, CaseDbConnectionInfo i
 			if (info.getDbType() != DbType.UNKNOWN) {
 				if (info.settingsValid()) {
 					final SleuthkitJNI.CaseDbHandle caseHandle = SleuthkitJNI.openCaseDb(databaseName, info);
-					return new SleuthkitCase(info.getHost(), Integer.parseInt(info.getPort()), databaseName, info.getUserName(), info.getPassword(), caseHandle, caseDir);
+					return new SleuthkitCase(info.getHost(), Integer.parseInt(info.getPort()), databaseName, info.getUserName(), info.getPassword(), caseHandle, caseDir, info.getDbType());
 				} else {
 					throw new TskCoreException("Bad database credentials.");
 				}
@@ -618,7 +628,7 @@ public static SleuthkitCase openCase(String databaseName, CaseDbConnectionInfo i
 	public static SleuthkitCase newCase(String dbPath) throws TskCoreException {
 		try {
 			SleuthkitJNI.CaseDbHandle caseHandle = SleuthkitJNI.newCaseDb(dbPath);
-			return new SleuthkitCase(dbPath, caseHandle);
+			return new SleuthkitCase(dbPath, caseHandle, DbType.UNKNOWN);
 		} catch (Exception ex) {
 			throw new TskCoreException("Failed to create case database at " + dbPath, ex);
 		}
@@ -636,7 +646,7 @@ public static SleuthkitCase newCase(String databaseName, CaseDbConnectionInfo in
 		try {
 			SleuthkitJNI.CaseDbHandle caseHandle = SleuthkitJNI.newCaseDb(databaseName, info);
 			return new SleuthkitCase(info.getHost(), Integer.parseInt(info.getPort()),
-					databaseName, info.getUserName(), info.getPassword(), caseHandle, caseDirPath);
+					databaseName, info.getUserName(), info.getPassword(), caseHandle, caseDirPath, info.getDbType());
 		} catch (Exception ex) {
 			throw new TskCoreException("Failed to create case database " + databaseName, ex);
 		}