diff --git a/lib/Makefile.am b/lib/Makefile.am
index 7fc379f..b9bee68 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -5,6 +5,8 @@
 libzip_a_SOURCES=zip_open.c zip_close.c zip_err_str.c zip_name_locate.c \
 	zip_fopen.c zip_fopen_index.c zip_fclose.c zip_fread.c \
 	zip_add.c zip_repalce.c zip_add_zip.c zip_replace_zip.c \
+	zip_add_data.c zip_replace_data.c zip_add_file.c zip_replace_file.c \
+	zip_delete.c zip_unchange.c \
 	zf_new_free.c
 
 BUILT_SOURCES=zip_err_str.c
diff --git a/lib/zip.h b/lib/zip.h
index 9900bcc..c2c89db 100644
--- a/lib/zip.h
+++ b/lib/zip.h
@@ -118,20 +118,26 @@
 
 /* high level routines to modify zip file */
 
-int zip_unchange(struct zip *zf, int idx);
 int zip_rename(struct zip *zf, int idx, char *name);
-int zip_add_file(struct zip *zf, char *name, FILE *file, int start, int len);
-int zip_add_data(struct zip *zf, char *name, char *buf, int start, int len);
-int zip_add_zip(struct zip *zf, char *name, struct zip *srczf, int srcidx,
-		int start, int len);
-int zip_replace_file(struct zip *zf, int idx, char *name, FILE *file,
-		     int start, int len);
-int zip_replace_data(struct zip *zf, int idx, char *name, char *buf,
-		     int start, int len);
-int zip_replace_zip(struct zip *zf, int idx, char *name,
-		    struct zip *srczf, int srcidx, int start, int len);
-
 int zip_delete(struct zip *zf, int idx);
 
+int zip_add_data(struct zip *zf, char *name, struct zip_meta *meta,
+		 char *data, int len, int freep);
+int zip_replace_data(struct zip *zf, int idx, char *name,
+		     struct zip_meta *meta,
+		     char *data, int len, int freep);
+int zip_add_file(struct zip *zf, char *name, struct zip_meta *meta,
+		 FILE *file, int start, int len);
+int zip_replace_file(struct zip *zf, int idx, char *name,
+		     struct zip_meta *meta,
+		     FILE *file, int start, int len);
+int zip_add_zip(struct zip *zf, char *name, struct zip_meta *meta,
+		struct zip *srczf, int srcidx, int start, int len);
+int zip_replace_zip(struct zip *zf, int idx, char *name,
+		    struct zip_meta *meta,
+		    struct zip *srczf, int srcidx, int start, int len)
+
+int zip_unchange(struct zip *zf, int idx);
+
 
 #endif /* _HAD_ZIP_H */
diff --git a/lib/zip_add.c b/lib/zip_add.c
index 1e3fc65..a3ec59b 100644
--- a/lib/zip_add.c
+++ b/lib/zip_add.c
@@ -4,9 +4,8 @@
 
 
 int
-zip_add(struct zip *zf, char *name, zip_read_func *fn, void *state, int comp)
+zip_add(struct zip *zf, char *name, struct zip_meta *meta,
+	zip_read_func *fn, void *state, int comp)
 {
-    _zip_new_entry(zf);
-
-    return zip_replace(zf, zf->nentry-1, name, fn, state, comp);
+    return zip_replace(zf, -1, name, meta, fn, state, comp);
 }
diff --git a/lib/zip_add_data.c b/lib/zip_add_data.c
new file mode 100644
index 0000000..50715bb
--- /dev/null
+++ b/lib/zip_add_data.c
@@ -0,0 +1,11 @@
+#include "zip.h"
+#include "zipint.h"
+
+
+
+int
+zip_add_data(struct zip *zf, char *name, struct zip_meta *meta,
+	    char *data, int len, int freep)
+{
+    return zip_replace_data(zf, -1, name, meta, data, len, freep);
+}
diff --git a/lib/zip_add_file.c b/lib/zip_add_file.c
new file mode 100644
index 0000000..bc7490a
--- /dev/null
+++ b/lib/zip_add_file.c
@@ -0,0 +1,11 @@
+#include "zip.h"
+#include "zipint.h"
+
+
+
+int
+zip_add_file(struct zip *zf, char *name, struct zip_meta *meta,
+	    FILE *file, int start, int len)
+{
+    return zip_replace_file(zf, -1, name, meta, file, start, len);
+}
diff --git a/lib/zip_add_zip.c b/lib/zip_add_zip.c
index 063a19b..772c913 100644
--- a/lib/zip_add_zip.c
+++ b/lib/zip_add_zip.c
@@ -4,8 +4,8 @@
 
 
 int
