diff --git a/bindings/java/src/org/sleuthkit/datamodel/TimelineEventArtifactTypeImpl.java b/bindings/java/src/org/sleuthkit/datamodel/TimelineEventArtifactTypeImpl.java
index bee1ca8845cca7ee63e1849c06ba9c1439f2ac1a..fef5c141e5981d053268bcab4c9fa2343a540a61 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/TimelineEventArtifactTypeImpl.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/TimelineEventArtifactTypeImpl.java
@@ -39,6 +39,10 @@ class TimelineEventArtifactTypeImpl extends TimelineEventTypeImpl {
 	private final TSKCoreCheckedFunction<BlackboardArtifact, String> medExtractor;
 	private final TSKCoreCheckedFunction<BlackboardArtifact, String> shortExtractor;
 	private final TSKCoreCheckedFunction<BlackboardArtifact, TimelineEventDescriptionWithTime> artifactParsingFunction;
+	
+	private static final int MAX_SHORT_DESCRIPTION_LENGTH = 500;
+	private static final int MAX_MED_DESCRIPTION_LENGTH = 500;
+	private static final int MAX_FULL_DESCRIPTION_LENGTH = 1024;
 
 	TimelineEventArtifactTypeImpl(int typeID, String displayName,
 			TimelineEventType superType,
@@ -130,8 +134,20 @@ TimelineEventDescriptionWithTime makeEventDescription(BlackboardArtifact artifac
 
 		//combine descriptions in standard way
 		String shortDescription = extractShortDescription(artifact);
+		if (shortDescription.length() > MAX_SHORT_DESCRIPTION_LENGTH) {
+			shortDescription = shortDescription.substring(0, MAX_SHORT_DESCRIPTION_LENGTH);
+		}
+
 		String medDescription = shortDescription + " : " + extractMedDescription(artifact);
+		if (medDescription.length() > MAX_MED_DESCRIPTION_LENGTH) {
+			medDescription = medDescription.substring(0, MAX_MED_DESCRIPTION_LENGTH);
+		}
+
 		String fullDescription = medDescription + " : " + extractFullDescription(artifact);
+		if (fullDescription.length() > MAX_FULL_DESCRIPTION_LENGTH) {
+			fullDescription = fullDescription.substring(0, MAX_FULL_DESCRIPTION_LENGTH);
+		}
+		
 		return new TimelineEventDescriptionWithTime(timeAttribute.getValueLong(), shortDescription, medDescription, fullDescription);
 	}
 
diff --git a/bindings/java/src/org/sleuthkit/datamodel/TimelineEventType.java b/bindings/java/src/org/sleuthkit/datamodel/TimelineEventType.java
index 4d1563b7957a805defa02c5824541ce57353a9d9..6339eb2c0d146d79315c95c4bdb4d04069612280 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/TimelineEventType.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/TimelineEventType.java
@@ -46,6 +46,7 @@
 public interface TimelineEventType extends Comparable<TimelineEventType> {
 	
 	static final int EMAIL_FULL_DESCRIPTION_LENGTH_MAX = 150;
+	static final int EMAIL_TO_FROM_LENGTH_MAX = 75;
 
 	String getDisplayName();
 
@@ -298,9 +299,15 @@ public SortedSet<TimelineEventType> getSubTypes() {
 			new BlackboardArtifact.Type(TSK_EMAIL_MSG),
 			new Type(TSK_DATETIME_SENT),
 			artf -> {
-				final BlackboardAttribute emailFrom = getAttributeSafe(artf, new Type(TSK_EMAIL_FROM));
-				final BlackboardAttribute emailTo = getAttributeSafe(artf, new Type(TSK_EMAIL_TO));
-				return stringValueOf(emailFrom) + " to " + stringValueOf(emailTo); // NON-NLS
+				String emailFrom = stringValueOf(getAttributeSafe(artf, new Type(TSK_EMAIL_FROM)));
+				if (emailFrom.length() > EMAIL_TO_FROM_LENGTH_MAX) {
+					emailFrom = emailFrom.substring(0, EMAIL_TO_FROM_LENGTH_MAX);
+				}
+				String emailTo = stringValueOf(getAttributeSafe(artf, new Type(TSK_EMAIL_TO)));
+				if (emailTo.length() > EMAIL_TO_FROM_LENGTH_MAX) {
+					emailTo = emailTo.substring(0, EMAIL_TO_FROM_LENGTH_MAX);
+				}
+				return emailFrom + " to " + emailTo; // NON-NLS
 			},
 			new AttributeExtractor(new Type(TSK_SUBJECT)),
 			artf -> {