diff --git a/src/nebulae.c b/src/nebulae.c
index e2e42b4..a00533f 100644
--- a/src/nebulae.c
+++ b/src/nebulae.c
@@ -33,8 +33,9 @@ static void saveNebulae(float* map, const uint32_t w, const uint32_t h,
     const char* file);
 static unsigned char* loadNebulae(const char* file, int* w, int* h);
 
+/* Initialize the nebulae. */
 void nebu_init(void) {
-  int i;
+  int i, y;
   char nebu_file[PATH_MAX];
   unsigned char* nebu_padded;
   int w, h;
@@ -64,7 +65,14 @@ void nebu_init(void) {
 
     /* Load the file. */
     nebu_data = loadNebulae(nebu_file, &w, &h);
-    memcpy(nebu_padded, nebu_data, w*h);
+    for(y = 0; y < nebu_h; y++) { /* Copy lines over. */
+      /* nebu_padded = [ nebu_data 0000000000000 ] */
+      memmove(&nebu_padded[y*nebu_pw], &nebu_data[y*nebu_w], nebu_w);
+      memset(&nebu_padded[y*nebu_pw+nebu_w], 0, nebu_pw-nebu_w); /* Pad the end. */
+    }
+    /* End it with 0's. */
+    memset(&nebu_padded[nebu_h*nebu_pw+nebu_w], 0,
+        nebu_ph*nebu_w - nebu_h*nebu_pw);
 
     /* Load the textures. */
     glBindTexture(GL_TEXTURE_2D, nebu_textures[i]);
@@ -77,6 +85,8 @@ void nebu_init(void) {
     free(nebu_data); /* No longer need the data. */
   }
   free(nebu_padded);
+
+  DEBUG("Loaded %d Nebulae Layers", NEBULAE_Z);
 }
 
 /* Clean up the nebu subsystem. */
@@ -84,6 +94,39 @@ void nebu_exit(void) {
   glDeleteTextures(NEBULAE_Z, nebu_textures);
 }
 
+/* Render the nebulae. */
+void nebu_render(void) {
+  int n;
+  double tw, th;
+
+  n = 0;
+
+  tw = nebu_w / nebu_pw;
+  th = nebu_h / nebu_ph;
+
+  glEnable(GL_TEXTURE_2D);
+  glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+  glBindTexture(GL_TEXTURE_2D, nebu_textures[n]);
+  glColor4d(1., 1., 1., 1.);
+  glBegin(GL_QUADS);
+    glTexCoord2d(0., 0.);
+    glVertex2d(-SCREEN_W/2., -SCREEN_H/2.);
+
+    glTexCoord2d(tw, th);
+    glVertex2d(SCREEN_W/2., -SCREEN_H/2.);
+
+    glTexCoord2d(tw, th);
+    glVertex2d(SCREEN_W/2., SCREEN_H/2.);
+
+    glTexCoord2d(0., th);
+    glVertex2d(-SCREEN_W/2., SCREEN_H/2.);
+  glEnd();
+  glDisable(GL_TEXTURE_2D);
+
+  /* Did anything fail? */
+  gl_checkErr();
+}
+
 /* Force generation of new nebulae. */
 void nebu_generate(const int w, const int h) {
   int i;
@@ -130,8 +173,9 @@ static void saveNebulae(float* map, const uint32_t w, const uint32_t h,
   snprintf(buf, NEBU_FORMAT_HEADER, "LEPHISTO NEBU v" NEBU_VERSION);
   cur = 16;
   memcpy(&buf[cur], &w, 4);
+  cur += 4;
   memcpy(&buf[cur], &h, 4);
-  cur += 8;
+  cur += 4;
 
   /* The Body. */
   for(y = 0; y < (int)h; y++)
@@ -178,8 +222,9 @@ static unsigned char* loadNebulae(const char* file, int* w, int* h) {
   }
 
   int fd;
+  int cur;
   snprintf(file_path, PATH_MAX, "%s%s", lfile_basePath(), file);
-  fd = open(file, O_RDONLY);
+  fd = open(file_path, O_RDONLY);
   if(fd < 0) {
     ERR("Unable to open file %s: %s", file_path, strerror(errno));
     return NULL;
@@ -188,7 +233,9 @@ static unsigned char* loadNebulae(const char* file, int* w, int* h) {
   READ(&tw, 4);
   READ(&th, 4);
   buf = malloc(tw*th);
-  READ(buf, tw*th);
+  cur = 0;
+  while((len = read(fd, &buf[cur], tw*th - cur)) != 0)
+    cur += len;
 #else
 #error "Needs implementation."
 #endif
diff --git a/src/nebulae.h b/src/nebulae.h
index f992062..508560d 100644
--- a/src/nebulae.h
+++ b/src/nebulae.h
@@ -6,5 +6,6 @@ void nebu_init(void);
 
 void nebu_exit(void);
 
+void nebu_render(void);
 void nebu_generate(const int w, const int h);