-zip_add_zip(struct zip *zf, char *name,
+zip_add_zip(struct zip *zf, char *name, struct zip_meta *meta,
 	    struct zip *srczf, int srcidx, int start, int len)
 {
-    return zip_replace_zip(zf, -1, name, srczf, srcidx, start, len);
+    return zip_replace_zip(zf, -1, name, meta, srczf, srcidx, start, len);
 }
diff --git a/lib/zip_delete.c b/lib/zip_delete.c
new file mode 100644
index 0000000..332fe1e
--- /dev/null
+++ b/lib/zip_delete.c
@@ -0,0 +1,23 @@
+#include "zip.h"
+#include "zipint.h"
+
+
+
+int
+zip_delete(struct zip *zf, int idx)
+{
+    if (idx >= zf->nentry || idx < 0) {
+	zip_err = ZIP_NOENT;
+	return -1;
+    }
+
+    if (_zip_unchange_data(zf, idx) != 0)
+	return -1;
+
+    zf->changes = 1;
+    zf->entry[idx].state = Z_DELETED;
+
+    return 0;
+}
+
+
diff --git a/lib/zip_rename.c b/lib/zip_rename.c
new file mode 100644
index 0000000..f094003
--- /dev/null
+++ b/lib/zip_rename.c
@@ -0,0 +1,22 @@
+#include "zip.h"
+#include "zipint.h"
+
+
+
+int
+zip_rename(struct zip *zf, int idx, char *name)
+{
+    if (idx >= zf->nentry || idx < 0) {
+	zip_err = ZIP_NOENT;
+	return -1;
+    }
+
+    if (zf->entry[idx].state == Z_UNCHANGED) 
+	zf->entry[idx].state = Z_RENAMED;
+    
+    zf->changes = 1;
+
+    _zip_set_name(zf, idx, name);
+
+    return 0;
+}
diff --git a/lib/zip_replace.c b/lib/zip_replace.c
index 9adf5b7..84d9523 100644
--- a/lib/zip_replace.c
+++ b/lib/zip_replace.c
@@ -4,11 +4,15 @@
 
 
 int
-zip_replace(struct zip *zf, int idx, char *name,
+zip_replace(struct zip *zf, int idx, char *name, struct zip_meta *meta,
 	    zip_read_func *fn, void *state, int comp)
 {
-    if (idx == -1)
-	zip_add(zf, name, fn, state, comp);
+    if (idx == -1) {
+	if (_zip_new_entry(zf) == NULL)
+	    return -1;
+
+	idx = zf->nentry - 1;
+    }
     
     if (idx < 0 || idx >= zf->nentry) {
 	zip_err = ZERR_NOENT;
@@ -23,7 +27,7 @@
     
     zf->changes = 1;
     zf->entry[idx].state = Z_REPLACED;
-
+    zf->entry[idx].ch_meta = meta;
     zf->entry[idx].ch_func = fn;
     zf->entry[idx].ch_data = state;
     zf->entry[idx].ch_comp = comp;
diff --git a/lib/zip_replace_data.c b/lib/zip_replace_data.c
new file mode 100644
index 0000000..994e4cc
--- /dev/null
+++ b/lib/zip_replace_data.c
@@ -0,0 +1,75 @@
+#include <stdlib.h>
+
+#include "zip.h"
+#include "zipint.h"
+
+struct read_data {
+    char *buf, *data;
+    int size;
+    int freep;
+};
+
+static zip_read_func read_data;
+
+
+
+int
+zip_replace_data(struct zf *zf, int idx, char *name, struct zip_meta *meta,
+		 char *data, int len, int freep)
+{
+    struct read_data *f;
+    
+    if (srcidx < -1 || srcidx >= srczf->nentry) {
+	zip_err = ZERR_NOENT;
+	return -1;
+    }
+
+    if ((f=(struct read_data *)malloc(sizeof(struct read_data))) == NULL) {
+	zip_err = ZERR_MEMORY;
+	return -1;
+    }
+
+    f->data = data;
+    f->len = len;
+    f->freep = freep;
+    
+    return zip_replace(zf, idx, name, meta, read_data, f, 0);
+}
+
+
+
+static int
+read_data(void *state, void *data, int len, enum zip_cmd cmd)
+{
+    struct read_data *z;
+    char *buf;
+    int n;
+
+    z = (struct read_file *)state;
+    buf = (char *)data;
+
+    switch (cmd) {
+    case ZIP_CMD_INIT:
+	z->buf = z->data;
+	return 0;
+	
+    case ZIP_CMD_READ:
+	n = len > z->len ? z->len : len;
+
+	memcpy(buf, z->buf, n);
+	z->buf += n;
+	z->len -= n;
+
+	return n;
+	
+    case ZIP_CMD_META:
+	return 0;
+
+    case ZIP_CMD_CLOSE:
+	if (z->freep) {
+	    free(z->data);
+	    z->data = NULL;
+	}
+	return 0;
+    }
+}
diff --git a/lib/zip_replace_file.c b/lib/zip_replace_file.c
new file mode 100644
index 0000000..a26066e
--- /dev/null
+++ b/lib/zip_replace_file.c
@@ -0,0 +1,82 @@
+#include <stdio.h>
+
+#include "zip.h"
+#include "zipint.h"
+
+struct read_file {
+    FILE *f;
+    int off, size;
+};
+
+static zip_read_func read_file;
+
+
+
+int
+zip_replace_file(struct zip *zf, int idx, char *name, struct zip_meta *meta,
+		 FILE *file, int start, int len)
+{
+    struct read_file *f;
+    
+    if (srcidx < -1 || srcidx >= srczf->nentry) {
+	zip_err = ZERR_NOENT;
+	return -1;
+    }
+
+    if ((f=(struct read_file *)malloc(sizeof(struct read_file))) == NULL) {
+	zip_err = ZERR_MEMORY;
+	return -1;
+    }
+
+    f->f = file;
+    f->off = start;
+    f->len = len;
+    
+    return zip_replace(zf, idx, name, meta, read_file, f, 0);
+}
+
+
+
+static int
+read_file(void *state, void *data, int len, enum zip_cmd cmd)
+{
+    struct read_file *z;
+    char *buf;
+    int i, n;
+
+    z = (struct read_file *)state;
+    buf = (char *)data;
+
+    switch (cmd) {
+    case ZIP_CMD_INIT:
+	if (fseek(f->f, f->off, SEEK_SET) < 0) {
+	    zip_err = ZERR_SEEK;
+	    return -1;
+	}
+	return 0;
+	
+    case ZIP_CMD_READ:
+	if (z->len != -1)
+	    n = len > z->len ? z->len : len;
+	else
+	    n = len;
+	
+	if ((i=fread(z->f, 1, buf, n)) < 0)
+	    return -1;
+
+	if (z->len != -1)
+	    z->len -= i;
+
+	return i;
+	
+    case ZIP_CMD_META:
+	return 0;
+
+    case ZIP_CMD_CLOSE:
+	if (z->f) {
+	    fclose(z->f);
+	    z->f = NULL;
+	}
+	return 0;
+    }
+}
diff --git a/lib/zip_replace_zip.c b/lib/zip_replace_zip.c
index 9bd4d24..486f6c6 100644
--- a/lib/zip_replace_zip.c
+++ b/lib/zip_replace_zip.c
@@ -21,13 +21,13 @@
 
 
 int
-zip_replace_zip(struct zip *zf, int idx, char *name,
+zip_replace_zip(struct zip *zf, int idx, char *name, struct zip_meta *meta,
 		struct zip *srczf, int srcidx, int start, int len)
 {
     struct read_zip *z;
     struct read_part *p;
 
-    if (srcidx < 0 || srcidx >= srczf->nentry) {
+    if (srcidx < -1 || srcidx >= srczf->nentry) {
 	zip_err = ZERR_NOENT;
 	return -1;
     }
@@ -39,7 +39,7 @@
 	}
 	z->zf = srczf;
 	z->idx = srcidx;
-	return zip_replace(zf, idx, name, read_zip, z, 1);
+	return zip_replace(zf, idx, name, meta, read_zip, z, 1);
     }
     else {
 	if ((p=(struct read_part *)malloc(sizeof(struct read_part))) == NULL) {
@@ -51,14 +51,14 @@
 	p->off = start;
 	p->len = len;
 	p->zff = NULL;
-	return zip_replace(zf, idx, name, read_part, z, 0);
+	return zip_replace(zf, idx, name, meta, read_part, z, 0);
     }
 }
 
 
 
-static unsigned long
-read_zip(void *state, void *data, int len, enum zip_cmd cmd);
+static int
+read_zip(void *state, void *data, int len, enum zip_cmd cmd)
 {
     struct read_zip *z;
 
@@ -84,8 +84,8 @@
 
 
 
-static unsigned long
-read_part(void *state, void *data, int len, enum zip_cmd cmd);
+static int
+read_part(void *state, void *data, int len, enum zip_cmd cmd)
 {
     struct read_part *z;
     char b[8192], *buf;
@@ -123,8 +123,8 @@
 
 	return i;
 	
-    case ZIP_CMD_CRC:
-	return -1;
+    case ZIP_CMD_META:
+	return 0;
 
     case ZIP_CMD_CLOSE:
 	if (z->zff) {
diff --git a/lib/zip_unchange.c b/lib/zip_unchange.c
new file mode 100644
index 0000000..17e7c70
--- /dev/null
+++ b/lib/zip_unchange.c
@@ -0,0 +1,20 @@
+#include "zip.h"
+
+
+
+int
+zip_unchange(struct zip *zf, int idx)
+{
+    if (idx >= zf->nentry || idx < 0) {
+	zip_err = ZERR_NOENT;
+	return -1;
+    }
+
+    if (zf->entry[idx].fn_old) {
+	free(zf->entry[idx].fn);
+	zf->entry[idx].fn = zf->entry[idx].fn_old;
+	zf->entry[idx].fn_old = NULL;
+    }
+
+    return _zip_unchange_data(zf, idx);
+}
