             in_frame    : true
 
         if opts.use_cloud
-            if not @_cloud
-                @_cloud = {}
-
-            key = opts.size+opts.texture.color+opts.in_frame
-
-            if not (cloud = @_cloud[key])?
-                material = new THREE.PointCloudMaterial
-                    size            : opts.size*2
-                    sizeAttenuation : false
-                material.color.setRGB opts.texture.color...
-                cloud = @_cloud[key] = new THREE.PointCloud(
-                                            new THREE.Geometry(), material)
-                cloud.scale.copy @aspectRatio
-                @scene.add cloud
-
-            cloud.geometry.vertices.push new THREE.Vector3(opts.loc...)
-
-            if opts.in_frame
-                @updateBoundingBox cloud
-            return cloud
+            return @_addCloudPoint opts
         else
-            if not @_points?
-                @_points = []
-
-            in_frame = opts.in_frame
-            loc = opts.loc
-
-            opts.radius = opts.size/1200
-            opts._basic_material = true
-            opts.in_frame = false
-
-            delete opts.size
-            delete opts.use_cloud
-
-            point = @addSphere opts
-
-            @_points.push point
-
-            if in_frame
-                if not @_pointHelper?
-                    @_pointHelper = new THREE.Mesh()
-                    @_pointHelper.geometry.vertices.push new THREE.Vector3()
-
-                @_pointHelper.geometry.vertices[0].set loc...
-                @updateBoundingBox @_pointHelper
-            return point
+            return @_addSpherePoint opts
 
     addIndexFaceSet: (opts) ->
         opts = defaults opts,

            texture     : required
            in_frame    : true

        opts.depth = 0
        text = @addText3d opts
        if not opts.rotation?
            if @_text?
                @_text.push text
            else
                @_text = [text]
        return text

    addText3d: (opts) ->

        material.color.setRGB opts.texture.color...

        text = new THREE.Mesh geometry, material
        text.position.set opts.loc...
        text.rotation.set opts.rotation...

        geometry.computeBoundingBox()
