diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/BitmapCommit.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/BitmapCommit.java
index cbf1ccf..33c478e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/BitmapCommit.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/BitmapCommit.java
@@ -16,13 +16,26 @@
  * A commit object for which a bitmap index should be built.
  */
 public final class BitmapCommit extends ObjectId {
+
 	private final boolean reuseWalker;
+
 	private final int flags;
 
+	private final boolean addToIndex;
+
 	BitmapCommit(AnyObjectId objectId, boolean reuseWalker, int flags) {
 		super(objectId);
 		this.reuseWalker = reuseWalker;
 		this.flags = flags;
+		this.addToIndex = false;
+	}
+
+	BitmapCommit(AnyObjectId objectId, boolean reuseWalker, int flags,
+				 boolean addToIndex) {
+		super(objectId);
+		this.reuseWalker = reuseWalker;
+		this.flags = flags;
+		this.addToIndex = addToIndex;
 	}
 
 	boolean isReuseWalker() {
@@ -32,4 +45,119 @@
 	int getFlags() {
 		return flags;
 	}
+
+	/**
+	 * Whether corresponding bitmap should be added to PackBitmapIndexBuilder.
+	 *
+	 * @return true if the corresponding bitmap should be added to
+	 *         PackBitmapIndexBuilder.
+	 */
+	public boolean isAddToIndex() {
+		return addToIndex;
+	}
+
+	/**
+	 * Get a builder of BitmapCommit whose object id is {@code objId}.
+	 *
+	 * @param objId
+	 *            the object id of the BitmapCommit
+	 * @return a BitmapCommit builder with object id set.
+	 */
+	public static Builder newBuilder(AnyObjectId objId) {
+		return new Builder().setId(objId);
+	}
+
+	/**
+	 * Get a builder of BitmapCommit whose fields are copied from
+	 * {@code commit}.
+	 *
+	 * @param commit
+	 *            the bitmap commit the builder is copying from
+	 * @return a BitmapCommit build with fields copied from an existing bitmap
+	 *         commit.
+	 */
+	public static Builder copyFrom(BitmapCommit commit) {
+		return new Builder().setId(commit)
+				.setReuseWalker(commit.isReuseWalker())
+				.setFlags(commit.getFlags())
+				.setAddToIndex(commit.isAddToIndex());
+	}
+
+	/**
+	 * Builder of BitmapCommit.
+	 */
+	public static class Builder {
+		private AnyObjectId objectId;
+
+		private boolean reuseWalker;
+
+		private int flags;
+
+		private boolean addToIndex;
+
+		// Prevent default constructor.
+		private Builder() {
+		}
+
+		/**
+		 * Set objectId of the builder.
+		 *
+		 * @param objectId
+		 *            the object id of the BitmapCommit
+		 * @return the builder itself
+		 */
+		public Builder setId(AnyObjectId objectId) {
+			this.objectId = objectId;
+			return this;
+		}
+
+		/**
+		 * Set reuseWalker of the builder.
+		 *
+		 * @param reuseWalker
+		 *            whether the BitmapCommit should reuse bitmap walker when
+		 *            walking objects
+		 * @return the builder itself
+		 */
+		public Builder setReuseWalker(boolean reuseWalker) {
+			this.reuseWalker = reuseWalker;
+			return this;
+		}
+
+		/**
+		 * Set flags of the builder.
+		 *
+		 * @param flags
+		 *            the flags of the BitmapCommit
+		 * @return the builder itself
+		 */
+		public Builder setFlags(int flags) {
+			this.flags = flags;
+			return this;
+		}
+
+		/**
+		 * Set whether whether the bitmap of the BitmapCommit should be added to
+		 * PackBitmapIndexBuilder when building bitmap index file.
+		 *
+		 * @param addToIndex
+		 *            whether the bitmap of the BitmapCommit should be added to
+		 *            PackBitmapIndexBuilder when building bitmap index file
+		 * @return the builder itself
+		 */
+		public Builder setAddToIndex(boolean addToIndex) {
+			this.addToIndex = addToIndex;
+			return this;
+		}
+
+		/**
+		 * Builds BitmapCommit from the builder.
+		 *
+		 * @return the new BitmapCommit.
+		 */
+		public BitmapCommit build() {
+			return new BitmapCommit(objectId, reuseWalker, flags,
+					addToIndex);
+		}
+	}
 }
\ No newline at end of file
