diff --git a/index.html b/index.html
index 38d864b6800244266e390d3e4ab06af82f92dfba..07526accf74bd6fb7df5f387cb9b7f27b5923307 100644
--- a/index.html
+++ b/index.html
@@ -21,46 +21,60 @@
   <div id="wrapper">
     <div id="sidebar">
       <form>
-        <div class="row">
-          <div class="col-8">
-            <div class="form-group">
-              <label>host</label>
-              <input type="text" class="form-control" id="host" />
-            </div>
+        <div class="form-row">
+
+          <div class="form-group col-8">
+            <label>host</label>
+            <input type="text" class="form-control" id="host" />
           </div>
-          <div class="col-4">
-            <div class="form-group">
-              <label>port</label>
-              <input type="text" class="form-control" id="port" />
-            </div>
+
+          <div class="form-group col-4">
+            <label>port</label>
+            <input type="text" class="form-control" id="port" />
           </div>
-        </div>
-        <div class="form-group">
-          <label>endpoint</label>
-          <input type="text" class="form-control" id="endpoint" />
-        </div>
 
-        <div class="form-group">
-          <label>layers</label>
-          <select class="form-control" id="layersList" size="10"></select>
-          <button id="getLayers" class="btn btn-primary btn-block" type="button">Get Layers</button>
-        </div>
+          <div class="form-group col-12">
+            <label>endpoint</label>
+            <input type="text" class="form-control" id="endpoint" />
+          </div>
+
+          <div class="form-group col-12">
+            <label>layers</label>
+            <select class="form-control" id="layersList" size="10"></select>
+          </div>
+
+          <div class="form-group col-12">
+            <button id="getLayers" class="btn btn-primary btn-block" type="button">Get Layers</button>
+          </div>
+
+          <div class="form-group col-12">
+            <label>bounding box</label>
+            <input id="boundingBoxInput" type="text" class="form-control" />
+          </div>
+
+          <div class="form-group col-6">
+            <button id="setBoundingBox" class="btn btn-primary btn-block" type="button">Set</button>
+          </div>
+          
+          <div class="form-group col-6">
+            <button id="clearBoundingBox" class="btn btn-primary btn-block" type="button">Clear</button>
+          </div>
+
+          <div class="form-group col-12">
+            <label for="stylesList">style</label>
+            <select class="form-control" id="stylesList">
+              <option>Default</option>
+              <option>Node Level</option>
+            </select>
+          </div>
+
+          <div class="form-group col-12">
+            <div class="form-check">
+              <input type="checkbox" class="form-check-input" id="toggleFreezeScene" disabled>
+              <label class="form-check-label" for="toggleFreezeScene">Freeze Scene</label>
+            </div>
+          </div>
 
-        <div class="form-group">
-          <label>bounding box</label>
-          <input id="boundingBoxInput" type="text" class="form-control mb-2" />
-          <button id="setBoundingBox" class="btn btn-primary btn-block" type="button">Set</button>
-        </div>
-        <div class="form-group">
-          <label for="stylesList">style</label>
-          <select class="form-control" id="stylesList">
-            <option>Default</option>
-            <option>Node Level</option>
-          </select>
-        </div>
-        <div class="form-check">
-          <input type="checkbox" class="form-check-input" id="toggleFreezeScene" disabled>
-          <label class="form-check-label" for="toggleFreezeScene">Freeze Scene</label>
         </div>
       </form>
     </div>
