diff --git a/include/linux/init_task.h b/include/linux/init_task.h
index 9937c8d..fd8f30a 100644
--- a/include/linux/init_task.h
+++ b/include/linux/init_task.h
@@ -112,6 +112,9 @@ extern struct group_info init_groups;
 	.proc_lock	= SPIN_LOCK_UNLOCKED,				\
 	.switch_lock	= SPIN_LOCK_UNLOCKED,				\
 	.journal_info	= NULL,						\
+	.normal_prio	= MAX_PRIO-20,					\
+	.pi_lock	= SPIN_LOCK_UNLOCKED,				\
+	.pi_waiters	= PLIST_HEAD_INIT(tsk.pi_waiters, tsk.pi_lock),	\
 }
 
 
diff --git a/include/linux/rtmutex.h b/include/linux/rtmutex.h
index 78f9aac..b8580cd 100644
--- a/include/linux/rtmutex.h
+++ b/include/linux/rtmutex.h
@@ -14,7 +14,7 @@
 
 #include <linux/linkage.h>
 #include <linux/plist.h>
-#include <linux/spinlock_types.h>
+#include <linux/spinlock.h>
 
 /*
  * The rt_mutex structure
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 4ee1acc..d7917b3 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -13,6 +13,7 @@
 #include <linux/rbtree.h>
 #include <linux/thread_info.h>
 #include <linux/cpumask.h>
+#include <linux/plist.h>
 
 #include <asm/system.h>
 #include <asm/semaphore.h>
@@ -717,6 +718,15 @@ struct task_struct {
 	unsigned long	magic;
 	struct inode	*ino;
 #endif
+
+	/* Save original prio */
+	int normal_prio;
+	/* Protection of the PI data structures: */
+	spinlock_t pi_lock;
+	/* PI waiters blocked on a rt_mutex held by this task */
+	struct plist_head pi_waiters;
+	/* Deadlock detection and priority inheritance handling */
+	struct rt_mutex_waiter *pi_blocked_on;
 };
 
 static inline pid_t process_group(struct task_struct *tsk)
diff --git a/kernel/Makefile b/kernel/Makefile
index 1a3ad8b..9406e10 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -19,7 +19,7 @@ obj-$(CONFIG_VZ_CHECKPOINT) += cpt/
 obj-$(CONFIG_VE_CALLS) += vzmon.o
 vzmon-objs = vecalls.o
 
-obj-$(CONFIG_FUTEX) += futex.o
+obj-$(CONFIG_FUTEX) += futex.o rtmutex.o
 obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o
 obj-$(CONFIG_SMP) += cpu.o spinlock.o
 obj-$(CONFIG_UID16) += uid16.o
diff --git a/kernel/fork.c b/kernel/fork.c
index 06ae8bb..0db6868 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1210,6 +1210,10 @@ task_t *copy_process(unsigned long clone_flags,
 	spin_lock_init(&p->alloc_lock);
 	spin_lock_init(&p->proc_lock);
 
+	spin_lock_init(&p->pi_lock);
+	plist_head_init(&p->pi_waiters, &p->pi_lock);
+	p->pi_blocked_on = NULL;
+
 	clear_tsk_thread_flag(p, TIF_SIGPENDING);
 	init_sigpending(&p->pending);
 
diff --git a/kernel/rtmutex.c b/kernel/rtmutex.c
index e92265c..7c7fd49 100644
--- a/kernel/rtmutex.c
+++ b/kernel/rtmutex.c
@@ -118,6 +118,11 @@ int rt_mutex_getprio(struct task_struct *task)
 		   task->normal_prio);
 }
 
+static void rt_mutex_setprio(struct task_struct *task, int prio)
+{
+	//no priority boost, just the plug
+}
+
 /*
  * Adjust the priority of a task, after its pi_waiters got modified.
  *
