diff --git Makefile Makefile
index 4742fd2..839341f 100644
--- Makefile
+++ Makefile
@@ -19,7 +19,7 @@ LITMUS_KERNEL ?= ../litmus-rt
 # Internal configuration.
 
 # compiler flags
-flags-debug    = -O2 -Wall -Werror -g -Wdeclaration-after-statement
+flags-debug    = -O0 -Wall -g -Wdeclaration-after-statement
 flags-api      = -D_XOPEN_SOURCE=600 -D_GNU_SOURCE
 
 # architecture-specific flags
@@ -52,7 +52,7 @@ headers += -I${LIBLITMUS}/arch/${include-${ARCH}}/include/generated/uapi
 # combine options
 CPPFLAGS = ${flags-api} ${flags-${ARCH}} -DARCH=${ARCH} ${headers}
 CFLAGS   = ${flags-debug}
-LDFLAGS  = ${flags-${ARCH}}
+LDFLAGS  = ${flags-${ARCH}} 
 
 # how to link against liblitmus
 liblitmus-flags = -L${LIBLITMUS} -llitmus
@@ -73,7 +73,8 @@ AR  := ${CROSS_COMPILE}${AR}
 
 all     = lib ${rt-apps}
 rt-apps = cycles base_task rt_launch rtspin release_ts measure_syscall \
-	  base_mt_task uncache runtests
+	  base_mt_task uncache runtests synthetic matrix loadGen \
+	  frameCopy yuv2gray
 
 .PHONY: all lib clean dump-config TAGS tags cscope help doc
 
@@ -234,6 +235,20 @@ obj-release_ts = release_ts.o
 obj-measure_syscall = null_call.o
 lib-measure_syscall = -lm
 
+obj-synthetic = synthetic.o common.o
+lib-synthetic = -lrt -static
+
+obj-frameCopy = frame_poller.o webcam_lib.o common.o
+lib-frameCopy = -lrt -static
+
+obj-yuv2gray = frame_conv.o webcam_lib.o common.o
+lib-yuv2gray = -lrt -static
+
+obj-matrix = matrix.o common.o
+lib-matrix = -lrt -static -lm
+
+obj-loadGen = loadGen.o common.o
+lib-loadGen = -lrt -static
 # ##############################################################################
 # Build everything that depends on liblitmus.
 
diff --git bin/uncache.c bin/uncache.c
index 5170155..70419c8 100644
--- bin/uncache.c
+++ bin/uncache.c
@@ -59,7 +59,7 @@ inline int linear_read(pbuf_t addr, int size, char val)
 }
 
 /* write to *data nr times. */
-inline int hammer_write(pbuf_t data, char val, int nr)
+static inline int hammer_write(pbuf_t data, char val, int nr)
 {
 	int i;
 	for (i = 0; i < nr; ++i)
@@ -68,7 +68,7 @@ inline int hammer_write(pbuf_t data, char val, int nr)
 }
 
 /* read from *data nr times. */
