--- /dev/null
+Index: navit/navit/graphics/qt_qpainter/graphics_qt_qpainter.cpp
+===================================================================
+--- navit.orig/navit/graphics/qt_qpainter/graphics_qt_qpainter.cpp 2010-02-05 09:34:05.663481790 +0100
++++ navit/navit/graphics/qt_qpainter/graphics_qt_qpainter.cpp 2010-02-05 09:35:04.852995124 +0100
+@@ -70,6 +70,7 @@
+ #include <QWidget>
+ #include <QPolygonF>
+ #include <QtGui>
++#include <QSvgRenderer>
+ #endif
+
+
+@@ -212,7 +213,7 @@
+ QImage img=overlay->widget->pixmap->convertToImage();
+ img.setAlphaBuffer(1);
+ #else
+- QImage img=overlay->widget->pixmap->toImage().convertToFormat(QImage::Format_ARGB32);
++ QImage img=overlay->widget->pixmap->toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied);
+ #endif
+ data=img.bits();
+ for (i = 0 ; i < size ; i++) {
+@@ -296,11 +297,13 @@
+ delete pixmap;
+ pixmap=new QPixmap(size);
+ pixmap->fill();
+- QPainter painter(pixmap);
+ QBrush brush;
++ QPainter painter;
++ painter.begin(pixmap);
+ painter.fillRect(0, 0, size.width(), size.height(), brush);
+- dbg(0,"size %dx%d\n", size.width(), size.height());
+- dbg(0,"pixmap %p %dx%d\n", pixmap, pixmap->width(), pixmap->height());
++ painter.end();
++ dbg(1,"size %dx%d\n", size.width(), size.height());
++ dbg(1,"pixmap %p %dx%d\n", pixmap, pixmap->width(), pixmap->height());
+ callback_list_call_attr_2(this->cbl, attr_resize, (void *)size.width(), (void *)size.height());
+ }
+ }
+@@ -452,6 +455,7 @@
+ //##############################################################################################################
+ struct graphics_image_priv {
+ QImage *image;
++ QSvgRenderer *renderer;
+ };
+
+ //##############################################################################################################
+@@ -584,14 +588,33 @@
+ static struct graphics_image_priv * image_new(struct graphics_priv *gr, struct graphics_image_methods *meth, char *path, int *w, int *h, struct point *hot, int rotation)
+ {
+ struct graphics_image_priv *ret;
++ QString filename(path);
++
++ dbg(1,"filename is %s\n", path);
+
+ ret=g_new0(struct graphics_image_priv, 1);
+
+- ret->image=new QImage(path);
+- if (ret->image->isNull()) {
+- delete(ret->image);
+- g_free(ret);
+- return NULL;
++ if(filename.contains(".svg", Qt::CaseInsensitive)) {
++ QFile imagefile(filename);
++ if (!imagefile.open(QIODevice::ReadOnly)) {
++ g_free(ret);
++ return NULL;
++ }
++ QByteArray svgData = imagefile.readAll();
++ imagefile.close();
++ ret->renderer=new QSvgRenderer(svgData);
++ if (*w == -1 && *h == -1)
++ ret->image=new QImage(ret->renderer->defaultSize(), QImage::Format_ARGB32_Premultiplied);
++ else
++ ret->image=new QImage(QSize(*w,*h), QImage::Format_ARGB32_Premultiplied);
++ } else {
++ ret->image=new QImage(path);
++ ret->renderer=NULL;
++ if (ret->image->isNull()) {
++ delete(ret->image);
++ g_free(ret);
++ return NULL;
++ }
+ }
+ *w=ret->image->width();
+ *h=ret->image->height();
+@@ -721,7 +744,7 @@
+ data=img.bits();
+ gr->freetype_methods.get_shadow(g,(unsigned char *)(img.jumpTable()),32,0,bgc,&transparent);
+ #else
+- QImage img(g->w+2, g->h+2, QImage::Format_ARGB32);
++ QImage img(g->w+2, g->h+2, QImage::Format_ARGB32_Premultiplied);
+ data=img.bits();
+ gr->freetype_methods.get_shadow(g,(unsigned char *)data,32,img.bytesPerLine(),bgc,&transparent);
+ #endif
+@@ -747,7 +770,7 @@
+ data=img.bits();
+ gr->freetype_methods.get_glyph(g,(unsigned char *)(img.jumpTable()),32,0,fgc,bgc,&transparent);
+ #else
+- QImage img(g->w, g->h, QImage::Format_ARGB32);
++ QImage img(g->w, g->h, QImage::Format_ARGB32_Premultiplied);
+ data=img.bits();
+ gr->freetype_methods.get_glyph(g,(unsigned char *)data,32,img.bytesPerLine(),fgc,bgc,&transparent);
+ #endif
+@@ -767,7 +790,11 @@
+ //##############################################################################################################
+ static void draw_image(struct graphics_priv *gr, struct graphics_gc_priv *fg, struct point *p, struct graphics_image_priv *img)
+ {
+- gr->painter->drawImage(p->x, p->y, *img->image);
++ if ( img->renderer != NULL) {
++ img->renderer->render(gr->painter, QRect(QPoint(p->x,p->y),img->image->size()));
++ } else {
++ gr->painter->drawImage(p->x, p->y, *img->image);
++ }
+ }
+
+ //##############################################################################################################
+@@ -926,6 +953,9 @@
+ static void
+ image_free(struct graphics_priv *gr, struct graphics_image_priv *priv)
+ {
++ if (priv->renderer != NULL) {
++ delete priv->renderer;
++ }
+ delete priv->image;
+ g_free(priv);
+ }
+@@ -1019,7 +1049,10 @@
+ static void
+ event_qt_main_loop_run(void)
+ {
+- event_gr->app->exec();
++#if defined(Q_WS_X11) && if QT_VERSION >= 0x040500
++ QApplication::setGraphicsSystem("raster");
++#endif
++ event_gr->app->exec();
+ }
+
+ static void event_qt_main_loop_quit(void)