diff --git a/lib/helpers/BoundingBox.js b/lib/helpers/BoundingBox.js
index 7a8b578869579a18ccd3f1b39267eb851e9f98cd..5fcf2695445313263d2c87c439acdd751c568886 100644
--- a/lib/helpers/BoundingBox.js
+++ b/lib/helpers/BoundingBox.js
@@ -10,6 +10,7 @@ define([
       this.mouseClicks = 0;
       this.lons = [];
       this.lats = [];
+      this.defined = false;
       this.bindedClickHandler = this.clickHandler.bind(this);
       this.bindedMoveHandler = this.moveHandler.bind(this);
       this.bindedDynaimcPropertyHandler = this.dynamicPropertyHandler.bind(this);
@@ -22,7 +23,6 @@ define([
     register: function () {
       let viewer = CesiumViewer.getViewer();
       viewer.scene.canvas.addEventListener('click', this.bindedClickHandler);
-
     },
 
     unregister: function () {
@@ -39,7 +39,7 @@ define([
       this.mouseClicks = 0;
       this.lons = [];
       this.lats = [];
-
+      this.defined = false;
       let viewer = CesiumViewer.getViewer();
       viewer.entities.removeById("bb");
       this.rectangle = new Cesium.Rectangle();
@@ -75,6 +75,7 @@ define([
         viewer.scene.canvas.removeEventListener('mousemove', this.bindedMoveHandler);
         this.lons = this.lons.sort(function (a, b) { return a - b; });
         this.lats = this.lats.sort(function (a, b) { return a - b; });
+        this.defined = true;
         topic.publish("BoundingBoxCreated", "BoundingBoxDefined");
       }
 
@@ -99,8 +100,12 @@ define([
       return Cesium.Rectangle.clone(this.rectangle, result);
     },
 
+    isDefined: function () {
+      return this.defined;
+    },
+
     toString: function () {
-      return this.lons[0] + "," + this.lats[0] + "," + this.lons[1] + "," + this.lats[1];
+      return `${this.lons[0]},${this.lats[0]},${this.lons[1]},${this.lats[1]}`;
     }
 
   });
diff --git a/lib/helpers/RequestWrapper.js b/lib/helpers/RequestWrapper.js
index 3537b0a4d8bf724ee84c599fb86d520c2bd6d0fd..426c1a319c0c1618be95ab768573a7166bfd66e6 100644
--- a/lib/helpers/RequestWrapper.js
+++ b/lib/helpers/RequestWrapper.js
@@ -22,13 +22,13 @@ define([
         .param("service", "3DPS")
         .param("acceptversions", "1.0")
         .param("request", "GetScene")
-        .param("boundingbox", req.boundingBox)
+        .param("layers", req.layer)
         .param("cullingvolume", clientParams.cullingVolume2Url())
         .param("camera", clientParams.camera2Url())
         .param("frustum", clientParams.frustum2Url())
         .param("drawingbuffer", clientParams.drawingBuffer2Url())
         .param("time", Date.now())
-        .param("intersect", true)
+        .optional("boundingbox", req.boundingBox)
         .build();
 
       StatusBar.beginProcess("Waiting for response");
diff --git a/lib/helpers/UrlBuilder.js b/lib/helpers/UrlBuilder.js
index 307d89f13347e84d5c2df273f0dd802346ce5130..d4224cd86e047d18ed59c767ae6c1982e25322a4 100644
--- a/lib/helpers/UrlBuilder.js
+++ b/lib/helpers/UrlBuilder.js
@@ -26,8 +26,15 @@ define([
         return this;
       };
 
+      this.optional = function (name, value) {
+        if (value) {
+          this._params.push(`${name}=${value}&`);
+        }
+        return this;
+      }
+
       this.build = function () {
-        let result =  `${this._protocol}://${this._host}`;
+        let result = `${this._protocol}://${this._host}`;
         if (this._port) { result += `:${this._port}`; }
         if (this._path) { result += `/${this._path}`; }
         if (this._params) {
diff --git a/lib/main.js b/lib/main.js
index bab37ded1e5be3bf3a98bda99081f2796cd67cb9..f920aa26ce476333beb5e1a65fbc938f90244133 100644
--- a/lib/main.js
+++ b/lib/main.js
@@ -83,6 +83,10 @@ require([
     state.setBoundingBox();
   });
 
+  $("#clearBoundingBox").click(function (event) {
+    state.clearBoundingBox();
+  });
+
   $("#toggleFreezeScene").change(function () {
     state.toggleFreezeScene();
   });
diff --git a/lib/state/BoundingBoxDefined.js b/lib/state/BoundingBoxDefined.js
index 44290d9a8f6798fbca4358f62ba507bd2311a33b..fc604cdd6f0cbe5bde3ad37f5cd382bf0897b5ec 100644
--- a/lib/state/BoundingBoxDefined.js
+++ b/lib/state/BoundingBoxDefined.js
@@ -1,8 +1,7 @@
 define([
   "dojo/_base/declare",
-  "helpers/NodeCache",
-  "helpers/RequestWrapper"
-], function (declare, NodeCache, RequestWrapper) {
+  "helpers/NodeCache"
+], function (declare, NodeCache) {
 
   return declare(null, {
 
@@ -10,8 +9,11 @@ define([
 
     init(target, bb) {
       bb.unregister();
+      NodeCache.clearAll();
       $("#boundingBoxInput").val(bb.toString());
+      $('#toggleFreezeScene').prop('checked', false);
       $("#toggleFreezeScene").prop("disabled", false);
+      target.operations.setBoundingBox(bb.toString());
       target.makeRequest();
     },
 
@@ -21,14 +23,12 @@ define([
       target.changeState("BoundingBoxDefining");
     },
 
+    clearingBoundingBox: function (target, bb) {
+      // no-op
+    },
+
     makingRequest: function (target) {
-      let requestWrapper = new RequestWrapper();
-      requestWrapper.request({
-        host: $("#host").val(),
-        port: $("#port").val(),
-        endpoint: $("#endpoint").val(),
-        boundingBox: $("#boundingBoxInput").val()
-      });
+      target.operations.invokeRequest();
       target.changeState("WaitingForPortrayal");
     },
 
@@ -38,7 +38,7 @@ define([
 
     selectingLayer: function (target, layer) {
       target.operations.selectLayer(layer);
-      target.changeState("BoundingBoxUndefined");
+      target.changeState("LayerSelected");
     },
 
     gettingLayers: function (target) {
diff --git a/lib/state/BoundingBoxDefining.js b/lib/state/BoundingBoxDefining.js
index 906b83d5dafef9adb99db9b3b1af66f118e1493a..6645a864fe6a39494277bd63b0df5f182fd55176 100644
--- a/lib/state/BoundingBoxDefining.js
+++ b/lib/state/BoundingBoxDefining.js
@@ -19,6 +19,10 @@ define([
       bb.clear();
     },
 
+    clearingBoundingBox: function (target, bb) {
+      // no-op
+    },
+
     makingRequest: function (target) {
       // no-op
     },
diff --git a/lib/state/BoundingBoxUndefined.js b/lib/state/BoundingBoxUndefined.js
index 1ce987d3cee23006da0b69539ef8c2d5689faff4..0078b339881a8a3df92dcb74087d482bbf1d0bbd 100644
--- a/lib/state/BoundingBoxUndefined.js
+++ b/lib/state/BoundingBoxUndefined.js
@@ -13,6 +13,7 @@ define([
       bb.clear();
       NodeCache.clearAll();
       $("#boundingBoxInput").val("");
+      $('#toggleFreezeScene').prop('checked', false);
       $('#toggleFreezeScene').prop('disabled', true);
     },
 
@@ -20,6 +21,10 @@ define([
       target.changeState("BoundingBoxDefining");
     },
 
+    clearingBoundingBox: function (target, bb) {
+      // no-op
+    },
+
     makingRequest: function (target) {
       // no-op
     },
@@ -30,6 +35,8 @@ define([
 
     selectingLayer: function (target, layer) {
       target.operations.selectLayer(layer);
+      target.operations.invokeRequest({ layer: layer });
+      target.changeState("WaitingForPortrayal");
     },
 
     gettingLayers: function (target) {
diff --git a/lib/state/FreezeScene.js b/lib/state/FreezeScene.js
index f0ae118e3514d9e5e29269fa438965534fa4fbb8..0933936ff06d11f96313347d08867faf49fad57b 100644
--- a/lib/state/FreezeScene.js
+++ b/lib/state/FreezeScene.js
@@ -15,10 +15,14 @@ define([
 
     settingBoundingBox: function (target, bb) {
       bb.clear();
-      NodeCache.clearAll();
+      // NodeCache.clearAll();  
       target.changeState("BoundingBoxDefining");
     },
 
+    clearingBoundingBox: function (target, bb) {
+      // no-op
+    },
+
     makingRequest: function (target) {
       // no-op
     },
@@ -28,8 +32,9 @@ define([
     },
 
     selectingLayer: function (target, layer) {
+      target.operations.clear();
       target.operations.selectLayer(layer);
-      target.changeState("BoundingBoxUndefined");
+      target.changeState("LayerSelected");
     },
 
     gettingLayers: function (target) {
diff --git a/lib/state/LayerSelected.js b/lib/state/LayerSelected.js
new file mode 100644
index 0000000000000000000000000000000000000000..43ea0400eb70b40c26f8e7a9a8fedaef963d0372
--- /dev/null
+++ b/lib/state/LayerSelected.js
@@ -0,0 +1,49 @@
+define([
+  "dojo/_base/declare",
+  "helpers/NodeCache"
+], function (declare, NodeCache) {
+
+  return declare(null, {
+
+    constructor: function () {
+
+    },
+
+    init(target, bb) {
+      bb.clear();
+      NodeCache.clearAll();
+      $("#boundingBoxInput").val("");
+      $('#toggleFreezeScene').prop('checked', false);
+      $('#toggleFreezeScene').prop('disabled', true);
+    },
+
+    settingBoundingBox: function (target, bb) {
+      // no-op
+    },
+
+    clearingBoundingBox: function (target, bb) {
+      // no-op
+    },
+
+    makingRequest: function (target) {
+      target.operations.invokeRequest();
+      target.changeState("WaitingForPortrayal");
+    },
+
+    toggleFreezingScene: function (target) {
+      // no-op
+    },
+
+    selectingLayer: function (target, layer) {
+      console.log("hihoho");
+      target.operations.selectLayer(layer);
+    },
+
+    gettingLayers: function (target) {
+      target.operations.getLayers();
+      target.changeState("NoLayerSelected");
+    }
+
+  });
+
+});
\ No newline at end of file
diff --git a/lib/state/NoLayerSelected.js b/lib/state/NoLayerSelected.js
index 1e6b996fb1e7bbdb3cc7f315ae8c08846ec9957d..fa2945b9df9f8875339d20ca29566bf581f38367 100644
--- a/lib/state/NoLayerSelected.js
+++ b/lib/state/NoLayerSelected.js
@@ -12,7 +12,9 @@ define([
     init(target, bb) {
       bb.clear();
       NodeCache.clearAll();
+      target.operations.clear();
       $("#boundingBoxInput").val("");
+      $('#toggleFreezeScene').prop('checked', false);
       $('#toggleFreezeScene').prop('disabled', true);
     },
 
@@ -20,6 +22,10 @@ define([
       // no-op
     },
 
+    clearingBoundingBox: function (target, bb) {
+      // no-op
+    },
+
     makingRequest: function (target) {
       // no-op
     },
@@ -29,8 +35,9 @@ define([
     },
 
     selectingLayer: function (target, layer) {
+      target.operations.clear();
       target.operations.selectLayer(layer);
-      target.changeState("BoundingBoxUndefined");
+      target.changeState("LayerSelected");
     },
 
     gettingLayers: function (target) {
diff --git a/lib/state/Operations.js b/lib/state/Operations.js
index 46181fecc7883bd16250e6eae7b92e87c77746c9..2959cb36e876ee4375e345d0d6734733dcd0139f 100644
--- a/lib/state/Operations.js
+++ b/lib/state/Operations.js
@@ -3,13 +3,16 @@ define([
   "dojo/request",
   "helpers/UrlBuilder",
   "CesiumAdaptor/CesiumViewer",
-  "helpers/Layers"
-], function (declare, request, UrlBuilder, CesiumViewer, Layers) {
+  "helpers/Layers",
+  "helpers/RequestWrapper"
+], function (declare, request, UrlBuilder, CesiumViewer, Layers, RequestWrapper) {
 
   return declare(null, {
 
     constructor: function () {
       this._layers = null;
+      this._active_layer = null;
+      this._bb = null;
 
     },
 
@@ -42,13 +45,45 @@ define([
     },
 
     selectLayer: function (layer) {
-      // let selection = listElement.value;
+      this._active_layer = layer;
       let layerCenter = this._layers.getLayerCenter(layer);
       let viewer = CesiumViewer.getViewer();
       let center = Cesium.Cartesian3.fromDegrees(layerCenter.lon, layerCenter.lat, 20000.0);
       viewer.camera.setView({
-        destination: center
+        destination: center,
+        orientation: {
+          heading: 0.0,
+          pitch: Cesium.Math.toRadians(-90),
+          roll: 0.0
+        }
       });
+    },
+
+    setBoundingBox: function (bb) {
+      this._bb = bb;
+    },
+
+    invokeRequest: function () {
+      let requestWrapper = new RequestWrapper();
+      let req = {
+        host: $("#host").val(),
+        port: $("#port").val(),
+        endpoint: $("#endpoint").val(),
+        layer: this._active_layer
+      };
+      if (this._bb) {
+        req.boundingBox = this._bb;
+      }
+      requestWrapper.request(req);
+    },
+
+    clear: function () {
+      this._active_layer = null;
+      this._bb = null;
+    },
+
+    clearBoundingBox: function () {
+      this._bb = null;
     }
 
   });
diff --git a/lib/state/SceneRendered.js b/lib/state/SceneRendered.js
index b4fe9519c867584bed6987bf6a6b36b8c9a502d9..ed44a3c8d55b2e3f24736c5817ea5b7920add69d 100644
--- a/lib/state/SceneRendered.js
+++ b/lib/state/SceneRendered.js
@@ -14,18 +14,22 @@ define([
 
     settingBoundingBox: function (target, bb) {
       bb.clear();
-      NodeCache.clearAll();
       target.changeState("BoundingBoxDefining");
     },
 
+    clearingBoundingBox: function (target, bb) {
+      if (bb.isDefined()) {
+        bb.clear();
+        NodeCache.clearAll();
+        target.operations.clearBoundingBox();
+        $("#boundingBoxInput").val("");
+        target.makeRequest();
+      }
+
+    },
+
     makingRequest: function (target) {
-      let requestWrapper = new RequestWrapper();
-      requestWrapper.request({
-        host: $("#host").val(),
-        port: $("#port").val(),
-        endpoint: $("#endpoint").val(),
-        boundingBox: $("#boundingBoxInput").val()
-      });
+      target.operations.invokeRequest();
       target.changeState("WaitingForPortrayal");
     },
 
@@ -34,8 +38,9 @@ define([
     },
 
     selectingLayer: function (target, layer) {
+      target.operations.clear();
       target.operations.selectLayer(layer);
-      target.changeState("BoundingBoxUndefined");
+      target.changeState("LayerSelected");
     },
 
     gettingLayers: function (target) {
diff --git a/lib/state/State.js b/lib/state/State.js
index 81b4ae0b77715fcd78f895369e26303ac92c1404..f38218d0882506d8a5d91c0b68a0fec7789aa86b 100644
--- a/lib/state/State.js
+++ b/lib/state/State.js
@@ -20,6 +20,10 @@ define([
       this._current.settingBoundingBox(this, this._boundingBox);
     },
 
+    clearBoundingBox: function () {
+      this._current.clearingBoundingBox(this, this._boundingBox);
+    },
+
     makeRequest: function () {
       this._current.makingRequest(this);
     },
diff --git a/lib/state/StateFactory.js b/lib/state/StateFactory.js
index 672b76ad718ceaa1e3bf4803b04aee8000d93256..bc74637a2a59e27d44a23ed60154af9792d17b79 100644
--- a/lib/state/StateFactory.js
+++ b/lib/state/StateFactory.js
@@ -1,13 +1,14 @@
 define([
   "dojo/_base/declare",
   "state/NoLayerSelected",
+  "state/LayerSelected",
   "state/BoundingBoxUndefined",
   "state/BoundingBoxDefining",
   "state/BoundingBoxDefined",
   "state/WaitingForPortrayal",
   "state/FreezeScene",
   "state/SceneRendered"
-], function (declare, NoLayerSelected, BoundingBoxUndefined, BoundingBoxDefining, BoundingBoxDefined, WaitingForPortrayal, FreezeScene, SceneRendered) {
+], function (declare, NoLayerSelected, LayerSelected, BoundingBoxUndefined, BoundingBoxDefining, BoundingBoxDefined, WaitingForPortrayal, FreezeScene, SceneRendered) {
 
   return declare(null, {
 
@@ -19,6 +20,8 @@ define([
       switch (stateName) {
         case "NoLayerSelected":
           return new NoLayerSelected();
+        case "LayerSelected":
+          return new LayerSelected();
         case "BoundingBoxUndefined":
           return new BoundingBoxUndefined();
         case "BoundingBoxDefining":
diff --git a/lib/state/WaitingForPortrayal.js b/lib/state/WaitingForPortrayal.js
index ac1dceb3560557492eb8fc32f5c40404e36a8dc1..3068fe1aed501dbd847092498d35aadece622cc6 100644
--- a/lib/state/WaitingForPortrayal.js
+++ b/lib/state/WaitingForPortrayal.js
@@ -1,7 +1,6 @@
 define([
-  "dojo/_base/declare",
-  "helpers/RequestWrapper"
-], function (declare, RequestWrapper) {
+  "dojo/_base/declare"
+], function (declare) {
 
   return declare(null, {
 
@@ -15,14 +14,12 @@ define([
       // no-op
     },
 
+    clearingBoundingBox: function (target, bb) {
+      // no-op
+    },
+
     makingRequest: function (target) {
-      requestWrapper = new RequestWrapper();
-      requestWrapper.request({
-        host: $("#host").val(),
-        port: $("#port").val(),
-        endpoint: $("#endpoint").val(),
-        boundingBox: $("#boundingBoxInput").val()
-      });
+      target.operations.invokeRequest();
     },
 
     toggleFreezingScene: function (target) {