diff --git a/applications/gui/src/screen.cpp b/applications/gui/src/screen.cpp
index 3b2aae1aaff8d00daa6c80c3d03d8ffb47423783..c359e227d9be39ab98df2cd8e816323b6a0ecbef 100644
--- a/applications/gui/src/screen.cpp
+++ b/applications/gui/src/screen.cpp
@@ -72,6 +72,20 @@ ftl::gui::Screen::Screen(ftl::Configurable *proot, ftl::net::Universe *pnet, ftl
 	has_vr_ = vr::VR_IsHmdPresent();
 	#endif
 
+	zoom_ = root_->value("zoom", 1.0f);
+	root_->on("zoom", [this](const ftl::config::Event &e) {
+		zoom_ = root_->value("zoom", 1.0f);
+	});
+
+	pos_x_ = root_->value("position_x", 0.0f);
+	root_->on("position_x", [this](const ftl::config::Event &e) {
+		pos_x_ = root_->value("position_x", 0.0f);
+	});
+	pos_y_ = root_->value("position_y", 0.0f);
+	root_->on("position_y", [this](const ftl::config::Event &e) {
+		pos_y_ = root_->value("position_y", 0.0f);
+	});
+
 	setSize(Vector2i(1280,720));
 
 	toolbuttheme = new Theme(*theme());
@@ -354,11 +368,27 @@ void ftl::gui::Screen::setActiveCamera(ftl::gui::Camera *cam) {
 	}
 }
 
+bool ftl::gui::Screen::scrollEvent(const Eigen::Vector2i &p, const Eigen::Vector2f &rel) {
+	if (nanogui::Screen::scrollEvent(p, rel)) {
+		return true;
+	} else {
+		zoom_ += zoom_ * 0.1f * rel[1];
+		return true;
+	}
+}
+
 bool ftl::gui::Screen::mouseMotionEvent(const Eigen::Vector2i &p, const Eigen::Vector2i &rel, int button, int modifiers) {
 	if (nanogui::Screen::mouseMotionEvent(p, rel, button, modifiers)) {
 		return true;
 	} else {
-		if (camera_) camera_->mouseMovement(rel[0], rel[1], button);
+		if (camera_) {
+			if (button == 1) {
+				camera_->mouseMovement(rel[0], rel[1], button);
+			} else if (button == 2) {
+				pos_x_ += rel[0];
+				pos_y_ += -rel[1];
+			}
+		}
 	}
 	return true; // TODO: return statement was missing; is true correct?
 }
@@ -367,7 +397,10 @@ bool ftl::gui::Screen::mouseButtonEvent(const nanogui::Vector2i &p, int button,
 	if (nanogui::Screen::mouseButtonEvent(p, button, down, modifiers)) {
 		return true;
 	} else {
-		if (camera_ && down) {
+		if (!camera_) return false;
+		
+		//ol movable = camera_->source()->hasCapabilities(ftl::rgbd::kCapMovable);
+		if (button == 0 && down) {
 			Eigen::Vector2f screenSize = size().cast<float>();
 			auto mScale = (screenSize.cwiseQuotient(imageSize).minCoeff());
 			Eigen::Vector2f scaleFactor = mScale * imageSize.cwiseQuotient(screenSize);
@@ -391,8 +424,10 @@ bool ftl::gui::Screen::mouseButtonEvent(const nanogui::Vector2i &p, int button,
 			//lookPoint_ = Eigen::Vector3f(worldPos[0],worldPos[1],worldPos[2]);
 			//LOG(INFO) << "Depth at click = " << -camPos[2];
 			return true;
+		} else {
+			
 		}
-	return false;
+		return false;
 	}
 }
 
@@ -446,9 +481,9 @@ void ftl::gui::Screen::draw(NVGcontext *ctx) {
 		#endif
 
 		if (mImageID < std::numeric_limits<unsigned int>::max() && imageSize[0] > 0) {
-			auto mScale = (screenSize.cwiseQuotient(imageSize).minCoeff());
+			auto mScale = (screenSize.cwiseQuotient(imageSize).minCoeff()) * zoom_;
 			Vector2f scaleFactor = mScale * imageSize.cwiseQuotient(screenSize);
-			Vector2f positionInScreen(0.0f, 0.0f);
+			Vector2f positionInScreen(pos_x_, pos_y_);
 			auto mOffset = (screenSize - (screenSize.cwiseProduct(scaleFactor))) / 2;
 			Vector2f positionAfterOffset = positionInScreen + mOffset;
 			Vector2f imagePosition = positionAfterOffset.cwiseQuotient(screenSize);
diff --git a/applications/gui/src/screen.hpp b/applications/gui/src/screen.hpp
index a0ac39d064875bdc5be81e526a95ac9269617c25..a195f4ccdd45500c534039709ba6762fdd640b22 100644
--- a/applications/gui/src/screen.hpp
+++ b/applications/gui/src/screen.hpp
@@ -29,6 +29,7 @@ class Screen : public nanogui::Screen {
 	~Screen();
 
 	bool mouseMotionEvent(const Eigen::Vector2i &p, const Eigen::Vector2i &rel, int button, int modifiers);
+	bool scrollEvent(const Eigen::Vector2i &p, const Eigen::Vector2f &rel);
 	bool mouseButtonEvent(const nanogui::Vector2i &p, int button, bool down, int modifiers);
 	bool keyboardEvent(int key, int scancode, int action, int modifiers);
 
@@ -92,6 +93,9 @@ class Screen : public nanogui::Screen {
 	ftl::Configurable *root_;
 	std::string status_;
 	ftl::gui::Camera *camera_;
+	float zoom_;
+	float pos_x_;
+	float pos_y_;
 
 	GLuint leftEye_;
 	GLuint rightEye_;