-inline int hammer_read(pbuf_t data, char val, int nr)
+static inline int hammer_read(pbuf_t data, char val, int nr)
 {
 	int i;
 	for (i = 0; i < nr; ++i) {
@@ -78,7 +78,7 @@ inline int hammer_read(pbuf_t data, char val, int nr)
 	return 0;
 }
 
-inline int test(pbuf_t data, int size, int trials)
+static inline int test(pbuf_t data, int size, int trials)
 {
 	int HAMMER_TIME = 10000;  /* can't cache this! */
 	char VAL = 0x55;
@@ -109,7 +109,7 @@ inline int test(pbuf_t data, int size, int trials)
 	return 0;
 }
 
-inline void timespec_normalize(struct timespec* ts, time_t sec, int64_t nsec)
+static inline void timespec_normalize(struct timespec* ts, time_t sec, int64_t nsec)
 {
 	while(nsec > 1000000000LL) {
 		asm("" : "+rm"(nsec));
@@ -126,21 +126,21 @@ inline void timespec_normalize(struct timespec* ts, time_t sec, int64_t nsec)
 	ts->tv_nsec = nsec;
 }
 
-inline struct timespec timespec_sub(struct timespec lhs, struct timespec rhs)
+static inline struct timespec timespec_sub(struct timespec lhs, struct timespec rhs)
 {
 	struct timespec delta;
 	timespec_normalize(&delta, lhs.tv_sec - rhs.tv_sec, lhs.tv_nsec - rhs.tv_nsec);
 	return delta;
 }
 
-inline struct timespec timespec_add(struct timespec lhs, struct timespec rhs)
+static inline struct timespec timespec_add(struct timespec lhs, struct timespec rhs)
 {
 	struct timespec delta;
 	timespec_normalize(&delta, lhs.tv_sec + rhs.tv_sec, lhs.tv_nsec + rhs.tv_nsec);
 	return delta;
 }
 
-inline int64_t timespec_to_us(struct timespec ts)
+static inline int64_t timespec_to_us(struct timespec ts)
 {
 	int64_t t;
 	t = ts.tv_sec * 1000000LL;
diff --git include/litmus.h include/litmus.h
index b9dbdb5..92df26e 100644
--- include/litmus.h
+++ include/litmus.h
@@ -40,12 +40,22 @@ extern "C" {
 
 #include "migration.h"
 
+#include "litmus/mc2_common.h"
+
 /**
  * @private
- * The numeric ID of the LITMUS^RT scheduling class.
+ * Number of semaphore protocol object types
  */
 #define SCHED_LITMUS 7
 
+#define CACHELINE_SIZE 32
+#define INTS_IN_CACHELINE (CACHELINE_SIZE/sizeof(int))
+#define CACHELINES_IN_1KB (1024 / sizeof(cacheline_t))
+typedef struct cacheline
+{
+        int line[INTS_IN_CACHELINE];
+} __attribute__((aligned(CACHELINE_SIZE))) cacheline_t;
+
 /**
  * Initialise a real-time task param struct
  * @param param Pointer to the struct to initialise
@@ -146,6 +156,12 @@ int sporadic_clustered(lt_t e_ns, lt_t p_ns, int cluster);
 /** Convert microseconds to nanoseconds
   * @param us Time units in microseconds */
 #define us2ns(us) ((us)*1000LL)
+#define ns2s(ns)  ((ns)/1000000000LL)
+#define ns2ms(ns) ((ns)/1000000LL)
+#define ns2us(ns) ((ns)/1000LL)
+#define us2ms(us) ((us)/1000LL)
+#define us2s(us)  ((us)/1000000LL)
+#define ms2s(ms)  ((ms)/1000LL)
 
 /**
  * Locking protocols for allocated shared objects
@@ -286,6 +302,12 @@ void exit_np(void);
  */
 int  requested_to_preempt(void);
 
+/* pgm support */
+void enter_pgm_wait(void);
+void exit_pgm_wait(void);
+void enter_pgm_send(void);
+void exit_pgm_send(void);
+
 /***** Task System support *****/
 /**
  * Wait until task master releases all real-time tasks
@@ -416,6 +438,24 @@ int null_call(cycles_t *timestamp);
  */
 struct control_page* get_ctrl_page(void);
 
+int reservation_create(int rtype, void *config);
+
+int reservation_destroy(unsigned int reservation_id, int cpu);
+
+int set_mc2_task_param(pid_t pid, struct mc2_task* param);
+
+int set_page_color(int cpu);
+
+int test_call(unsigned int param);
+
+int run_bench(int type, int size, cacheline_t *src, cacheline_t *dst, lt_t __user *ts);
+
+int lock_buffer(void* vaddr, size_t size, unsigned int lock_way, unsigned int unlock_way);
+
+int test_call(unsigned int param);
+
+int recolor_mem(void* vaddr, int n_pages, int cpu);
+
 #ifdef __cplusplus
 }
 #endif
diff --git src/syscalls.c src/syscalls.c
index c68f15b..62c2ee5 100644
--- src/syscalls.c
+++ src/syscalls.c
@@ -86,3 +86,43 @@ int null_call(cycles_t *timestamp)
 {
 	return syscall(__NR_null_call, timestamp);
 }
+
+int reservation_create(int rtype, void *config)
+{
+	return syscall(__NR_reservation_create, rtype, config);
+}
+
+int reservation_destroy(unsigned int reservation_id, int cpu)
+{
+	return syscall(__NR_reservation_destroy, reservation_id, cpu);
+}
+
+int set_mc2_task_param(pid_t pid, struct mc2_task *param)
+{
+	return syscall(__NR_set_mc2_task_param, pid, param);
+}
+
+int set_page_color(int cpu)
+{
+	return syscall(__NR_set_page_color, cpu);
+}
+
+int run_bench(int type, int wss, cacheline_t *src, cacheline_t *dst, lt_t *ts)
+{
+	return syscall(__NR_run_test, type, wss, src, dst, ts);
+}
+
+int lock_buffer(void* vaddr, size_t size, unsigned int lock_way, unsigned int unlock_way)
+{
+	return syscall(__NR_lock_buffer, vaddr, size, lock_way, unlock_way);
+}
+
+int test_call(unsigned int param)
+{
+	return syscall(__NR_test_call, param);
+}
+
+int recolor_mem(void* vaddr, int num_pages, int cpu)
+{
+	return syscall(__NR_recolor_mem, vaddr, num_pages, cpu);
+}
