+    if (image == -1 && nb_page->m_image == -1)
+        return true; /* Case 1): Nothing to do. */
+
+    GtkWidget *pixmapwid = (GtkWidget*) NULL;
+
+    if (nb_page->m_image != -1)
+    {
+        /* Case 2) or 4). There is already an image in the gtkhbox. Let's find it */
+
+        GList *child = gtk_container_get_children(GTK_CONTAINER(nb_page->m_box));
+        while (child)
+        {
+            if (GTK_IS_IMAGE(child->data))
+            {
+                pixmapwid = GTK_WIDGET(child->data);
+                break;
+            }
+            child = child->next;
+        }
+
+        /* We should have the pixmap widget now */
+        wxASSERT(pixmapwid != NULL);
+
+        if (image == -1)
+        {
+            /* If there's no new widget, just remove the old from the box */
+            gtk_container_remove(GTK_CONTAINER(nb_page->m_box), pixmapwid);
+            nb_page->m_image = -1;
+
+            return true; /* Case 2) */
+        }
+    }
+
+    /* Only cases 3) and 4) left */
+    wxASSERT( m_imageList != NULL ); /* Just in case */
+
+    /* Construct the new pixmap */
+    const wxBitmap *bmp = m_imageList->GetBitmapPtr(image);
+
+    if (pixmapwid == NULL)
+    {
+        /* Case 3) No old pixmap. Create a new one and prepend it to the hbox */
+        pixmapwid = gtk_image_new_from_pixbuf(bmp->GetPixbuf());
+
+        /* CHECKME: Are these pack flags okay? */
+        gtk_box_pack_start(GTK_BOX(nb_page->m_box), pixmapwid, FALSE, FALSE, m_padding);
+        gtk_widget_show(pixmapwid);
+    }
+    else
+    {
+        /* Case 4) Simply replace the pixmap */
+        gtk_image_set_from_pixbuf((GtkImage*)pixmapwid, bmp->GetPixbuf());
+    }
+
+    nb_page->m_image = image;
+
+    return true;