diff --git a/dependencies/THREE2STL.js b/dependencies/THREE2STL.js
new file mode 100755
index 0000000000000000000000000000000000000000..3bb790948b8350ce896ccc0849d1dd93a95a904f
--- /dev/null
+++ b/dependencies/THREE2STL.js
@@ -0,0 +1,86 @@
+function stlFromGeometry( geometry, options ) {
+
+	// calculate the faces and normals if they are not yet present
+	geometry.computeFaceNormals()
+
+	var addX = 0
+	var addY = 0
+	var addZ = 0
+	var download = false
+
+	if ( options ) {
+		if ( options.useObjectPosition ) {
+			addX = geometry.mesh.position.x
+			addY = geometry.mesh.position.y
+			addZ = geometry.mesh.position.z
+		}
+
+		if ( options.download ) {
+			download = true
+		}
+	}
+
+	
+	var facetToStl = function( verts, normal ) {
+		var faceStl = ''
+		faceStl += 'facet normal ' + normal.x + ' ' + normal.y + ' ' +  normal.z + '\n'
+		faceStl += 'outer loop\n'
+
+		for ( var j = 0; j < 3; j++ ) {
+			var vert = verts[j]
+			faceStl += 'vertex ' + (vert.x+addX) + ' ' + (vert.y+addY) + ' ' + (vert.z+addZ) + '\n'
+		}
+
+		faceStl += 'endloop\n'
+		faceStl += 'endfacet\n'
+	
+		return faceStl
+	}
+
+	// start bulding the STL string
+	var stl = ''
+	stl += 'solid\n'
+	
+	for ( var i = 0; i < geometry.faces.length; i++ ) {
+		var face = geometry.faces[i]
+
+		// if we have just a griangle, that's easy. just write them to the file
+		if ( face.d === undefined ) {
+			var verts = [
+				geometry.vertices[ face.a ],
+				geometry.vertices[ face.b ],
+				geometry.vertices[ face.c ]
+			]
+
+			stl += facetToStl( verts, face.normal )
+
+		} else {
+			// if it's a quad, we need to triangulate it first
+			// split the quad into two triangles: abd and bcd
+			var verts = []
+			verts[0] = [
+				geometry.vertices[ face.a ],
+				geometry.vertices[ face.b ],
+				geometry.vertices[ face.d ]
+			]
+			verts[1] = [
+				geometry.vertices[ face.b ],
+				geometry.vertices[ face.c ],
+				geometry.vertices[ face.d ]
+			]
+			
+			for ( var k = 0; k<2; k++ ) {
+				stl += facetToStl( verts[k], face.normal )
+			}
+			
+		}
+	}
+
+	stl += 'endsolid'
+
+	if ( download ) {
+		document.location = 'data:Application/octet-stream, ' + encodeURIComponent( stl )
+	}
+
+	return stl
+}
diff --git a/js/exportMenu.js b/js/exportMenu.js
new file mode 100644
index 0000000000000000000000000000000000000000..b538dbf3a3a00a3d4132605d6ebb4ce052597329
--- /dev/null
+++ b/js/exportMenu.js
@@ -0,0 +1,21 @@
+/**
+ * Created by aghassaei on 1/9/15.
+ */
+
+
+$(function(){
+
+    $("#exportSTL").click(function(e){
+        e.preventDefault();
+
+        _.each(three.scene.children, function(object){
+            if (object instanceof THREE.Mesh){
+                console.log(object.geometry);
+                stlFromGeometry(object.geometry, {download:true});
+            }
+        });
+
+
+    })
+
+});
\ No newline at end of file
diff --git a/js/threeMain.js b/js/threeMain.js
index a72319cf9b3c3e56ce2a7874601d606483afc2ef..ba18619803493545b55c2ca513abb6d27c6c5e99 100644
--- a/js/threeMain.js
+++ b/js/threeMain.js
@@ -94,6 +94,7 @@ function Three(){
     
     return {//public properties
         scene:scene,
+
 //        camera:camera,
 //        controls:controls,
 //        renderer:renderer,
diff --git a/main.html b/main.html
index 2ea746f49a8d30c36bb9e68750196b7621cc7f27..e0e236dd93aa0e49296d08385e55b224e8c19ca3 100644
--- a/main.html
+++ b/main.html
@@ -27,6 +27,9 @@
     <script src="dependencies/OrbitControls.js"></script>
     <script src="js/threeMain.js"></script>
 
+    <!--stl export-->
+    <script src="dependencies/THREE2STL.js"></script>
+
     <!--multi-threading-->
     <script src="dependencies/parallel.js"></script>
 
@@ -34,6 +37,7 @@
     <script src="dependencies/loaders/STLLoader.js"></script>
     <script src="js/importMenu.js"></script>
     <script src="js/elementMenu.js"></script>
+    <script src="js/exportMenu.js"></script>
     <link rel="stylesheet" type="text/css" href="css/main.css">
 
 </head>
@@ -60,7 +64,7 @@
           <a href="#" class="dropdown-toggle" data-toggle="dropdown">Export <b class="caret"></b></a>
           <span class="dropdown-arrow"></span>
           <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
+            <li><a id="exportSTL" href="#">Export STL</a></li>
             <li><a href="#">Another action</a></li>
             <li><a href="#">Something else here</a></li>
             <li class="divider"></li>