diff --git a/interface/resources/qml/hifi/+android/bottombar.qml b/interface/resources/qml/hifi/+android/bottombar.qml
index e861d441d9..e31dc9453f 100644
--- a/interface/resources/qml/hifi/+android/bottombar.qml
+++ b/interface/resources/qml/hifi/+android/bottombar.qml
@@ -43,12 +43,6 @@ Item {
     HifiConstants { id: android }
     MouseArea {
         anchors.fill: parent
-        onEntered: {
-            Controller.setVPadEnabled(false);
-        }
-        onExited: {
-            Controller.setVPadEnabled(true);
-        }
     }
 
 	Rectangle {
diff --git a/interface/src/scripting/ControllerScriptingInterface.cpp b/interface/src/scripting/ControllerScriptingInterface.cpp
index 38d5306a1c..49ecc4774d 100644
--- a/interface/src/scripting/ControllerScriptingInterface.cpp
+++ b/interface/src/scripting/ControllerScriptingInterface.cpp
@@ -94,6 +94,11 @@ void ControllerScriptingInterface::setVPadHidden(const bool hidden) {
     virtualPadManager.hide(hidden);
 }
 
+void ControllerScriptingInterface::setVPadExtraBottomMargin(const int margin) {
+    auto& virtualPadManager = VirtualPad::Manager::instance();
+    virtualPadManager.setExtraBottomMargin(margin);
+}
+
 void ControllerScriptingInterface::emitKeyPressEvent(QKeyEvent* event) { emit keyPressEvent(KeyEvent(*event)); }
 void ControllerScriptingInterface::emitKeyReleaseEvent(QKeyEvent* event) { emit keyReleaseEvent(KeyEvent(*event)); }
 
diff --git a/interface/src/scripting/ControllerScriptingInterface.h b/interface/src/scripting/ControllerScriptingInterface.h
index bb5615f996..9b24e2a06e 100644
--- a/interface/src/scripting/ControllerScriptingInterface.h
+++ b/interface/src/scripting/ControllerScriptingInterface.h
@@ -65,8 +65,9 @@ public slots:
     virtual glm::vec2 getViewportDimensions() const;
     virtual QVariant getRecommendedHUDRect() const;
 
-    virtual void setVPadHidden(bool hidden); // Call it when a window should hide it
     virtual void setVPadEnabled(bool enable);
+    virtual void setVPadHidden(bool hidden); // Call it when a window should hide it
+    virtual void setVPadExtraBottomMargin(int margin);
 
 signals:
     void keyPressEvent(const KeyEvent& event);
diff --git a/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.cpp b/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.cpp
index 848174eb76..90a78b3231 100644
--- a/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.cpp
+++ b/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.cpp
@@ -42,7 +42,6 @@ bool TouchscreenVirtualPadDevice::isSupported() const {
 void TouchscreenVirtualPadDevice::init() {
     _fixedPosition = true; // This should be config
 
-
     QScreen* eventScreen = qApp->primaryScreen();
     if (_screenDPI != eventScreen->physicalDotsPerInch()) {
         _screenWidthCenter = eventScreen->size().width() / 2;
@@ -51,18 +50,31 @@ void TouchscreenVirtualPadDevice::init() {
         _screenDPI = eventScreen->physicalDotsPerInch();
 
         _fixedRadius = _screenDPI * 256 / 534;
-        qreal margin = _screenDPI * 59 / 534; // 59px is for our 'base' of 534dpi (Pixel XL or Huawei Mate 9 Pro)
-        _fixedCenterPosition = glm::vec2( _fixedRadius + margin, eventScreen->size().height() - margin - _fixedRadius );
     }
 
+    auto& virtualPadManager = VirtualPad::Manager::instance();
+    setupFixedCenter(virtualPadManager, true);
+
     if (_fixedPosition) {
-        _firstTouchLeftPoint = _fixedCenterPosition;
-        auto& virtualPadManager = VirtualPad::Manager::instance();
         virtualPadManager.getLeftVirtualPad()->setShown(virtualPadManager.isEnabled() && !virtualPadManager.isHidden()); // Show whenever it's enabled
-        virtualPadManager.getLeftVirtualPad()->setFirstTouch(_firstTouchLeftPoint);
     }
 }
 
+void TouchscreenVirtualPadDevice::setupFixedCenter(VirtualPad::Manager& virtualPadManager, bool force) {
+    if (!_fixedPosition) return;
+
+    //auto& virtualPadManager = VirtualPad::Manager::instance();
+    if (_extraBottomMargin == virtualPadManager.extraBottomMargin() && !force) return; // Our only criteria to decide a center change is the bottom margin
+
+    _extraBottomMargin = virtualPadManager.extraBottomMargin();
+    qreal margin = _screenDPI * 59 / 534; // 59px is for our 'base' of 534dpi (Pixel XL or Huawei Mate 9 Pro)
+    QScreen* eventScreen = qApp->primaryScreen(); // do not call every time
+    _fixedCenterPosition = glm::vec2( _fixedRadius + margin, eventScreen->size().height() - margin - _fixedRadius - _extraBottomMargin);
+
+    _firstTouchLeftPoint = _fixedCenterPosition;
+    virtualPadManager.getLeftVirtualPad()->setFirstTouch(_firstTouchLeftPoint);
+}
+
 float clip(float n, float lower, float upper) {
     return std::max(lower, std::min(n, upper));
 }
@@ -74,6 +86,8 @@ void TouchscreenVirtualPadDevice::pluginUpdate(float deltaTime, const controller
     });
 
     auto& virtualPadManager = VirtualPad::Manager::instance();
+    setupFixedCenter(virtualPadManager);
+
     if (_validTouchLeft) {
         float leftDistanceScaleX, leftDistanceScaleY;
         leftDistanceScaleX = (_currentTouchLeftPoint.x - _firstTouchLeftPoint.x) / _screenDPIScale.x;
diff --git a/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.h b/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.h
index 43c5612c82..6e65ef7ab2 100644
--- a/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.h
+++ b/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.h
@@ -15,6 +15,7 @@
 #include <controllers/InputDevice.h>
 #include "InputPlugin.h"
 #include <QtGui/qtouchdevice.h>
+#include "VirtualPadManager.h"
 
 class QTouchEvent;
 class QGestureEvent;
@@ -78,6 +79,7 @@ protected:
     bool _fixedPosition;
     glm::vec2 _fixedCenterPosition;
     qreal _fixedRadius;
+    int _extraBottomMargin {0};
 
     void touchLeftBegin(glm::vec2 touchPoint);
     void touchLeftUpdate(glm::vec2 touchPoint);
@@ -86,6 +88,7 @@ protected:
     void touchRightBegin(glm::vec2 touchPoint);
     void touchRightUpdate(glm::vec2 touchPoint);
     void touchRightEnd();
+    void setupFixedCenter(VirtualPad::Manager& virtualPadManager, bool force = false);
 // just for debug
 private:
     void debugPoints(const QTouchEvent* event, QString who);
diff --git a/libraries/ui/src/VirtualPadManager.cpp b/libraries/ui/src/VirtualPadManager.cpp
index 441c491168..486a6c2c71 100644
--- a/libraries/ui/src/VirtualPadManager.cpp
+++ b/libraries/ui/src/VirtualPadManager.cpp
@@ -59,6 +59,14 @@ namespace VirtualPad {
         return _hidden;
     }
 
+    int Manager::extraBottomMargin() {
+        return _extraBottomMargin;
+    }
+
+    void Manager::setExtraBottomMargin(int margin) {
+        _extraBottomMargin = margin;
+    }
+
     Instance* Manager::getLeftVirtualPad() {
         return &_leftVPadInstance;
     }
diff --git a/libraries/ui/src/VirtualPadManager.h b/libraries/ui/src/VirtualPadManager.h
index 48a78ca09b..3563d333f8 100644
--- a/libraries/ui/src/VirtualPadManager.h
+++ b/libraries/ui/src/VirtualPadManager.h
@@ -42,10 +42,13 @@ namespace VirtualPad {
         void enable(bool enable);
         bool isHidden();
         void hide(bool hide);
+        int extraBottomMargin();
+        void setExtraBottomMargin(int margin);
     private:
         Instance _leftVPadInstance;
         bool _enabled;
         bool _hidden;
+        int _extraBottomMargin {0};
     };
 }
 
diff --git a/scripts/system/+android/bottombar.js b/scripts/system/+android/bottombar.js
index 5f82886c8a..27ef39c914 100644
--- a/scripts/system/+android/bottombar.js
+++ b/scripts/system/+android/bottombar.js
@@ -196,6 +196,7 @@ function lowerBottomBar() {
     if (bottomHudOptionsBar) {
         bottomHudOptionsBar.show();
     }
+    Controller.setVPadExtraBottomMargin(0);
 }
 
 function raiseBottomBar() {
@@ -206,6 +207,7 @@ function raiseBottomBar() {
     if (bottomHudOptionsBar) {
         bottomHudOptionsBar.hide();
     }
+    Controller.setVPadExtraBottomMargin(255); // Height in bottombar.qml
     print('[bottombar.js] raiseBottomBar end');
 }