diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 69fc46b..7ac0164 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -166,6 +166,7 @@
 Günther Kögel
 Harish Prabandham
 Haroon Rafique
+Helder Pereira
 Hiroaki Nakamura
 Holger Engels
 Holger Joest
diff --git a/contributors.xml b/contributors.xml
index bd46c45..3904272 100644
--- a/contributors.xml
+++ b/contributors.xml
@@ -697,6 +697,10 @@
     <last>Rafique</last>
   </name>
   <name>
+    <first>Helder</first>
+    <last>Pereira</last>
+  </name>
+  <name>
     <first>Hiroaki</first>
     <last>Nakamura</last>
   </name>
diff --git a/src/main/org/apache/tools/zip/ZipOutputStream.java b/src/main/org/apache/tools/zip/ZipOutputStream.java
index 75acf59..a2d44ed 100644
--- a/src/main/org/apache/tools/zip/ZipOutputStream.java
+++ b/src/main/org/apache/tools/zip/ZipOutputStream.java
@@ -326,6 +326,11 @@
     private final Calendar calendarInstance = Calendar.getInstance();
 
     /**
+     * Temporary buffer used for the {@link #write(int)} method.
+     */
+    private final byte[] oneByte = new byte[1];
+
+    /**
      * Creates a new ZIP OutputStream filtering the underlying stream.
      * @param out the outputstream to zip
      * @since 1.1
@@ -902,6 +907,19 @@
     }
 
     /**
+     * Writes a byte to ZIP entry.
+     *
+     * @param b the byte to write
+     * @throws IOException on error
+     * @since Ant 1.10.10
+     */
+    @Override
+    public void write(int b) throws IOException {
+        oneByte[0] = (byte) (b & 0xff);
+        write(oneByte, 0, 1);
+    }
+
+    /**
      * Writes bytes to ZIP entry.
      *
      * @param b the byte array to write
diff --git a/src/tests/junit/org/apache/tools/zip/ZipOutputStreamTest.java b/src/tests/junit/org/apache/tools/zip/ZipOutputStreamTest.java
index 5e94c19..0777630 100644
--- a/src/tests/junit/org/apache/tools/zip/ZipOutputStreamTest.java
+++ b/src/tests/junit/org/apache/tools/zip/ZipOutputStreamTest.java
@@ -21,8 +21,14 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+import java.util.zip.ZipInputStream;
 
 import static org.junit.Assert.assertEquals;
 
@@ -70,4 +76,18 @@
                      ZipUtil.adjustToLong(2 * Integer.MAX_VALUE));
     }
 
+    @Test
+    public void testWriteAndReadManifest() throws IOException {
+        try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+            try (ZipOutputStream zos = new ZipOutputStream(baos)) {
+                zos.putNextEntry(new ZipEntry(JarFile.MANIFEST_NAME));
+                new Manifest().write(zos);
+            }
+            try (ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+                 ZipInputStream zis = new ZipInputStream(bais)) {
+                zis.getNextEntry();
+                zis.closeEntry();
+            }
+        }
+    }
 }
