Index: kernel/generic/src/adt/btree.c
===================================================================
--- kernel/generic/src/adt/btree.c	(revision 6adbe3c2c208fc6a1a2f4a5f8fc1436d383025dc)
+++ kernel/generic/src/adt/btree.c	(revision 7e5897971c2ec9ea1f833d1f148bc179a7abf5a7)
@@ -971,5 +971,5 @@
 		printf("(");
 		for (i = 0; i < node->keys; i++) {
-			printf("%lld%s", node->key[i], i < node->keys - 1 ? "," : "");
+			printf("%llu%s", node->key[i], i < node->keys - 1 ? "," : "");
 			if (node->depth && node->subtree[i]) {
 				list_append(&node->subtree[i]->bfs_link, &head);
@@ -993,5 +993,5 @@
 		printf("(");
 		for (i = 0; i < node->keys; i++)
-			printf("%lld%s", node->key[i], i < node->keys - 1 ? "," : "");
+			printf("%llu%s", node->key[i], i < node->keys - 1 ? "," : "");
 		printf(")");
 	}
Index: kernel/generic/src/console/cmd.c
===================================================================
--- kernel/generic/src/console/cmd.c	(revision 6adbe3c2c208fc6a1a2f4a5f8fc1436d383025dc)
+++ kernel/generic/src/console/cmd.c	(revision 7e5897971c2ec9ea1f833d1f148bc179a7abf5a7)
@@ -714,5 +714,5 @@
 int cmd_set4(cmd_arg_t *argv)
 {
-	uint32_t *addr ;
+	uint32_t *addr;
 	uint32_t arg1 = argv[1].intval;
 	bool pointer = false;
Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision 6adbe3c2c208fc6a1a2f4a5f8fc1436d383025dc)
+++ kernel/generic/src/ipc/ipc.c	(revision 7e5897971c2ec9ea1f833d1f148bc179a7abf5a7)
@@ -503,5 +503,5 @@
 	for (tmp=task->answerbox.calls.next; tmp != &task->answerbox.calls;tmp = tmp->next) {
 		call = list_get_instance(tmp, call_t, link);
-		printf("Callid: %p Srctask:%lld M:%d A1:%d A2:%d A3:%d Flags:%x\n",call,
+		printf("Callid: %p Srctask:%llu M:%d A1:%d A2:%d A3:%d Flags:%x\n",call,
 		       call->sender->taskid, IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data),
 		       IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), call->flags);
@@ -513,5 +513,5 @@
 	     tmp = tmp->next) {
 		call = list_get_instance(tmp, call_t, link);
-		printf("Callid: %p Srctask:%lld M:%d A1:%d A2:%d A3:%d Flags:%x\n",call,
+		printf("Callid: %p Srctask:%llu M:%d A1:%d A2:%d A3:%d Flags:%x\n",call,
 		       call->sender->taskid, IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data),
 		       IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), call->flags);
Index: kernel/generic/src/proc/scheduler.c
===================================================================
--- kernel/generic/src/proc/scheduler.c	(revision 6adbe3c2c208fc6a1a2f4a5f8fc1436d383025dc)
+++ kernel/generic/src/proc/scheduler.c	(revision 7e5897971c2ec9ea1f833d1f148bc179a7abf5a7)
@@ -451,5 +451,5 @@
 			 * Entering state is unexpected.
 			 */
