Index: uspace/lib/c/include/ipc/vfs.h
===================================================================
--- uspace/lib/c/include/ipc/vfs.h	(revision 59f388a67f9319d79d123a42feecf8a6efba764e)
+++ uspace/lib/c/include/ipc/vfs.h	(revision 51774cd3e07c4126f214f9532d6f1d548771039e)
@@ -41,5 +41,5 @@
 
 #define FS_NAME_MAXLEN  20
-#define MAX_PATH_LEN    (64 * 1024)
+#define MAX_PATH_LEN    (32 * 1024)
 #define MAX_MNTOPTS_LEN 256
 #define PLB_SIZE        (2 * MAX_PATH_LEN)
@@ -84,5 +84,4 @@
 	VFS_OUT_CLOSE = IPC_FIRST_USER_METHOD,
 	VFS_OUT_DESTROY,
-	VFS_OUT_GET_SIZE,
 	VFS_OUT_IS_EMPTY,
 	VFS_OUT_LINK,
Index: uspace/lib/fs/libfs.c
===================================================================
--- uspace/lib/fs/libfs.c	(revision 59f388a67f9319d79d123a42feecf8a6efba764e)
+++ uspace/lib/fs/libfs.c	(revision 51774cd3e07c4126f214f9532d6f1d548771039e)
@@ -231,23 +231,4 @@
 }
 
-static void vfs_out_get_size(ipc_callid_t rid, ipc_call_t *req)
-{
-	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
-	fs_index_t index = (fs_index_t) IPC_GET_ARG2(*req);
-	int rc;
-
-	fs_node_t *node = NULL;
-	rc = libfs_ops->node_get(&node, service_id, index);
-	if (rc != EOK)
-		async_answer_0(rid, rc);
-	if (node == NULL)
-		async_answer_0(rid, EINVAL);
-	
-	uint64_t size = libfs_ops->size_get(node);
-	libfs_ops->node_put(node);
-	
-	async_answer_2(rid, EOK, LOWER32(size), UPPER32(size));
-}
-
 static void vfs_out_is_empty(ipc_callid_t rid, ipc_call_t *req)
 {
@@ -330,7 +311,4 @@
 			vfs_out_statfs(callid, &call);
 			break;
-		case VFS_OUT_GET_SIZE:
-			vfs_out_get_size(callid, &call);
-			break;
 		case VFS_OUT_IS_EMPTY:
 			vfs_out_is_empty(callid, &call);
@@ -651,12 +629,9 @@
 		rc = ops->unlink(par, cur, component);
 		if (rc == EOK) {
-			int64_t size = ops->size_get(cur);
-			int32_t lsize = LOWER32(size);
-			if (lsize != size)
-				lsize = -1;
-			
+			aoff64_t size = ops->size_get(cur);
 			async_answer_5(rid, fs_handle, service_id,
-			    ops->index_get(cur), last, lsize,
-			    ops->is_directory(cur));
+			    ops->index_get(cur),
+			    (ops->is_directory(cur) << 16) | last,
+			    LOWER32(size), UPPER32(size));
 		} else {
 			async_answer_0(rid, rc);
@@ -703,11 +678,8 @@
 	}
 	
-	int64_t size = ops->size_get(cur);
-	int32_t lsize = LOWER32(size);
-	if (lsize != size)
-		lsize = -1;
-	
-	async_answer_5(rid, fs_handle, service_id, ops->index_get(cur), last,
-	    lsize, ops->is_directory(cur));
+	aoff64_t size = ops->size_get(cur);
+	async_answer_5(rid, fs_handle, service_id, ops->index_get(cur),
+	    (ops->is_directory(cur) << 16) | last, LOWER32(size),
+	    UPPER32(size));
 	
 out:
Index: uspace/srv/vfs/vfs.h
===================================================================
--- uspace/srv/vfs/vfs.h	(revision 59f388a67f9319d79d123a42feecf8a6efba764e)
+++ uspace/srv/vfs/vfs.h	(revision 51774cd3e07c4126f214f9532d6f1d548771039e)
@@ -113,5 +113,5 @@
 	vfs_node_type_t type;	/**< Partial info about the node type. */
 
-	int64_t size;		/**< Cached size if the node is a file. */
+	aoff64_t size;		/**< Cached size if the node is a file. */
 
 	/**
@@ -185,5 +185,4 @@
 extern unsigned vfs_nodes_refcount_sum_get(fs_handle_t, service_id_t);
 
-extern int64_t vfs_node_get_size(vfs_node_t *node);
 extern bool vfs_node_has_children(vfs_node_t *node);
 
Index: uspace/srv/vfs/vfs_lookup.c
===================================================================
--- uspace/srv/vfs/vfs_lookup.c	(revision 59f388a67f9319d79d123a42feecf8a6efba764e)
+++ uspace/srv/vfs/vfs_lookup.c	(revision 51774cd3e07c4126f214f9532d6f1d548771039e)
@@ -226,5 +226,5 @@
 	
 	unsigned last = *pfirst + *plen;
-	*pfirst = IPC_GET_ARG3(answer);
+	*pfirst = IPC_GET_ARG3(answer) & 0xffff;
 	*plen = last - *pfirst;
 	
@@ -232,6 +232,6 @@
 	result->triplet.service_id = (service_id_t) IPC_GET_ARG1(answer);
 	result->triplet.index = (fs_index_t) IPC_GET_ARG2(answer);
-	result->size = (int64_t)(int32_t) IPC_GET_ARG4(answer);
-	result->type = IPC_GET_ARG5(answer) ?
+	result->size = MERGE_LOUP32(IPC_GET_ARG4(answer), IPC_GET_ARG5(answer));
+	result->type = (IPC_GET_ARG3(answer) >> 16) ?
 	    VFS_NODE_DIRECTORY : VFS_NODE_FILE;
 	return EOK;
Index: uspace/srv/vfs/vfs_node.c
===================================================================
--- uspace/srv/vfs/vfs_node.c	(revision 59f388a67f9319d79d123a42feecf8a6efba764e)
+++ uspace/srv/vfs/vfs_node.c	(revision 51774cd3e07c4126f214f9532d6f1d548771039e)
@@ -315,20 +315,4 @@
 }
 
-int64_t vfs_node_get_size(vfs_node_t *node)
-{
-	if (node->size == -1) {
-		sysarg_t sz1 = 0;
-		sysarg_t sz2 = 0;
-		
-		async_exch_t *exch = vfs_exchange_grab(node->fs_handle);
-		(void) async_req_2_2(exch, VFS_OUT_GET_SIZE, node->service_id,
-		    node->index, &sz1, &sz2);
-		vfs_exchange_release(exch);
-		
-		node->size = MERGE_LOUP32(sz1, sz2);
-	}
-	return node->size;
-}
-
 bool vfs_node_has_children(vfs_node_t *node)
 {
Index: uspace/srv/vfs/vfs_ops.c
===================================================================
--- uspace/srv/vfs/vfs_ops.c	(revision 59f388a67f9319d79d123a42feecf8a6efba764e)
+++ uspace/srv/vfs/vfs_ops.c	(revision 51774cd3e07c4126f214f9532d6f1d548771039e)
@@ -439,9 +439,6 @@
 	async_exch_t *fs_exch = vfs_exchange_grab(file->node->fs_handle);
 	
-	if (!read && file->append) {
-		if (file->node->size == -1)
-			file->node->size = vfs_node_get_size(file->node);
+	if (!read && file->append)
 		pos = file->node->size;
-	}
 	
 	/*
