Index: uspace/app/trace/ipcp.c
===================================================================
--- uspace/app/trace/ipcp.c	(revision 8c125ad51a8dfadbf925f3871e4ccdf00e4b81df)
+++ uspace/app/trace/ipcp.c	(revision e028660a0518e4c5bb85a0b54ab8b441db26e4e2)
@@ -39,4 +39,5 @@
 #include "ipc_desc.h"
 #include "proto.h"
+#include "trace.h"
 #include "ipcp.h"
 
@@ -178,19 +179,45 @@
 	proto_t *proto;
 	unsigned long key[1];
+	oper_t *oper;
 
 	if (have_conn[phone]) proto = connections[phone].proto;
 	else proto = NULL;
 
-//	printf("ipcp_call_out()\n");
-	printf("call id: 0x%x, phone: %d, proto: %s, method: ", hash, phone,
-		(proto ? proto->name : "n/a"));
-	ipc_m_print(proto, IPC_GET_METHOD(*call));
-	printf(" args: (%u, %u, %u, %u, %u)\n",
-	    IPC_GET_ARG1(*call),
-	    IPC_GET_ARG2(*call),
-	    IPC_GET_ARG3(*call),
-	    IPC_GET_ARG4(*call),
-	    IPC_GET_ARG5(*call)
-	);
+	if ((display_mask & DM_IPC) != 0) {
+		printf("Call ID: 0x%x, phone: %d, proto: %s, method: ", hash,
+			phone, (proto ? proto->name : "n/a"));
+		ipc_m_print(proto, IPC_GET_METHOD(*call));
+		printf(" args: (%u, %u, %u, %u, %u)\n",
+		    IPC_GET_ARG1(*call),
+		    IPC_GET_ARG2(*call),
+		    IPC_GET_ARG3(*call),
+		    IPC_GET_ARG4(*call),
+		    IPC_GET_ARG5(*call)
+		);
+	}
+
+
+	if ((display_mask & DM_USER) != 0) {
+
+		if (proto != NULL) {
+			oper = proto_get_oper(proto, IPC_GET_METHOD(*call));
+		} else {
+			oper = NULL;
+		}
+
+		if (oper != NULL) {
+
+			printf("%s(%d).%s", (proto ? proto->name : "n/a"),
+			    phone, (oper ? oper->name : "unknown"));
+
+			printf("(%u, %u, %u, %u, %u)\n",
+			    IPC_GET_ARG1(*call),
+			    IPC_GET_ARG2(*call),
+			    IPC_GET_ARG3(*call),
+			    IPC_GET_ARG4(*call),
+			    IPC_GET_ARG5(*call)
+			);
+		}
+	}
 
 	/* Store call in hash table for response matching */
@@ -206,5 +233,6 @@
 }
 
-static void parse_answer(pending_call_t *pcall, ipc_call_t *answer)
+static void parse_answer(ipc_callid_t hash, pending_call_t *pcall,
+    ipc_call_t *answer)
 {
 	int phone;
@@ -220,6 +248,15 @@
 	method = IPC_GET_METHOD(pcall->question);
 	retval = IPC_GET_RETVAL(*answer);
-	printf("phone=%d, method=%d, retval=%d\n",
-		phone, method, retval);
+
+	if ((display_mask & DM_IPC) != 0) {
+		printf("Response to 0x%x: retval=%d, args = (%u, %u, %u, %u, %u)\n",
+			hash, retval, IPC_GET_ARG1(*answer),
+			IPC_GET_ARG2(*answer), IPC_GET_ARG3(*answer),
+			IPC_GET_ARG4(*answer), IPC_GET_ARG5(*answer));
+	}
+
+	if ((display_mask & DM_USER) != 0) {
+		printf("-> %d\n", retval);
+	}
 
 	if (phone == 0 && method == IPC_M_CONNECT_ME_TO && retval == 0) {
@@ -230,6 +267,8 @@
 
 		cphone = IPC_GET_ARG5(*answer);
-		printf("registering connection (phone %d, protocol: %s)\n", cphone,
-			proto->name);
+		if ((display_mask & DM_SYSTEM) != 0) {
+			printf("Registering connection (phone %d, protocol: %s)\n", cphone,
+		    		proto->name);
+		}
 		ipcp_connection_set(cphone, 0, proto);
 	}
@@ -255,5 +294,7 @@
 	if ((hash & IPC_CALLID_ANSWERED) == 0 && hash != IPCP_CALLID_SYNC) {
 		/* Not a response */
-		printf("Not a response (hash %d)\n", hash);
+		if ((display_mask & DM_IPC) != 0) {
+			printf("Not a response (hash %d)\n", hash);
+		}
 		return;
 	}
@@ -264,11 +305,13 @@
 	item = hash_table_find(&pending_calls, key);
 	if (item == NULL) return; // No matching question found
+
+	/*
+	 * Response matched to question.
+	 */
 	
 	pcall = hash_table_get_instance(item, pending_call_t, link);
-
-	printf("response matched to question\n");
 	hash_table_remove(&pending_calls, key, 1);
 
-	parse_answer(pcall, call);
+	parse_answer(hash, pcall, call);
 	free(pcall);
 }
@@ -282,6 +325,8 @@
 void ipcp_hangup(int phone, int rc)
 {
-	printf("hangup phone %d -> %d\n", phone, rc);
-	ipcp_connection_clear(phone);
+	if ((display_mask & DM_SYSTEM) != 0) {
+		printf("Hang phone %d up -> %d\n", phone, rc);
+		ipcp_connection_clear(phone);
+	}
 }
 
