diff --git a/debian/changelog b/debian/changelog
index dea3e5f7af816257fc99e23a1ca3d9f8f8e7b2f6..9e909123301ecd449430f8ff1d6b720f7c8676c9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-sflphoned (0.6.1-1) unstable; urgency=low
+sflphoned (0.6.3-1) unstable; urgency=low
 
   * Initial Release.
 
diff --git a/libs/taxidermy/Hunter.cpp b/libs/taxidermy/Hunter.cpp
index 9b171b96e6adbd1f1ccdf70ed907be75ff5897dd..32adb3c8ba4de673acfbe35e295e1f426e85747b 100644
--- a/libs/taxidermy/Hunter.cpp
+++ b/libs/taxidermy/Hunter.cpp
@@ -101,7 +101,10 @@ taxidermy::Hunter::load(taxidermy::Taxidermist *skin)
     Conf::ValuesMap values = config.getSection(*it);
     Conf::ValuesMap::iterator type = values.find("type");
 
-    if(type != values.end()) {
+    if(type == values.end()) {
+      std::cerr << "Widget named \"" << *it << "\" don't have a type.\n";
+    }
+    else {
       QMap< QString, QString > v;
       WidgetBuilder *builder = 
 	taxidermy::WidgetBuilderFactory::instance().create(type->second);
diff --git a/libs/taxidermy/Makefile.am b/libs/taxidermy/Makefile.am
index daab78edce945a33ec36dbb9d74af27f27956b42..75216c8eeef3e4545d0aaae81d625a95559de0d7 100644
--- a/libs/taxidermy/Makefile.am
+++ b/libs/taxidermy/Makefile.am
@@ -5,6 +5,7 @@ BUILT_SOURCES = \
            Huntermoc.cpp \
            PaintEventFiltermoc.cpp \
            QButtonBuildermoc.cpp \
+           QWidgetBuildermoc.cpp \
            WidgetBuilderCreatormoc.cpp \
            WidgetBuilderFactorymoc.cpp \
            WidgetBuilderFactoryImplmoc.cpp \
@@ -15,6 +16,7 @@ noinst_HEADERS = \
            EventFilter.hpp \
            Hunter.hpp \
            PaintEventFilter.hpp \
+           QWidgetBuilder.hpp \
            QButtonBuilder.hpp \
            Taxidermist.hpp \
            WidgetBuilderCreator.hpp WidgetBuilderCreator.inl \
@@ -30,6 +32,7 @@ libtaxidermy_la_SOURCES = \
 	EventFilter.cpp \
            Hunter.cpp \
            PaintEventFilter.cpp \
+           QWidgetBuilder.cpp \
            QButtonBuilder.cpp \
            Taxidermist.cpp \
            WidgetBuilder.cpp \
diff --git a/libs/taxidermy/QWidgetBuilder.cpp b/libs/taxidermy/QWidgetBuilder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fc3af9a0b2ba9436f0ba4db81cfca1a1f7e07016
--- /dev/null
+++ b/libs/taxidermy/QWidgetBuilder.cpp
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2004-2005 Savoir-Faire Linux inc.
+ * Author: Jean-Philippe Barrette-LaPierre
+ *            (jean-philippe.barrette-lapierre@savoirfairelinux.com)
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2,
+ * or (at your option) any later version.
+ *
+ * This is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with dpkg; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <iostream>
+#include <qpainter.h>
+
+#include "PaintEventFilter.hpp"
+#include "QWidgetBuilder.hpp"
+#include "qtutils.hpp"
+
+taxidermy::QWidgetBuilder::QWidgetBuilder()
+  : WidgetBuilder("QWidget")
+  , mWidget(NULL)
+  , mPosSet(false)
+{}
+
+void
+taxidermy::QWidgetBuilder::load(const QMap< QString, QString > &values)
+{
+  QMap< QString, QString >::ConstIterator xpos = values.find("x");
+  QMap< QString, QString >::ConstIterator ypos = values.find("y");
+  if(xpos != values.end() && ypos != values.end()) {
+    mPosSet = true;
+    mX = (*xpos).toInt();
+    mY = (*ypos).toInt();
+  }
+
+  QMap< QString, QString >::ConstIterator background = values.find("background");
+  if(background != values.end()) {
+    mBackground = qtutils::transparize(*background);
+  }
+}
+
+void
+taxidermy::QWidgetBuilder::update()
+{
+  update(mWidget);
+}
+
+void
+taxidermy::QWidgetBuilder::update(QWidget *widget)
+{  
+  mWidget = widget;
+
+  if(mWidget) {
+    if(mPosSet) {
+      mWidget->move(mX, mY);
+    }
+
+    if(!mBackground.isNull()) {
+      mWidget->setPaletteBackgroundPixmap(mBackground);
+      if(mBackground.hasAlpha()) {
+	mWidget->setMask(*mBackground.mask());
+      }
+      mWidget->resize(mBackground.size());
+    }
+  }
+}
+
diff --git a/libs/taxidermy/QWidgetBuilder.hpp b/libs/taxidermy/QWidgetBuilder.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..ae93df067ce6fc3eb67116b74ff1afffeb818d3c
--- /dev/null
+++ b/libs/taxidermy/QWidgetBuilder.hpp
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2004-2005 Savoir-Faire Linux inc.
+ * Author: Jean-Philippe Barrette-LaPierre
+ *            (jean-philippe.barrette-lapierre@savoirfairelinux.com)
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2,
+ * or (at your option) any later version.
+ *
+ * This is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with dpkg; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __TAXIDERMY_QWIDGET_BUILDER_HPP__
+#define __TAXIDERMY_QWIDGET_BUILDER_HPP__
+
+#include <qpixmap.h>
+#include <qwidget.h>
+
+#include "WidgetBuilder.hpp"
+
+namespace taxidermy 
+{
+  class QWidgetBuilder : public WidgetBuilder
+  {
+    Q_OBJECT;
+
+  private:
+    QWidget *mWidget;
+
+    //Position
+    bool mPosSet;
+    int mX;
+    int mY;
+
+    //Images
+    QPixmap mBackground;
+
+  public:
+    QWidgetBuilder();
+
+    virtual void load(const QMap< QString, QString > &entries);
+    virtual void update();
+    virtual void update(QWidget *widget);
+  };
+};
+
+#endif
diff --git a/libs/taxidermy/Taxidermist.cpp b/libs/taxidermy/Taxidermist.cpp
index 022210ae7258a84d526391ce9b4fffc7db9e11cb..be0e5571b7c4b7cb5879d9aa45706241dfbdb9e8 100644
--- a/libs/taxidermy/Taxidermist.cpp
+++ b/libs/taxidermy/Taxidermist.cpp
@@ -18,6 +18,7 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#include <iostream>
 #include <stdexcept>
 #include <qapplication.h>
 #include <qwidgetlist.h>
@@ -41,6 +42,8 @@ void
 taxidermy::Taxidermist::skin(QWidget *widget)
 {
   QMap< QString, WidgetBuilder * >::Iterator pos = mBuilders.find(widget->name());
+  std::cout << "Trying to find a skin for: " << widget->name() << std::endl;
+
   if(pos != mBuilders.end()) {
     (*pos)->update(widget);
   }
@@ -51,6 +54,7 @@ taxidermy::Taxidermist::update(QApplication *app)
 {
   QWidget *mainWidget = app->mainWidget();
   if(mainWidget) {
+    skin(mainWidget);
     for(QMap< QString, WidgetBuilder * >::Iterator pos = mBuilders.begin();
 	pos != mBuilders.end();
 	pos++) {
diff --git a/libs/taxidermy/WidgetBuilder.hpp b/libs/taxidermy/WidgetBuilder.hpp
index d4d23fc1794b6aa0c6bbe9272b5d5e51fe606a65..5e588f3adb96fec277d1b9334caccba404b68dfd 100644
--- a/libs/taxidermy/WidgetBuilder.hpp
+++ b/libs/taxidermy/WidgetBuilder.hpp
@@ -18,6 +18,9 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#ifndef __TAXIDERMY_WIDGET_BUILDER_HPP__
+#define __TAXIDERMY_WIDGET_BUILDER_HPP__
+
 #include <qmap.h>
 #include <qobject.h>
 #include <qsettings.h>
@@ -51,3 +54,5 @@ namespace taxidermy {
     virtual void update(QWidget *widget) = 0;
   };
 };
+
+#endif
diff --git a/libs/taxidermy/WidgetBuilderFactoryImpl.cpp b/libs/taxidermy/WidgetBuilderFactoryImpl.cpp
index 0a3741ba97608ec1015ada526bedae701ace1794..5fc2e35eb885b3762c6a1cfaff0aa31afc1895bf 100644
--- a/libs/taxidermy/WidgetBuilderFactoryImpl.cpp
+++ b/libs/taxidermy/WidgetBuilderFactoryImpl.cpp
@@ -20,10 +20,12 @@
 
 #include "WidgetBuilderFactoryImpl.hpp"
 #include "QButtonBuilder.hpp"
+#include "QWidgetBuilder.hpp"
 
 taxidermy::WidgetBuilderFactoryImpl::WidgetBuilderFactoryImpl()
 {
   add<QButtonBuilder>("QButton");
+  add<QWidgetBuilder>("QWidget");
 }
 
 
diff --git a/skins/metal.ini b/skins/metal.ini
index 4ef717499f2eb5167482457031312c89b21a5942..d4267b9c028579fbc808081acff14aa2bd4469a7 100644
--- a/skins/metal.ini
+++ b/skins/metal.ini
@@ -168,6 +168,11 @@ pressed=redial_on.png
 released=redial_off.png
 paint=1
 
+[main]
+type=QWidget
+background=main.png
+
+
 # DTMF Keypad
 #dtmf_1=12,22
 #dtmf_2=58,22
diff --git a/skins/metal/main.png b/skins/metal/main.png
new file mode 100644
index 0000000000000000000000000000000000000000..ddf434171b5f5b93f31616615a603bbb593b4475
Binary files /dev/null and b/skins/metal/main.png differ
diff --git a/src/gui/qt/SFLPhoneWindow.cpp b/src/gui/qt/SFLPhoneWindow.cpp
index 673c369a0bcb82fc4d4ffbadc559e04487ae65c3..431af0aeb9ec1f32676e96df01862fda0ce3c666 100644
--- a/src/gui/qt/SFLPhoneWindow.cpp
+++ b/src/gui/qt/SFLPhoneWindow.cpp
@@ -68,12 +68,7 @@ SFLPhoneWindow::SFLPhoneWindow()
 	  this, SIGNAL(needRegister()));
 
   // Initialize the background image
-  mMain = new QLabel(this);
-  QPixmap main(JPushButton::transparize(BACKGROUND_IMAGE));
-  mMain->setPixmap(main);
-  if(main.hasAlpha()) {
-    setMask(*main.mask());
-  }
+  setName("main");
 
   mPaintTimer = new QTimer(this);
   connect(mPaintTimer, SIGNAL(timeout()),
@@ -81,8 +76,6 @@ SFLPhoneWindow::SFLPhoneWindow()
   mPaintTimer->start(50);
   
 
-  resize(main.size());
-  mMain->resize(main.size());
 
   QPixmap logo(QPixmap::fromMimeSource(LOGO_IMAGE));
 #ifdef QIcon
@@ -105,33 +98,33 @@ SFLPhoneWindow::~SFLPhoneWindow()
 void
 SFLPhoneWindow::initLCD()
 {
-  mLcd = new SFLLcd(mMain);
+  mLcd = new SFLLcd(this);
   mLcd->show();
 }
 
 void
 SFLPhoneWindow::initGUIButtons()
 {
-  mHangup = new QPushButton(QObject::tr("Hangup"), mMain, "hangup");
-  mHold = new QPushButton(QObject::tr("Hold"), mMain, "hold");
-  mOk = new QPushButton(QObject::tr("Ok"), mMain, "ok");
-  mClear = new QPushButton(QObject::tr("Clear"), mMain, "clear");
-  mMute = new QPushButton(QObject::tr("Mute"), mMain, "mute");
+  mHangup = new QPushButton(QObject::tr("Hangup"), this, "hangup");
+  mHold = new QPushButton(QObject::tr("Hold"), this, "hold");
+  mOk = new QPushButton(QObject::tr("Ok"), this, "ok");
+  mClear = new QPushButton(QObject::tr("Clear"), this, "clear");
+  mMute = new QPushButton(QObject::tr("Mute"), this, "mute");
   mMute->setToggleButton(true);
-  mDtmf = new QPushButton(QObject::tr("DTMF"), mMain, "dtmf");
+  mDtmf = new QPushButton(QObject::tr("DTMF"), this, "dtmf");
   mDtmf->setToggleButton(true);
-  mSetup = new QPushButton(QObject::tr("Setup"), mMain, "setup");
-  mTransfer = new QPushButton(QObject::tr("Transfer"), mMain, "transfer");
-  mRedial = new QPushButton(QObject::tr("Redial"), mMain, "redial");
+  mSetup = new QPushButton(QObject::tr("Setup"), this, "setup");
+  mTransfer = new QPushButton(QObject::tr("Transfer"), this, "transfer");
+  mRedial = new QPushButton(QObject::tr("Redial"), this, "redial");
   mVolume = new VolumeControl(QString(VOLUME_IMAGE),
-			      mMain);
+			      this);
   mVolume->setOrientation(VolumeControl::Vertical);
   mVolume->move(365,91);
   QObject::connect(mVolume, SIGNAL(valueUpdated(int)),
 		   this, SIGNAL(volumeUpdated(int)));
   
   mMicVolume = new VolumeControl(QString(VOLUME_IMAGE),
-				 mMain);
+				 this);
   mMicVolume->setOrientation(VolumeControl::Vertical);
   mMicVolume->move(347,91);
   QObject::connect(mVolume, SIGNAL(valueUpdated(int)),
@@ -143,17 +136,17 @@ void
 SFLPhoneWindow::initLineButtons()
 {
   for(int i = 0; i < NB_PHONELINES; i++) {
-    PhoneLineButton *line = new PhoneLineButton(i, mMain);
+    PhoneLineButton *line = new PhoneLineButton(i, this);
     mPhoneLineButtons.push_back(line);
   }
 }
 
 void SFLPhoneWindow::initWindowButtons()
 {
-  mCloseButton = new QPushButton(QObject::tr("Close"), mMain, "close");
+  mCloseButton = new QPushButton(QObject::tr("Close"), this, "close");
   QObject::connect(mCloseButton, SIGNAL(clicked()),
 		   this, SLOT(finish()));
-  mMinimizeButton = new QPushButton(QObject::tr("Minimize"), mMain, "minimize");
+  mMinimizeButton = new QPushButton(QObject::tr("Minimize"), this, "minimize");
   QObject::connect(mMinimizeButton, SIGNAL(clicked()),
 		   this, SLOT(showMinimized()));
 }