diff --git a/lib/fuse.c b/lib/fuse.c
index 59f8b45..66474fb 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -1058,13 +1058,16 @@
     int res;
     char *path;
     struct fuse_open_out outarg;
+    struct fuse_file_info fi;
 
+    memset(&fi, 0, sizeof(fi));
+    fi.flags = arg->flags;
     res = -ENOENT;
     path = get_path(f, in->nodeid);
     if (path != NULL) {
         res = -ENOSYS;
         if (f->op.open)
-            res = f->op.open(path, arg->flags);
+            res = f->op.open(path, &fi);
     }
     if (res == 0) {
         int res2;
@@ -1074,8 +1077,7 @@
            races with rename/unlink, against which the kernel can't
            protect */
         pthread_mutex_lock(&f->lock);
-        f->fh_ctr ++;
-        outarg.fh = f->fh_ctr;
+        outarg.fh = fi.fh;
         if (f->flags & FUSE_DEBUG) {
             printf("OPEN[%lu] flags: 0x%x\n", outarg.fh, arg->flags);
             fflush(stdout);
@@ -1085,7 +1087,7 @@
         if(res2 == -ENOENT) {
             /* The open syscall was interrupted, so it must be cancelled */
             if(f->op.release)
-                f->op.release(path, arg->flags);
+                f->op.release(path, &fi);
         } else
             get_node(f, in->nodeid)->open_count ++;
         pthread_mutex_unlock(&f->lock);
@@ -1102,7 +1104,10 @@
 {
     char *path;
     int res;
+    struct fuse_file_info fi;
 
+    memset(&fi, 0, sizeof(fi));
+    fi.fh = arg->fh;
     res = -ENOENT;
     path = get_path(f, in->nodeid);
     if (path != NULL) {
@@ -1112,7 +1117,7 @@
         }
         res = -ENOSYS;
         if (f->op.flush)
-            res = f->op.flush(path);
+            res = f->op.flush(path, &fi);
         free(path);
     }
     send_reply(f, in, res, NULL, 0);
@@ -1123,6 +1128,11 @@
 {
     struct node *node;
     char *path;
+    struct fuse_file_info fi;
+
+    memset(&fi, 0, sizeof(fi));
+    fi.flags = arg->flags;
+    fi.fh = arg->fh;
 
     pthread_mutex_lock(&f->lock);
     node = get_node(f, in->nodeid);
@@ -1136,7 +1146,7 @@
             fflush(stdout);
         }
         if (f->op.release)
-            f->op.release(path, arg->flags);
+            f->op.release(path, &fi);
 
         if(node->is_hidden && node->open_count == 0)
             /* can now clean up this hidden file */
@@ -1160,7 +1170,11 @@
         char *buf = outbuf + sizeof(struct fuse_out_header);
         size_t size;
         size_t outsize;
+        struct fuse_file_info fi;
         
+        memset(&fi, 0, sizeof(fi));
+        fi.fh = arg->fh;
+
         res = -ENOENT;
         path = get_path(f, in->nodeid);
         if (path != NULL) {
@@ -1172,7 +1186,7 @@
             
             res = -ENOSYS;
             if (f->op.read)
-                res = f->op.read(path, buf, arg->size, arg->offset);
+                res = f->op.read(path, buf, arg->size, arg->offset, &fi);
             free(path);
         }
         
@@ -1201,6 +1215,10 @@
     int res;
     char *path;
     struct fuse_write_out outarg;
+    struct fuse_file_info fi;
+
+    memset(&fi, 0, sizeof(fi));
+    fi.fh = arg->fh;
 
     res = -ENOENT;
     path = get_path(f, in->nodeid);
@@ -1214,7 +1232,7 @@
 
         res = -ENOSYS;
         if (f->op.write)
-            res = f->op.write(path, PARAM(arg), arg->size, arg->offset);
+            res = f->op.write(path, PARAM(arg), arg->size, arg->offset, &fi);
         free(path);
     }
     
@@ -1267,6 +1285,10 @@
 {
     int res;
     char *path;
+    struct fuse_file_info fi;
+
+    memset(&fi, 0, sizeof(fi));
+    fi.fh = inarg->fh;
 
     res = -ENOENT;
     path = get_path(f, in->nodeid);
@@ -1277,7 +1299,7 @@
         }
         res = -ENOSYS;
         if (f->op.fsync)
-            res = f->op.fsync(path, inarg->datasync);
+            res = f->op.fsync(path, inarg->datasync, &fi);
         free(path);
     }
     send_reply(f, in, res, NULL, 0);
