diff --git a/Common/gmshPopplerWrapper.cpp b/Common/gmshPopplerWrapper.cpp
index c681920aee60b10b32707e16a42c530a929442d4..08e6dac8ac4606621132d442dcd56786172440bc 100644
--- a/Common/gmshPopplerWrapper.cpp
+++ b/Common/gmshPopplerWrapper.cpp
@@ -52,7 +52,7 @@ GLuint gmshPopplerWrapper::getTextureForPage(double xres,
   poppler::image im = pr.render_page(_current_page, xres, yres, -1, -1, -1);
   _w = im.width();
   _h = im.height();
-  //  im.save("page.png","png");
+  // im.save("page.png","png");
   GLuint texture;
   glGenTextures(1, &texture);
   glBindTexture(GL_TEXTURE_2D, texture);
diff --git a/Fltk/drawContextFltkCairo.cpp b/Fltk/drawContextFltkCairo.cpp
index 5b2f80417cccf4e1b9bd9936f2fce0d24667a91b..c1b9dcae3becdd526b2b5693dd2f8af8674b64b0 100644
--- a/Fltk/drawContextFltkCairo.cpp
+++ b/Fltk/drawContextFltkCairo.cpp
@@ -95,21 +95,21 @@ class drawContextFltkCairo::queueString {
     glScalef (2.0f / winw, 2.0f /  winh, 1.0f);
     glTranslatef (-winw / 2.0f, -winh / 2.0f, 0.0f);
     //write the texture on screen
-    glEnable (GL_TEXTURE_RECTANGLE_ARB);
+    glEnable(GL_TEXTURE_RECTANGLE_ARB);
     glPushAttrib(GL_ENABLE_BIT | GL_TEXTURE_BIT | GL_COLOR_BUFFER_BIT);
     glDisable(GL_LIGHTING);
-    glDisable (GL_DEPTH_TEST);
-    glEnable (GL_BLEND);
+    glDisable(GL_DEPTH_TEST);
+    glEnable(GL_BLEND);
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-    glGenTextures (1, &textureId);
-    glBindTexture (GL_TEXTURE_RECTANGLE_ARB, textureId);
-    glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_ALPHA,
-                  cairo_image_surface_get_width(surface),
-                  cairo_image_surface_get_height(surface), 0,
-                  GL_ALPHA, GL_UNSIGNED_BYTE, cairo_image_surface_get_data(surface));
+    glGenTextures(1, &textureId);
+    glBindTexture(GL_TEXTURE_RECTANGLE_ARB, textureId);
+    glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_ALPHA,
+                 cairo_image_surface_get_width(surface),
+                 cairo_image_surface_get_height(surface), 0,
+                 GL_ALPHA, GL_UNSIGNED_BYTE, cairo_image_surface_get_data(surface));
     //glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_SRC0_ALPHA);
     //printf("error %i %s\n", __LINE__, gluErrorString(glGetError()));
