diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectWriter.java
index 60e85eb57f2639aa4e4b596e4e75b9edb39bee6a..b75328330f412c1ea04059f3ac48741b0a058f21 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectWriter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectWriter.java
@@ -78,8 +78,6 @@ public class ObjectWriter {
 
 	private final MessageDigest md;
 
-	private final Deflater def;
-
 	/**
 	 * Construct an Object writer for the specified repository
 	 * @param d
@@ -88,7 +86,6 @@ public ObjectWriter(final Repository d) {
 		r = d;
 		buf = new byte[8192];
 		md = Constants.newMessageDigest();
-		def = new Deflater(r.getConfig().getCore().getCompression());
 	}
 
 	/**
@@ -309,6 +306,7 @@ ObjectId writeObject(final int type, long len, final InputStream is,
 		final DeflaterOutputStream deflateStream;
 		final FileOutputStream fileStream;
 		ObjectId id = null;
+		Deflater def = null;
 
 		if (store) {
 			t = File.createTempFile("noz", null, r.getObjectsDirectory());
@@ -320,7 +318,7 @@ ObjectId writeObject(final int type, long len, final InputStream is,
 
 		md.reset();
 		if (store) {
-			def.reset();
+			def = new Deflater(r.getConfig().getCore().getCompression());
 			deflateStream = new DeflaterOutputStream(fileStream, def);
 		} else
 			deflateStream = null;
@@ -374,6 +372,9 @@ ObjectId writeObject(final int type, long len, final InputStream is,
 					t.delete();
 				}
 			}
+			if (def != null) {
+				def.end();
+			}
 		}
 
 		if (t == null)