diff --git a/kernels/demo/src/life/life.c b/kernels/demo/src/life/life.c
index 25a30f1..b1ecc5b 100644
--- a/kernels/demo/src/life/life.c
+++ b/kernels/demo/src/life/life.c
@@ -5,6 +5,8 @@
 #include <io.h>
 
 static int w = 40, h = 25;
+static unsigned *new_array = NULL;
+static unsigned *univ_array = NULL;
 
 void show(void *u) {
   int x,y;
@@ -20,7 +22,7 @@ void show(void *u) {
 void evolve(void *u) {
   int x,y,x1,y1;
   unsigned (*univ)[w] = u;
-  unsigned new[h][w];
+  unsigned (*new)[w] = (void *)new_array;
 
   for (y=0;y<h;y++) for (x=0;x<w;x++) {
     int n = 0;
@@ -38,9 +40,11 @@ void evolve(void *u) {
 void game_of_life(void) {
   w = screen_tile_width();
   h = screen_tile_height();
+  univ_array = malloc(h * w * sizeof(unsigned));
+  new_array  = malloc(h * w * sizeof(unsigned));
+  unsigned (*univ)[w] = (void *)univ_array;
 
   int x,y;
-  unsigned univ[h][w];
   for (x=0;x<w;x++)
     for (y=0;y<h;y++) 
       univ[y][x] = rand() % 2;