-    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 
     pos = 0;
     for(std::vector<element>::iterator it = _elements.begin(); it != _elements.end();  ++it) {
diff --git a/Fltk/drawContextFltkStringTexture.cpp b/Fltk/drawContextFltkStringTexture.cpp
index b0787be201b112f01107b2916e7f2b231bef2449..6c20e0622c98ec3502bdc56d27a50ccc71c333a9 100644
--- a/Fltk/drawContextFltkStringTexture.cpp
+++ b/Fltk/drawContextFltkStringTexture.cpp
@@ -13,7 +13,7 @@
 #endif
 
 class drawContextFltkStringTexture::queueString {
-  public :
+ public :
   typedef struct {
     std::string text;
     GLfloat x, y, z;
@@ -23,17 +23,16 @@ class drawContextFltkStringTexture::queueString {
     int height;
   } element;
 
-  private:
+ private:
   std::vector<element> _elements;
   int _totalWidth, _maxHeight;
 
-  public:
+ public:
   queueString()
   {
     _totalWidth = 0;
     _maxHeight = 0;
   }
-
   void append(const element &elem)
   {
     if (_totalWidth + elem.width > 1000)
@@ -42,7 +41,6 @@ class drawContextFltkStringTexture::queueString {
     _totalWidth += elem.width;
     _maxHeight = std::max(_maxHeight, elem.height);
   }
-
   void flush()
   {
     //1000 should be _totalWidth but it does not work
@@ -68,28 +66,28 @@ class drawContextFltkStringTexture::queueString {
     //setup matrices
     GLint matrixMode;
     GLuint textureId;
-    glGetIntegerv (GL_MATRIX_MODE, &matrixMode);
-    glMatrixMode (GL_PROJECTION);
+    glGetIntegerv(GL_MATRIX_MODE, &matrixMode);
+    glMatrixMode(GL_PROJECTION);
     glPushMatrix();
     glLoadIdentity ();
-    glMatrixMode (GL_MODELVIEW);
+    glMatrixMode(GL_MODELVIEW);
     glPushMatrix();
     glLoadIdentity ();
     float winw = Fl_Window::current()->w();
     float winh = Fl_Window::current()->h();
-    glScalef (2.0f / winw, 2.0f /  winh, 1.0f);
-    glTranslatef (-winw / 2.0f, -winh / 2.0f, 0.0f);
+    glScalef(2.0f / winw, 2.0f /  winh, 1.0f);
+    glTranslatef(-winw / 2.0f, -winh / 2.0f, 0.0f);
     //write the texture on screen
-    glEnable (GL_TEXTURE_RECTANGLE_ARB);
+    glEnable(GL_TEXTURE_RECTANGLE_ARB);
     glPushAttrib(GL_ENABLE_BIT | GL_TEXTURE_BIT | GL_COLOR_BUFFER_BIT);
     glDisable(GL_LIGHTING);
-    glDisable (GL_DEPTH_TEST);
-    glEnable (GL_BLEND);
+    glDisable(GL_DEPTH_TEST);
+    glEnable(GL_BLEND);
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-    glGenTextures (1, &textureId);
-    glBindTexture (GL_TEXTURE_RECTANGLE_ARB, textureId);
-    glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_ALPHA, w, h, 0,
-                  GL_ALPHA, GL_UNSIGNED_BYTE, data);
+    glGenTextures(1, &textureId);
+    glBindTexture(GL_TEXTURE_RECTANGLE_ARB, textureId);
+    glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_ALPHA, w, h, 0,
+                 GL_ALPHA, GL_UNSIGNED_BYTE, data);
     //glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_SRC0_ALPHA);
     //printf("error %i %s\n", __LINE__, gluErrorString(glGetError()));
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
@@ -100,7 +98,6 @@ class drawContextFltkStringTexture::queueString {
       glColor4f(it->r, it->g, it->b, it->alpha);
       int Lx = it->width;
       int Ly = it->height;
-
       glBegin (GL_QUADS);
       glTexCoord2f(pos, 0);
       glVertex2f(0.0f, Ly);
@@ -110,7 +107,7 @@ class drawContextFltkStringTexture::queueString {
       glVertex2f(Lx, 0.0f);
       glTexCoord2f(pos, Ly);
       glVertex2f(0.0f, 0.0f);
-      glEnd ();
+      glEnd();
       pos += Lx;
       glTranslatef(-it->x, -it->y, -it->z);
     }
@@ -122,7 +119,7 @@ class drawContextFltkStringTexture::queueString {
     glPopMatrix(); // GL_MODELVIEW
     glMatrixMode (GL_PROJECTION);
     glPopMatrix();
-    glMatrixMode (matrixMode);
+    glMatrixMode(matrixMode);
     _elements.clear();
     _maxHeight = 0;
     _totalWidth = 0;
@@ -162,4 +159,3 @@ void drawContextFltkStringTexture::setFont(int fontid, int fontsize)
   _currentFontId = fontid;
   _currentFontSize = fontsize;
 }
-
diff --git a/Graphics/drawContext.cpp b/Graphics/drawContext.cpp
index 4bd617c4735b9332cc41576649ea48886c146d67..539b6ba8ec4b287832f8e7191724c514b670614f 100644
--- a/Graphics/drawContext.cpp
+++ b/Graphics/drawContext.cpp
@@ -21,6 +21,7 @@
 #include "gl2ps.h"
 
 #if defined(HAVE_FLTK)
+#include <FL/Fl.h>
 #include <FL/Fl_JPEG_Image.H>
 #include <FL/Fl_PNG_Image.H>
 #include <FL/gl.h>
@@ -380,7 +381,7 @@ void drawContext::drawBackgroundImage(bool threeD)
         return;
       }
     }
-    _bgImageTexture = gmshPopplerWrapper::getTextureForPage(800, 600);
+    _bgImageTexture = gmshPopplerWrapper::getTextureForPage(1024, 1024);
     _bgImageW = gmshPopplerWrapper::width();
     _bgImageH = gmshPopplerWrapper::height();
 #endif
@@ -394,15 +395,18 @@ void drawContext::drawBackgroundImage(bool threeD)
       else if(ext == ".png" || ext == ".PNG")
         img = new Fl_PNG_Image(name.c_str());
       if(img){
+        Fl_RGB_Image *img2 = (Fl_RGB_Image*)img->copy(1024, 1024);
         glGenTextures(1, &_bgImageTexture);
         glBindTexture(GL_TEXTURE_2D, _bgImageTexture);
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img->w(), img->h(), 0,
-                     GL_RGB, GL_UNSIGNED_BYTE, img->array);
-        _bgImageW = img->w();
-        _bgImageH = img->h();
+        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img2->w(), img2->h(), 0,
+                     (img2->d() == 4) ? GL_RGBA : GL_RGB,
+                     GL_UNSIGNED_BYTE, img2->array);
+        _bgImageW = img2->w();
+        _bgImageH = img2->h();
         delete img;
+        delete img2;
       }
       else{
         Msg::Error("Could not load background image '%s'", name.c_str());