diff --git a/include/linux/ve.h b/include/linux/ve.h
index 3b3293b..8a6c883 100644
--- a/include/linux/ve.h
+++ b/include/linux/ve.h
@@ -287,6 +287,7 @@ struct ve_struct {
 	struct ve_monitor	*monitor;
 	struct proc_dir_entry	*monitor_proc;
 	unsigned long		meminfo_val;
+	unsigned int		kernel_verson;
 };
 
 #define VE_CPU_STATS(ve, cpu) (&((ve)->ve_cpu_stats[(cpu)]))
diff --git a/kernel/vecalls.c b/kernel/vecalls.c
index 84065c0..e85dbc4 100644
--- a/kernel/vecalls.c
+++ b/kernel/vecalls.c
@@ -62,6 +62,7 @@
 
 #include <linux/nfcalls.h>
 #include <linux/virtinfo.h>
+#include <linux/version.h>
 
 struct ve_struct *ve_list_head = NULL;
 int nr_ve = 1;	/* One VE always exists. Compatibility with vestat */
@@ -730,6 +731,8 @@ extern struct new_utsname virt_utsname;
 
 static int init_ve_utsname(struct ve_struct *ve)
 {
+	int ver[3];
+
 	ve->utsname = kmalloc(sizeof(*ve->utsname), GFP_KERNEL);
 	if (ve->utsname == NULL)
 		return -ENOMEM;
@@ -740,6 +743,11 @@ static int init_ve_utsname(struct ve_struct *ve)
 			sizeof(virt_utsname.release));
 	up_read(&uts_sem);
 
+	if (sscanf(ve->utsname->release, "%d.%d.%d", &ver[0], &ver[1], &ver[2]) == 3)
+		ve->kernel_verson = KERNEL_VERSION(ver[0], ver[1], ver[2]);
+	else
+		ve->kernel_verson = LINUX_VERSION_CODE;
+
 	return 0;
 }
 
