diff --git a/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java b/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java
index 27778032d5de2d7873bf14c5c1197e70d912dc9d..4204a73deffcab7b8ae27dd1a5b042c5d28fde42 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java
@@ -18,11 +18,13 @@
  */
 package org.sleuthkit.datamodel;
 
+import com.google.common.annotations.Beta;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -125,12 +127,11 @@ public Content getParent() throws TskCoreException {
 		// It is possible that multiple threads could be doing this calculation
 		// simultaneously, but it's worth the potential extra processing to prevent deadlocks.
 		if (parent == null) {
-			ObjectInfo parentInfo;
-			parentInfo = db.getParentInfo(this);
-			if (parentInfo == null) {
+			Optional<Long> parentIdOpt = getParentId();
+			if (!parentIdOpt.isPresent()) {
 				parent = null;
 			} else {
-				parent = db.getContentById(parentInfo.getId());
+				parent = db.getContentById(parentIdOpt.get());
 			}
 		}
 		return parent;
@@ -140,6 +141,28 @@ void setParent(Content parent) {
 		this.parent = parent;
 	}
 
+	/**
+	 * Returns the parent object id of the content or empty if no parent can be
+	 * identified.
+	 *
+	 * @return An optional of the parent object id.
+	 *
+	 * @throws TskCoreException
+	 */
+	@Beta
+	public Optional<Long> getParentId() throws TskCoreException {
+		if (parentId == UNKNOWN_ID) {
+			ObjectInfo parentInfo = db.getParentInfo(this);
+			if (parentInfo != null) {
+				parentId = parentInfo.getId();
+			}
+		}
+
+		return parentId == UNKNOWN_ID
+				? Optional.empty()
+				: Optional.of(parentId);
+	}
+
 	/**
 	 * Set the ID of the this AbstractContent's parent
 	 *
diff --git a/bindings/java/src/org/sleuthkit/datamodel/BlackboardArtifact.java b/bindings/java/src/org/sleuthkit/datamodel/BlackboardArtifact.java
index 97695afe6648174f77da3a3fbe207cee71cf7f74..fba83e40ebd9c4d3d87817773af9ba14ae281ccd 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/BlackboardArtifact.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/BlackboardArtifact.java
@@ -18,6 +18,7 @@
  */
 package org.sleuthkit.datamodel;
 
+import com.google.common.annotations.Beta;
 import java.io.Serializable;
 import java.io.UnsupportedEncodingException;
 import java.sql.SQLException;
@@ -177,7 +178,8 @@ public long getObjectID() {
 	 *
 	 * @return The data source object id, may be null.
 	 */
-	Long getDataSourceObjectID() {
+	@Beta
+	public Long getDataSourceObjectID() {
 		return this.dataSourceObjId;
 	}