-			panic("tid%d: unexpected state %s\n", THREAD->tid,
+			panic("tid%llu: unexpected state %s\n", THREAD->tid,
 				thread_states[THREAD->state]);
 			break;
@@ -504,5 +504,5 @@
 
 #ifdef SCHEDULER_VERBOSE
-	printf("cpu%d: tid %d (priority=%d, ticks=%lld, nrdy=%ld)\n",
+	printf("cpu%d: tid %llu (priority=%d, ticks=%llu, nrdy=%ld)\n",
 	    CPU->id, THREAD->tid, THREAD->priority, THREAD->ticks,
 	    atomic_get(&CPU->nrdy));
@@ -640,5 +640,5 @@
 				spinlock_lock(&t->lock);
 #ifdef KCPULB_VERBOSE
-				printf("kcpulb%d: TID %d -> cpu%d, nrdy=%ld, "
+				printf("kcpulb%d: TID %llu -> cpu%d, nrdy=%ld, "
 				    "avg=%nd\n", CPU->id, t->tid, CPU->id,
 				    atomic_get(&CPU->nrdy),
@@ -723,5 +723,5 @@
 				cur = cur->next) {
 				t = list_get_instance(cur, thread_t, rq_link);
-				printf("%d(%s) ", t->tid,
+				printf("%llu(%s) ", t->tid,
 				    thread_states[t->state]);
 			}
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision 6adbe3c2c208fc6a1a2f4a5f8fc1436d383025dc)
+++ kernel/generic/src/proc/task.c	(revision 7e5897971c2ec9ea1f833d1f148bc179a7abf5a7)
@@ -400,5 +400,5 @@
 			order(task_get_accounting(t), &cycles, &suffix);
 			
-			printf("%-6lld %-10s %-3ld %#10zx %#10zx %9llu%c %7zd "
+			printf("%-6llu %-10s %-3ld %#10zx %#10zx %9llu%c %7zd "
 			    "%6zd", t->taskid, t->name, t->context, t, t->as,
 			    cycles, suffix, t->refcount,
@@ -487,5 +487,5 @@
 	ipc_cleanup();
 	futex_cleanup();
-	klog_printf("Cleanup of task %lld completed.", TASK->taskid);
+	klog_printf("Cleanup of task %llu completed.", TASK->taskid);
 }
 
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision 6adbe3c2c208fc6a1a2f4a5f8fc1436d383025dc)
+++ kernel/generic/src/proc/thread.c	(revision 7e5897971c2ec9ea1f833d1f148bc179a7abf5a7)
@@ -95,5 +95,5 @@
 
 SPINLOCK_INITIALIZE(tidlock);
-uint32_t last_tid = 0;
+thread_id_t last_tid = 0;
 
 static slab_cache_t *thread_slab;
@@ -581,5 +581,5 @@
 			order(t->cycles, &cycles, &suffix);
 			
-			printf("%-6zd %-10s %#10zx %-8s %#10zx %-3ld %#10zx "
+			printf("%-6llu %-10s %#10zx %-8s %#10zx %-3ld %#10zx "
 			    "%#10zx %9llu%c ", t->tid, t->name, t,
 			    thread_states[t->state], t->task, t->task->context,
@@ -637,10 +637,9 @@
  *
  */
-unative_t sys_thread_create(uspace_arg_t *uspace_uarg, char *uspace_name)
+unative_t sys_thread_create(uspace_arg_t *uspace_uarg, char *uspace_name, thread_id_t *uspace_thread_id)
 {
 	thread_t *t;
 	char namebuf[THREAD_NAME_BUFLEN];
 	uspace_arg_t *kernel_uarg;
-	uint32_t tid;
 	int rc;
 
@@ -659,10 +658,12 @@
 	    false);
 	if (t) {
-		tid = t->tid;
 		thread_ready(t);
-		return (unative_t) tid; 
-	} else {
+		if (uspace_thread_id != NULL)
+			return (unative_t) copy_to_uspace(uspace_thread_id, &t->tid,
+		    	sizeof(t->tid));
+		else
+			return 0;
+	} else
 		free(kernel_uarg);
-	}
 
 	return (unative_t) ENOMEM;
@@ -681,7 +682,10 @@
 /** Syscall for getting TID.
  *
- * @return Thread ID.
- */
-unative_t sys_thread_get_id(void)
+ * @param uspace_thread_id Userspace address of 8-byte buffer where to store
+ * current thread ID.
+ *
+ * @return 0 on success or an error code from @ref errno.h.
+ */
+unative_t sys_thread_get_id(thread_id_t *uspace_thread_id)
 {
 	/*
@@ -689,5 +693,6 @@
 	 * remains constant for the lifespan of the thread.
 	 */
-	return THREAD->tid;
+	return (unative_t) copy_to_uspace(uspace_thread_id, &THREAD->tid,
+	    sizeof(THREAD->tid));
 }
 
Index: kernel/generic/src/syscall/syscall.c
===================================================================
--- kernel/generic/src/syscall/syscall.c	(revision 6adbe3c2c208fc6a1a2f4a5f8fc1436d383025dc)
+++ kernel/generic/src/syscall/syscall.c	(revision 7e5897971c2ec9ea1f833d1f148bc179a7abf5a7)
@@ -101,5 +101,5 @@
 		rc = syscall_table[id](a1, a2, a3, a4);
 	else {
-		klog_printf("TASK %lld: Unknown syscall id %d",TASK->taskid,id);
+		klog_printf("TASK %llu: Unknown syscall id %d",TASK->taskid,id);
 		task_kill(TASK->taskid);
 		thread_exit();
