diff --git a/io_scene_x3d/__init__.py b/io_scene_x3d/__init__.py
index 67d35ce9c0db7dc0cf1b644b78f0b1e306cfadc9..987895adce4d324b15f7cb578342ddde5210e327 100644
--- a/io_scene_x3d/__init__.py
+++ b/io_scene_x3d/__init__.py
@@ -63,6 +63,7 @@ class ExportX3D(bpy.types.Operator, ExportHelper):
     filename_ext = ".x3d"
     filter_glob = StringProperty(default="*.x3d", options={'HIDDEN'})
 
+    use_selection = BoolProperty(name="Selection Only", description="Export selected objects only", default=False)
     use_apply_modifiers = BoolProperty(name="Apply Modifiers", description="Use transformed mesh data from each object", default=True)
     use_triangulate = BoolProperty(name="Triangulate", description="Triangulate quads.", default=False)
     use_compress = BoolProperty(name="Compress", description="GZip the resulting file, requires a full python install", default=False)
diff --git a/io_scene_x3d/export_x3d.py b/io_scene_x3d/export_x3d.py
index 03b5ec2623ac087b76480d54ae4b87762550dce7..5b4c88052ab8b9db036feae518fe8a79d229114b 100644
--- a/io_scene_x3d/export_x3d.py
+++ b/io_scene_x3d/export_x3d.py
@@ -680,7 +680,8 @@ class x3d_class:
 ##########################################################
 
     def export(self, scene, world, alltextures,
-                EXPORT_APPLY_MODIFIERS=False,
+                use_apply_modifiers=False,
+                use_selection=True,
                 EXPORT_TRI=False,
                 ):
 
@@ -697,7 +698,12 @@ class x3d_class:
         self.writeFog(world)
         self.proto = 0
 
-        for ob_main in [o for o in scene.objects if o.is_visible(scene)]:
+        if use_selection:
+            objects = (o for o in scene.objects if o.is_visible(scene) and o.select)
+        else:
+            objects = (o for o in scene.objects if o.is_visible(scene))
+
+        for ob_main in objects:
 
             free, derived = create_derived_objects(scene, ob_main)
 
@@ -712,16 +718,20 @@ class x3d_class:
                 if objType == 'CAMERA':
                     self.writeViewpoint(ob, ob_mat, scene)
                 elif objType in ('MESH', 'CURVE', 'SURF', 'FONT'):
-                    if EXPORT_APPLY_MODIFIERS or objType != 'MESH':
-                        me = ob.create_mesh(scene, EXPORT_APPLY_MODIFIERS, 'PREVIEW')
+                    if use_apply_modifiers or objType != 'MESH':
+                        try:
+                            me = ob.create_mesh(scene, use_apply_modifiers, 'PREVIEW')
+                        except:
+                            me = None
                     else:
                         me = ob.data
 
-                    self.writeIndexedFaceSet(ob, me, ob_mat, world, EXPORT_TRI=EXPORT_TRI)
+                    if me is not None:
+                        self.writeIndexedFaceSet(ob, me, ob_mat, world, EXPORT_TRI=EXPORT_TRI)
 
-                    # free mesh created with create_mesh()
-                    if me != ob.data:
-                        bpy.data.meshes.remove(me)
+                        # free mesh created with create_mesh()
+                        if me != ob.data:
+                            bpy.data.meshes.remove(me)
 
                 elif objType == 'LAMP':
                     data = ob.data
@@ -743,7 +753,7 @@ class x3d_class:
 
         self.file.write("\n</Scene>\n</X3D>")
 
-        # if EXPORT_APPLY_MODIFIERS:
+        # if use_apply_modifiers:
         # 	if containerMesh:
         # 		containerMesh.vertices = None
 
@@ -827,6 +837,7 @@ class x3d_class:
 
 
 def save(operator, context, filepath="",
+          use_selection=True,
           use_apply_modifiers=False,
           use_triangulate=False,
           use_compress=False):
@@ -852,7 +863,8 @@ def save(operator, context, filepath="",
     wrlexport.export(scene,
                      world,
                      alltextures,
-                     EXPORT_APPLY_MODIFIERS=use_apply_modifiers,
+                     use_apply_modifiers=use_apply_modifiers,
+                     use_selection=use_selection,
                      EXPORT_TRI=use_triangulate,
                      )