Index: generic/include/mm/as.h
===================================================================
--- generic/include/mm/as.h	(revision f3ac6360053576f070c57d84c51335e1bed6f4e0)
+++ generic/include/mm/as.h	(revision 6fa476f7e7159d484a144866a0e63ebf61cb85be)
@@ -115,5 +115,5 @@
 extern as_area_t *as_area_create(as_t *as, int flags, size_t size, __address base);
 extern __address as_area_resize(as_t *as, __address address, size_t size, int flags);
-int as_area_send(task_id_t id, __address base, size_t size, int flags);
+int as_area_send(task_id_t id, __address base);
 extern void as_set_mapping(as_t *as, __address page, __address frame);
 extern int as_page_fault(__address page);
Index: generic/include/mm/as_arg.h
===================================================================
--- generic/include/mm/as_arg.h	(revision f3ac6360053576f070c57d84c51335e1bed6f4e0)
+++ generic/include/mm/as_arg.h	(revision 6fa476f7e7159d484a144866a0e63ebf61cb85be)
@@ -46,4 +46,7 @@
 	void *base;
 	
+	/*
+	 * The following members are filled only by acceptor.
+	 */
 	unsigned long size;	/**< Size of memory being sent/accepted must match. */
 	int flags;		/**< Address space area flags of sender and acceptor must match. */
Index: generic/include/syscall/syscall.h
===================================================================
--- generic/include/syscall/syscall.h	(revision f3ac6360053576f070c57d84c51335e1bed6f4e0)
+++ generic/include/syscall/syscall.h	(revision 6fa476f7e7159d484a144866a0e63ebf61cb85be)
@@ -41,6 +41,6 @@
 	SYS_AS_AREA_CREATE,
 	SYS_AS_AREA_RESIZE,
-	SYS_AS_AREA_SHARE_APPROVE,
-	SYS_AS_AREA_SHARE_PERFORM,
+	SYS_AS_AREA_ACCEPT,
+	SYS_AS_AREA_SEND,
 	SYS_IPC_CALL_SYNC_FAST,
 	SYS_IPC_CALL_SYNC,
Index: generic/src/mm/as.c
===================================================================
--- generic/src/mm/as.c	(revision f3ac6360053576f070c57d84c51335e1bed6f4e0)
+++ generic/src/mm/as.c	(revision 6fa476f7e7159d484a144866a0e63ebf61cb85be)
@@ -292,6 +292,4 @@
  * @param id Task ID of the accepting task.
  * @param base Base address of the source address space area.
- * @param size Size of the source address space area.
- * @param flags Flags of the source address space area.
  *
  * @return 0 on success or ENOENT if there is no such task or
@@ -301,5 +299,5 @@
  *	   address space area.
  */
-int as_area_send(task_id_t id, __address base, size_t size, int flags)
+int as_area_send(task_id_t id, __address base)
 {
 	ipl_t ipl;
@@ -308,4 +306,7 @@
 	as_t *as;
 	__address dst_base;
+	int flags;
+	size_t size;
+	as_area_t *area;
 	
 	ipl = interrupts_disable();
@@ -334,4 +335,20 @@
 		return EPERM;
 	}
+	
+	spinlock_lock(&AS->lock);
+	area = find_area_and_lock(AS, base);
+	if (!area) {
+		/*
+		 * Could not find the source address space area.
+		 */
+		spinlock_unlock(&t->lock);
+		spinlock_unlock(&AS->lock);
+		interrupts_restore(ipl);
+		return ENOENT;
+	}
+	size = area->pages * PAGE_SIZE;
+	flags = area->flags;
+	spinlock_unlock(&area->lock);
+	spinlock_unlock(&AS->lock);
 
 	if ((t->accept_arg.task_id != TASK->taskid) || (t->accept_arg.size != size) ||
@@ -880,4 +897,4 @@
 	}
 
-	return (__native) as_area_send(arg.task_id, (__address) arg.base, arg.size, arg.flags);
-}
+	return (__native) as_area_send(arg.task_id, (__address) arg.base);
+}
