diff --git a/src/libs/utils/detailswidget.cpp b/src/libs/utils/detailswidget.cpp
index ba4ff259c06934f3b1a75bbba90e06b13be40cdc..228a2c277f74fb3fcc34bdf19e091b16f7ff6689 100644
--- a/src/libs/utils/detailswidget.cpp
+++ b/src/libs/utils/detailswidget.cpp
@@ -36,11 +36,9 @@
 #include <QtGui/QLabel>
 #include <QtGui/QPainter>
 
-using namespace Utils;
+namespace Utils {
 
-namespace {
-const int MARGIN=8;
-}
+static const int MARGIN=8;
 
 // This widget is using a grid layout and places the items
 // in the following way:
@@ -51,33 +49,55 @@ const int MARGIN=8;
 // |            | widget                                  |
 // +------------+-------------------------+---------------+
 
+struct DetailsWidgetPrivate {
+    DetailsWidgetPrivate();
+
+    DetailsButton *m_detailsButton;
+    QGridLayout *m_grid;
+    QLabel *m_summaryLabel;
+    QWidget *m_toolWidget;
+    QWidget *m_widget;
+
+    QPixmap m_collapsedPixmap;
+    QPixmap m_expandedPixmap;
+
+    DetailsWidget::State m_state;
+    bool m_hovered;
+};
+
+DetailsWidgetPrivate::DetailsWidgetPrivate() :
+        m_detailsButton(new DetailsButton),
+        m_grid(new QGridLayout),
+        m_summaryLabel(new QLabel),
+        m_toolWidget(0),
+        m_widget(0),
+        m_state(DetailsWidget::Collapsed),
+        m_hovered(false)
+{
+}
+
 DetailsWidget::DetailsWidget(QWidget *parent) :
     QWidget(parent),
-    m_detailsButton(new DetailsButton(this)),
-    m_grid(new QGridLayout(this)),
-    m_summaryLabel(new QLabel(this)),
-    m_toolWidget(0),
-    m_widget(0),
-    m_state(Collapsed),
-    m_hovered(false)
-{
-    m_summaryLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
-    m_summaryLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
-    m_summaryLabel->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN);
-
-    m_grid->setContentsMargins(0, 0, 0, 0);
-    m_grid->setSpacing(0);
-    m_grid->addWidget(m_summaryLabel, 0, 1);
-    m_grid->addWidget(m_detailsButton, 0, 2);
-
-    connect(m_detailsButton, SIGNAL(toggled(bool)),
+    d(new DetailsWidgetPrivate)
+{
+    d->m_summaryLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
+    d->m_summaryLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+    d->m_summaryLabel->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN);
+
+    d->m_grid->setContentsMargins(0, 0, 0, 0);
+    d->m_grid->setSpacing(0);
+    d->m_grid->addWidget(d->m_summaryLabel, 0, 1);
+    d->m_grid->addWidget(d->m_detailsButton, 0, 2);
+    setLayout(d->m_grid);
+
+    connect(d->m_detailsButton, SIGNAL(toggled(bool)),
             this, SLOT(setExpanded(bool)));
     updateControls();
 }
 
 DetailsWidget::~DetailsWidget()
 {
-
+    delete d;
 }
 
 void DetailsWidget::paintEvent(QPaintEvent *paintEvent)
@@ -86,19 +106,19 @@ void DetailsWidget::paintEvent(QPaintEvent *paintEvent)
 
     QPainter p(this);
 
-    QPoint topLeft(m_summaryLabel->geometry().left(), contentsRect().top());
+    QPoint topLeft(d->m_summaryLabel->geometry().left(), contentsRect().top());
     const QRect paintArea(topLeft, contentsRect().bottomRight());
 
-    if (m_state != Expanded) {
-        if (m_collapsedPixmap.isNull() ||
-            m_collapsedPixmap.size() != size())
-            m_collapsedPixmap = cacheBackground(paintArea.size(), false);
-        p.drawPixmap(paintArea, m_collapsedPixmap);
+    if (d->m_state != Expanded) {
+        if (d->m_collapsedPixmap.isNull() ||
+            d->m_collapsedPixmap.size() != size())
+            d->m_collapsedPixmap = cacheBackground(paintArea.size(), false);
+        p.drawPixmap(paintArea, d->m_collapsedPixmap);
     } else {
-        if (m_expandedPixmap.isNull() ||
-            m_expandedPixmap.size() != size())
-            m_expandedPixmap = cacheBackground(paintArea.size(), true);
-        p.drawPixmap(paintArea, m_expandedPixmap);
+        if (d->m_expandedPixmap.isNull() ||
+            d->m_expandedPixmap.size() != size())
+            d->m_expandedPixmap = cacheBackground(paintArea.size(), true);
+        p.drawPixmap(paintArea, d->m_expandedPixmap);
     }
 }
 
@@ -116,24 +136,24 @@ void DetailsWidget::leaveEvent(QEvent * event)
 
 void DetailsWidget::setSummaryText(const QString &text)
 {
-    m_summaryLabel->setText(text);
+    d->m_summaryLabel->setText(text);
 }
 
 QString DetailsWidget::summaryText() const
 {
-    return m_summaryLabel->text();
+    return d->m_summaryLabel->text();
 }
 
 DetailsWidget::State DetailsWidget::state() const
 {
-    return m_state;
+    return d->m_state;
 }
 
 void DetailsWidget::setState(State state)
 {
-    if (state == m_state)
+    if (state == d->m_state)
         return;
-    m_state = state;
+    d->m_state = state;
     updateControls();
 }
 
@@ -144,60 +164,60 @@ void DetailsWidget::setExpanded(bool expanded)
 
 void DetailsWidget::updateControls()
 {
-    if (m_widget)
-        m_widget->setVisible(m_state == Expanded || m_state == NoSummary);
-    m_detailsButton->setChecked(m_state == Expanded && m_widget);
-    m_summaryLabel->setEnabled(m_state == Collapsed && m_widget);
-    m_detailsButton->setVisible(m_state != NoSummary);
-    m_summaryLabel->setVisible(m_state != NoSummary);
+    if (d->m_widget)
+        d->m_widget->setVisible(d->m_state == Expanded || d->m_state == NoSummary);
+    d->m_detailsButton->setChecked(d->m_state == Expanded && d->m_widget);
+    d->m_summaryLabel->setEnabled(d->m_state == Collapsed && d->m_widget);
+    d->m_detailsButton->setVisible(d->m_state != NoSummary);
+    d->m_summaryLabel->setVisible(d->m_state != NoSummary);
 }
 
 QWidget *DetailsWidget::widget() const
 {
-    return m_widget;
+    return d->m_widget;
 }
 
 void DetailsWidget::setWidget(QWidget *widget)
 {
-    if (m_widget == widget)
+    if (d->m_widget == widget)
         return;
 
-    if (m_widget) {
-        m_grid->removeWidget(m_widget);
-        delete m_widget;
+    if (d->m_widget) {
+        d->m_grid->removeWidget(d->m_widget);
+        delete d->m_widget;
     }
 
-    m_widget = widget;
+    d->m_widget = widget;
 
-    if (m_widget) {
-        m_widget->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN);
-        m_grid->addWidget(m_widget, 1, 1, 1, 2);
+    if (d->m_widget) {
+        d->m_widget->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN);
+        d->m_grid->addWidget(d->m_widget, 1, 1, 1, 2);
     }
     updateControls();
 }
 
 void DetailsWidget::setToolWidget(QWidget *widget)
 {
-    if (m_toolWidget == widget)
+    if (d->m_toolWidget == widget)
         return;
 
-    m_toolWidget = widget;
+    d->m_toolWidget = widget;
 
-    if (!m_toolWidget)
+    if (!d->m_toolWidget)
         return;
 
-    m_toolWidget->adjustSize();
-    m_grid->addWidget(m_toolWidget, 0, 0, 1, 1, Qt::AlignCenter);
+    d->m_toolWidget->adjustSize();
+    d->m_grid->addWidget(d->m_toolWidget, 0, 0, 1, 1, Qt::AlignCenter);
 
-    m_grid->setColumnMinimumWidth(0, m_toolWidget->width());
-    m_grid->setRowMinimumHeight(0, m_toolWidget->height());
+    d->m_grid->setColumnMinimumWidth(0, d->m_toolWidget->width());
+    d->m_grid->setRowMinimumHeight(0, d->m_toolWidget->height());
 
-    changeHoverState(m_hovered);
+    changeHoverState(d->m_hovered);
 }
 
 QWidget *DetailsWidget::toolWidget() const
 {
-    return m_toolWidget;
+    return d->m_toolWidget;
 }
 
 QPixmap DetailsWidget::cacheBackground(const QSize &size, bool expanded)
@@ -217,8 +237,8 @@ QPixmap DetailsWidget::cacheBackground(const QSize &size, bool expanded)
     p.drawRect(0, 0, size.width() - 1, size.height() - 1);
 
     if (expanded) {
-        p.drawLine(0, m_widget->geometry().top() - 1,
-                   m_summaryLabel->width(), m_widget->geometry().top() - 1);
+        p.drawLine(0, d->m_widget->geometry().top() - 1,
+                   d->m_summaryLabel->width(), d->m_widget->geometry().top() - 1);
     }
 
     return pixmap;
@@ -226,10 +246,12 @@ QPixmap DetailsWidget::cacheBackground(const QSize &size, bool expanded)
 
 void DetailsWidget::changeHoverState(bool hovered)
 {
-    if (!m_toolWidget)
+    if (!d->m_toolWidget)
         return;
 
-    m_toolWidget->setVisible(hovered);
+    d->m_toolWidget->setVisible(hovered);
 
-    m_hovered = hovered;
+    d->m_hovered = hovered;
 }
+
+} // namespace Utils
diff --git a/src/libs/utils/detailswidget.h b/src/libs/utils/detailswidget.h
index 03861877c010dd3c3fa70d2da0a0a213921768c1..328ddaa141334b72a9fd2d7dcd1f513c059c28c8 100644
--- a/src/libs/utils/detailswidget.h
+++ b/src/libs/utils/detailswidget.h
@@ -32,22 +32,22 @@
 
 #include "utils_global.h"
 
