--- linux-2.6.19-vs2.1.x-t3/include/linux/vserver/context.h	2006-11-30 19:10:59 +0100
+++ linux-2.6.19-vs2.1.x-t3.1/include/linux/vserver/context.h	2006-12-04 04:39:31 +0100
@@ -163,7 +163,7 @@ extern struct vx_info *lookup_or_create_
 extern int get_xid_list(int, unsigned int *, int);
 extern int xid_is_hashed(xid_t);
 
-extern int vx_migrate_task(struct task_struct *, struct vx_info *);
+extern int vx_migrate_task(struct task_struct *, struct vx_info *, int);
 
 extern long vs_state_change(struct vx_info *, unsigned int);
 
--- linux-2.6.19-vs2.1.x-t3/kernel/vserver/context.c	2006-11-30 19:45:27 +0100
+++ linux-2.6.19-vs2.1.x-t3.1/kernel/vserver/context.c	2006-12-04 04:38:47 +0100
@@ -634,12 +634,19 @@ static int vx_openfd_task(struct task_st
 	return total;
 }
 
+
+/* 	for *space compatibility */
+
+int vx_set_namespace(struct vx_info *, unsigned long);
+asmlinkage long sys_unshare(unsigned long);
+
 /*
  *	migrate task to new context
  *	gets vxi, puts old_vxi on change
+ *	optionally unshares namespaces (hack)
  */
 
-int vx_migrate_task(struct task_struct *p, struct vx_info *vxi)
+int vx_migrate_task(struct task_struct *p, struct vx_info *vxi, int unshare)
 {
 	struct vx_info *old_vxi;
 	int ret = 0;
@@ -695,6 +702,12 @@ int vx_migrate_task(struct task_struct *
 
 		vx_mask_cap_bset(vxi, p);
 		task_unlock(p);
+
+		/* hack for *spaces to provide compatibility */
+		if (unshare) {
+			ret = sys_unshare(CLONE_NEWUTS|CLONE_NEWIPC);
+			vx_set_namespace(vxi, 0);
+		}
 	}
 out:
 	put_vx_info(old_vxi);
@@ -887,7 +900,7 @@ int vc_ctx_create(uint32_t xid, void __u
 	ret = -ENOEXEC;
 	if (vs_state_change(new_vxi, VSC_STARTUP))
 		goto out_unhash;
-	ret = vx_migrate_task(current, new_vxi);
+	ret = vx_migrate_task(current, new_vxi, (!data));
 	if (!ret) {
 		/* return context id on success */
 		ret = new_vxi->vx_id;
@@ -913,7 +926,7 @@ int vc_ctx_migrate(struct vx_info *vxi, 
 	if (data && copy_from_user (&vc_data, data, sizeof(vc_data)))
 		return -EFAULT;
 
-	ret = vx_migrate_task(current, vxi);
+	ret = vx_migrate_task(current, vxi, 0);
 	if (ret)
 		return ret;
 	if (vc_data.flagword & VXM_SET_INIT)
--- linux-2.6.19-vs2.1.x-t3/kernel/vserver/legacy.c	2006-11-30 18:53:18 +0100
+++ linux-2.6.19-vs2.1.x-t3.1/kernel/vserver/legacy.c	2006-12-04 04:29:05 +0100
@@ -89,7 +89,7 @@ int vc_new_s_context(uint32_t ctx, void 
 
 	new_vxi->vx_flags &= ~VXF_STATE_SETUP;
 
-	ret = vx_migrate_task(current, new_vxi);
+	ret = vx_migrate_task(current, new_vxi, 1);
 	if (ret == 0) {
 		current->vx_info->vx_bcaps &= (~vc_data.remove_cap);
 		new_vxi->vx_flags |= vc_data.flags;