Index: arch/ia32/src/interrupt.c
===================================================================
--- arch/ia32/src/interrupt.c	(revision 204674ee3e573dfb433faf3ebf3f3faf43f34ed7)
+++ arch/ia32/src/interrupt.c	(revision 4be51c827829994656191029ec0e27e8d6fb1eaa)
@@ -117,5 +117,5 @@
 	
 	if (stack[-2] < SYSCALL_END)
-		syscall_table[stack[-2]](stack[-5], stack[-3], stack[-4]);
+		stack[-2] = syscall_table[stack[-2]](stack[-5], stack[-3], stack[-4]);
 	else
 		panic("Undefined syscall %d", stack[-2]);
Index: generic/src/syscall/syscall.c
===================================================================
--- generic/src/syscall/syscall.c	(revision 204674ee3e573dfb433faf3ebf3f3faf43f34ed7)
+++ generic/src/syscall/syscall.c	(revision 4be51c827829994656191029ec0e27e8d6fb1eaa)
@@ -28,9 +28,12 @@
 
 #include <syscall/syscall.h>
+#include <proc/thread.h>
 #include <print.h>
 #include <putchar.h>
 
 int sys_ctl(void) {
-	printf("SYS_CTL\n");
+	printf("Thread finished\n");
+	thread_exit();
+	/* Unreachable */
 	return 0;
 }
@@ -45,5 +48,5 @@
 		putchar(((char *) buf)[i]);
 	
-	return 0;
+	return count;
 }
 