-#include <QtGui/QPixmap>
 #include <QtGui/QWidget>
 
 QT_BEGIN_NAMESPACE
-class QLabel;
-class QGridLayout;
+class QPixmap;
 QT_END_NAMESPACE
 
 namespace Utils {
-class DetailsButton;
+
+struct DetailsWidgetPrivate;
 
 class QTCREATOR_UTILS_EXPORT DetailsWidget : public QWidget
 {
     Q_OBJECT
     Q_PROPERTY(QString summaryText READ summaryText WRITE setSummaryText DESIGNABLE true)
     Q_PROPERTY(State state READ state WRITE setState)
+    Q_ENUMS(State)
 
 public:
     enum State {
@@ -56,9 +56,8 @@ public:
         NoSummary
     };
 
-
-    DetailsWidget(QWidget *parent = 0);
-    ~DetailsWidget();
+    explicit DetailsWidget(QWidget *parent = 0);
+    virtual ~DetailsWidget();
 
     void setSummaryText(const QString &text);
     QString summaryText() const;
@@ -76,27 +75,18 @@ private slots:
     void setExpanded(bool);
 
 protected:
-    void paintEvent(QPaintEvent *paintEvent);
-    void enterEvent(QEvent *event);
-    void leaveEvent(QEvent *event);
+    virtual void paintEvent(QPaintEvent *paintEvent);
+    virtual void enterEvent(QEvent *event);
+    virtual void leaveEvent(QEvent *event);
 
 private:
     void updateControls();
     QPixmap cacheBackground(const QSize &size, bool expanded);
     void changeHoverState(bool hovered);
 
-    DetailsButton *m_detailsButton;
-    QGridLayout *m_grid;
-    QLabel *m_summaryLabel;
-    QWidget *m_toolWidget;
-    QWidget *m_widget;
-
-    QPixmap m_collapsedPixmap;
-    QPixmap m_expandedPixmap;
-
-    State m_state;
-    bool m_hovered;
+    DetailsWidgetPrivate *d;
 };
-}
+
+} // namespace Utils
 
 #endif // DETAILSWIDGET_H