diff --git a/js/elementMenu.js b/js/elementMenu.js
index 571878e9fe572f7fb0800f5f1f4d68bd26ead93f..2c1c12f9e0b345c6aacfb16a25d9efc5ea06cc58 100644
--- a/js/elementMenu.js
+++ b/js/elementMenu.js
@@ -2,7 +2,7 @@
  * Created by aghassaei on 1/8/15.
  */
 
-var Parallel = Parallel || {};
+Parallel = Parallel || {};
 
 $(function(){
 
@@ -16,42 +16,65 @@ $(function(){
         var boundingBox = new THREE.Box3();
         boundingBox.setFromObject(modelMesh);
 
-//        var xRange = [];
-//        for (var x=boundingBox.min.x;x<boundingBox.max.x;x+=cubeDim){
-//           xRange.push(x);
-//        }
-//
-//        var threads = new Parallel(xRange, {env:{boundingBox:boundingBox, three:three, cubeDim:cubeDim, modelMesh:modelMesh}}).require(
-//            {fn:THREE.Vector3,name:'Vector3'}, {fn:THREE.Raycaster,name:'Raycaster'}, {fn:THREE.Ray,name:'Ray'},
-//            createCubeGeometry, {fn:THREE.BoxGeometry,name:'BoxGeometry'}, {fn:THREE.MeshLambertMaterial,name:'MeshLambertMaterial'},
-//            {fn:THREE.Geometry,name:'Geometry'}
-//        );
-//        threads.map(fillWithElements).then(three.render);
-//
-//        function fillWithElements(x){
-//            var cubeDim = global.env.cubeDim;
-
+        var xRange = [];
         for (var x=boundingBox.min.x;x<boundingBox.max.x;x+=cubeDim){
+           xRange.push(x);
+        }
+
+        workers.options.env = {boundingBox:boundingBox,
+        three:three,
+        cubeDim:cubeDim,
+        modelMesh:modelMesh};
+        workers.data = xRange;
+
+        workers.map(fillWithElements).then(addToScene);//.reduce(merge).
+
+        function merge(meshes){
+            var allMeshes = meshes[1];
+            for (var i=2;i<meshes.length;i++){
+                allMeshes.concat(meshes[i]);
+            }
+            return allMeshes;
+        }
+
+        function addToScene(arguments){
+//            console.log("amanda");
+//            console.log(arguments.length);
+//            _.each(arguments, function(mesh){
+//                three.scene.add(mesh);
+//            });
+            three.render();
+        }
+
+        function fillWithElements(x){
+            console.log("here");
+            var meshesToAdd = [];
+            var cubeDim = global.env.cubeDim;
+            var boundingBox = global.env.boundingBox;
+            var clone = new THREE.Mesh(global.env.modelMesh.geometry, global.env.modelMesh.material);//this sucks, but modelMesh is missing properties for now
             for (var y=boundingBox.min.y;y<boundingBox.max.y;y+=cubeDim){
 //                if ()
                 for (var z=boundingBox.min.z;z<boundingBox.max.z;z+=cubeDim){
                     var raycaster = new THREE.Raycaster(new THREE.Vector3(x+cubeDim/2, y+cubeDim/2, z+cubeDim/2),
                         new THREE.Vector3(0, 0, 1), 0, boundingBox.max.z-z+cubeDim/2);
-                    var numIntersections = raycaster.intersectObject(modelMesh).length;
+                    var numIntersections = raycaster.intersectObject(clone).length;
                     if (numIntersections % 2 == 1) {
                         var mesh = createCubeGeometry(cubeDim);
                         mesh.position.set(x+cubeDim/2, y+cubeDim/2, z+cubeDim/2);
                         mesh.updateMatrix();
                         mesh.matrixAutoUpdate = false;
-                        three.scene.add(mesh);
+                        meshesToAdd.push(mesh);
+                        global.env.three.scene.add(mesh);
                     } else if (numIntersections == 0){
                     }
                 }
             }
+            return meshesToAdd;
         }
     });
 
     function createCubeGeometry(size){
+        console.log(cubeGeo);
         var geometry = new THREE.BoxGeometry(size, size, size);
         var material = new THREE.MeshLambertMaterial( { color:0xffffff} );
         return new THREE.Mesh( geometry, material );
diff --git a/js/main.js b/js/main.js
index f01950f830629fb7f363bcbbe96521c88608be29..d71f8169866f6033265d707445a0b35378d938a8 100644
--- a/js/main.js
+++ b/js/main.js
@@ -2,12 +2,11 @@
  * Created by aghassaei on 1/7/15.
  */
 
-var Parallel = Parallel || {};
-
 
 $(function(){
 
     three = Three();
     setupNavBar();
+    workers = makeWorkers();
 
 });
diff --git a/js/workers.js b/js/persistantWorkers.js
similarity index 75%
rename from js/workers.js
rename to js/persistantWorkers.js
index b3cbded3267724e92ebf82251d6bc922131fb222..046acac5b4b41ce69f0686dd8b0910a80495d008 100644
--- a/js/workers.js
+++ b/js/persistantWorkers.js
@@ -1,8 +1,13 @@
 //global workers so they do not have to be reinstantiated
 
+
+function browserSupportsWebWorkers() {
+  return typeof window.Worker === "function";
+}
+
 function makeWorkers(){
 
-    function makeURL(myWorkerFunction) {
+    function makeBlobURL(myWorkerFunction) {
         var URL = window.URL || window.webkitURL;
         var blob = new Blob([myWorkerFunction.toString()], { type: "text/javascript" });
         return URL.createObjectURL(blob);
@@ -23,5 +28,5 @@ function makeWorkers(){
             };
 //        }
     }
-    return new Parallel(null, {env:null, evalPath: "dependencies/eval.js"}).require('three.js');
+//    return new Parallel(null, {env:null, evalPath: "dependencies/eval.js"}).require('three.js');
 }
\ No newline at end of file
diff --git a/js/worker.js b/js/worker.js
new file mode 100644
index 0000000000000000000000000000000000000000..211e20ce47c887d9cff829fbfcf6d1360167f367
--- /dev/null
+++ b/js/worker.js
@@ -0,0 +1,21 @@
+/**
+ * Created by aghassaei on 1/12/15.
+ */
+
+
+self.onmessage = function(e) {
+  var data = e.data;
+
+  if (data.url) {
+    var url = data.url.href;
+    var index = url.indexOf('main.html');//url of landing page
+    if (index != -1) {
+      url = url.substring(0, index);
+    }
+    //load all scripts
+    importScripts(url + 'dependencies/three.js');
+//    importScripts(url + 'js/element.js');
+  }
+
+
+};
\ No newline at end of file
diff --git a/main.html b/main.html
index ef4d14b71dff62d91d6e2a32d06dc317f5ecdb93..7f4a69a47a582137c775f9910ad8b763ed10b944 100644
--- a/main.html
+++ b/main.html
@@ -35,6 +35,7 @@
 
     <!--multi-threading-->
     <script src="dependencies/parallel.js"></script>
+    <script src="js/persistantWorkers.js"></script><!--global workers-->
 
     <script src="js/main.js"></script>
     <script src="dependencies/loaders/STLLoader.js"></script>
@@ -57,7 +58,7 @@
       <ul class="nav navbar-nav navbar-left">
         <li><a data-menu-id="importGeometry" class="menuHoverControls" href="#">Import</a></li>
         <li><a data-menu-id="element" class="menuHoverControls" href="#">Element</a></li>
-        <li><a data-menu-id="about" class="menuHoverControls" href="#">About</a></li>
+
         <!--<li><a data-menu-id="controls1Menu" class="menuHoverControls" href="#">Controls1</a></li>-->
         <!--<li><a data-menu-id="controls2Menu" class="menuHoverControls" href="#">Controls2</a></li>-->
         <!--<li><a data-menu-id="controls3Menu" class="menuHoverControls" href="#">Glyphs</a></li>-->
@@ -74,6 +75,7 @@
             <li><a href="#">Separated link</a></li>
           </ul>
         </li>
+        <li><a data-menu-id="about" class="menuHoverControls" href="#">About</a></li>
        </ul>
         <ul class="nav navbar-nav navbar-right">
             <li><a id="clearAll" class="menuHoverControls" href="#">Clear All</a></li>