diff --git a/src/private/ScrollViewHelper.qml b/src/private/ScrollViewHelper.qml
index 9e8e78d61245eff1ace72b9841aaa49f02ebddaa..c992de92ce432d9bc26c7349d0419a8cac3361ac 100644
--- a/src/private/ScrollViewHelper.qml
+++ b/src/private/ScrollViewHelper.qml
@@ -121,7 +121,7 @@ Item {
 
     ScrollBar {
         id: hscrollbar
-        property bool isTransient: !!__panel && __panel.styleHint("transientScrollBars")
+        property bool isTransient: !!__panel && __panel.transient
         property bool active: !!__panel && (__panel.sunken || __panel.activeControl != "none")
         orientation: Qt.Horizontal
         visible: contentWidth > availableWidth
@@ -145,6 +145,12 @@ Item {
             value: vscrollbar.active
             when: hscrollbar.isTransient
         }
+        Binding {
+            target: hscrollbar.__panel
+            property: "visible"
+            value: true
+            when: !hscrollbar.isTransient
+        }
         function flash() {
             if (hscrollbar.isTransient) {
                 hscrollbar.__panel.on = true
@@ -155,7 +161,7 @@ Item {
 
     ScrollBar {
         id: vscrollbar
-        property bool isTransient: !!__panel && __panel.styleHint("transientScrollBars")
+        property bool isTransient: !!__panel && __panel.transient
         property bool active: !!__panel && (__panel.sunken || __panel.activeControl !== "none")
         orientation: Qt.Vertical
         visible: contentHeight > availableHeight
@@ -179,6 +185,12 @@ Item {
             value: hscrollbar.active
             when: vscrollbar.isTransient
         }
+        Binding {
+            target: vscrollbar.__panel
+            property: "visible"
+            value: true
+            when: !vscrollbar.isTransient
+        }
         function flash() {
             if (vscrollbar.isTransient) {
                 vscrollbar.__panel.on = true
diff --git a/src/private/qquickstyleitem.cpp b/src/private/qquickstyleitem.cpp
index 115841adf04076c8998e56a867c1f62ca4d603f6..f9809155f63acc8c731ebe484bab4cc8dab0bbfd 100644
--- a/src/private/qquickstyleitem.cpp
+++ b/src/private/qquickstyleitem.cpp
@@ -122,6 +122,7 @@ QQuickStyleItem::QQuickStyleItem(QQuickItem *parent)
     m_hover(false),
     m_on(false),
     m_horizontal(true),
+    m_transient(false),
     m_sharedWidget(false),
     m_minimum(0),
     m_maximum(100),
@@ -153,6 +154,7 @@ QQuickStyleItem::QQuickStyleItem(QQuickItem *parent)
     connect(this, SIGNAL(minimumChanged()), this, SLOT(updateItem()));
     connect(this, SIGNAL(valueChanged()), this, SLOT(updateItem()));
     connect(this, SIGNAL(horizontalChanged()), this, SLOT(updateItem()));
+    connect(this, SIGNAL(transientChanged()), this, SLOT(updateItem()));
     connect(this, SIGNAL(activeControlChanged()), this, SLOT(updateItem()));
     connect(this, SIGNAL(hasFocusChanged()), this, SLOT(updateItem()));
     connect(this, SIGNAL(activeControlChanged()), this, SLOT(updateItem()));
@@ -606,6 +608,8 @@ void QQuickStyleItem::initStyleOption()
 
         opt->sliderValue = value();
         opt->subControls = QStyle::SC_All;
+
+        setTransient(qApp->style()->styleHint(QStyle::SH_ScrollBar_Transient, m_styleoption));
         break;
     }
     default:
@@ -962,8 +966,6 @@ QVariant QQuickStyleItem::styleHint(const QString &metric)
         return qApp->style()->styleHint(QStyle::SH_ScrollBar_LeftClickAbsolutePosition);
     else if (metric == "activateItemOnSingleClick")
         return qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick);
-    else if (metric == "transientScrollBars")
-        return qApp->style()->styleHint(QStyle::SH_ScrollBar_Transient, m_styleoption);
     return 0;
 
     // Add SH_Menu_SpaceActivatesItem, SH_Menu_SubMenuPopupDelay
@@ -1446,6 +1448,9 @@ bool QQuickStyleItem::event(QEvent *ev)
     if (ev->type() == QEvent::StyleAnimationUpdate) {
         polish();
         return true;
+    } else if (ev->type() == QEvent::StyleChange) {
+        if (m_itemType == ScrollBar)
+            initStyleOption();
     }
     return QQuickItem::event(ev);
 }
diff --git a/src/private/qquickstyleitem_p.h b/src/private/qquickstyleitem_p.h
index eee9e6e51f78fc20f6e66697f2ffefc2a0a775f0..cfe9866ebdb14592ffd8040270f369212d631270 100644
--- a/src/private/qquickstyleitem_p.h
+++ b/src/private/qquickstyleitem_p.h
@@ -62,6 +62,7 @@ class QQuickStyleItem: public QQuickItem
     Q_PROPERTY( bool on READ on WRITE setOn NOTIFY onChanged)
     Q_PROPERTY( bool hover READ hover WRITE setHover NOTIFY hoverChanged)
     Q_PROPERTY( bool horizontal READ horizontal WRITE setHorizontal NOTIFY horizontalChanged)
+    Q_PROPERTY( bool transient READ transient WRITE setTransient NOTIFY transientChanged)
 
     Q_PROPERTY( QString elementType READ elementType WRITE setElementType NOTIFY elementTypeChanged)
     Q_PROPERTY( QString text READ text WRITE setText NOTIFY textChanged)
@@ -130,6 +131,7 @@ public:
     bool on() const { return m_on; }
     bool hover() const { return m_hover; }
     bool horizontal() const { return m_horizontal; }
+    bool transient() const { return m_transient; }
 
     int minimum() const { return m_minimum; }
     int maximum() const { return m_maximum; }
@@ -153,6 +155,7 @@ public:
     void setOn(bool on) { if (m_on != on) {m_on = on ; emit onChanged();}}
     void setHover(bool hover) { if (m_hover != hover) {m_hover = hover ; emit hoverChanged();}}
     void setHorizontal(bool horizontal) { if (m_horizontal != horizontal) {m_horizontal = horizontal; emit horizontalChanged();}}
+    void setTransient(bool transient) { if (m_transient != transient) {m_transient = transient; emit transientChanged();}}
     void setMinimum(int minimum) { if (m_minimum!= minimum) {m_minimum = minimum; emit minimumChanged();}}
     void setMaximum(int maximum) { if (m_maximum != maximum) {m_maximum = maximum; emit maximumChanged();}}
     void setValue(int value) { if (m_value!= value) {m_value = value; emit valueChanged();}}
@@ -198,6 +201,7 @@ Q_SIGNALS:
     void onChanged();
     void hoverChanged();
     void horizontalChanged();
+    void transientChanged();
     void minimumChanged();
     void maximumChanged();
     void stepChanged();
@@ -241,6 +245,7 @@ protected:
     bool m_hover;
     bool m_on;
     bool m_horizontal;
+    bool m_transient;
     bool m_sharedWidget;
 
     int m_minimum;
diff --git a/src/styles/Desktop/ScrollViewStyle.qml b/src/styles/Desktop/ScrollViewStyle.qml
index deddc354a6ea940322f02e5cfcd1372b98ac6256..203a9ec4b7b5f583c9c7f951fa9e96a469b7faf1 100644
--- a/src/styles/Desktop/ScrollViewStyle.qml
+++ b/src/styles/Desktop/ScrollViewStyle.qml
@@ -69,7 +69,7 @@ Style {
     readonly property bool scrollToClickedPosition: __styleitem.styleHint("scrollToClickPosition") !== 0
 
     property Component __scrollbar: StyleItem {
-        readonly property bool isTransient: __styleitem.styleHint("transientScrollBars")
+        readonly property bool isTransient: __styleitem.parent && __styleitem.transient
         anchors.fill:parent
         elementType: "scrollbar"
         hover: activeControl != "none"