define([
        'JBrowse/Util'
       ],
       function( Util ) {

var counter = 0;

var SimpleFeature = Util.fastDeclare({

    constructor: function( args ) {
        args = args || {};
        this.data = args.data || {};
        this._parent = args.parent;
        this._uniqueID = args.id || this.data.uniqueID || (
            this._parent ? this._parent.id()+'_'+(counter++) : 'SimpleFeature_'+(counter++)
        );

        // inflate any subfeatures that are not already feature objects
        var subfeatures;
        if(( subfeatures = this.data.subfeatures )) {
            for( var i = 0; i < subfeatures.length; i++ ) {
                if( typeof subfeatures[i].get != 'function' ) {
                    subfeatures[i] = new SimpleFeature(
                        { data: subfeatures[i],
                          parent: this
                        });
                }
            }
        }
    },

    get: function(name) {
        return this.data[ name ];
    },

    set: function( name, val ) {
        this.data[ name ] = val;
    },

    tags: function() {
        var t = [];
        var d = this.data;
        for( var k in d ) {
            if( d.hasOwnProperty( k ) )
                t.push( k );
        }
        return t;
    },

    id: function( newid ) {
        if( newid )
            this._uniqueID = newid;
        return this._uniqueID;
    },

    parent: function() {
        return this._parent;
    },

    children: function() {
        return this.get('subfeatures');
    }

});

return SimpleFeature;
});
@@ -1,8 +1,62 @@
+/**%0A * Simple implementation of a feature object.%0A */%0A
 define(%5B
@@ -174,16 +174,403 @@
 lare(%7B%0A%0A
+    /**%0A     * @param args.data %7BObject%7D key-value data, must include 'start' and 'end'%0A     * @param args.parent %7BFeature%7D optional parent feature%0A     * @param args.id %7BString%7D optional unique identifier.  can also be in data.uniqueID.%0A     *%0A     * Note: args.data.subfeatures can be an array of these same args,%0A     * which will be inflated to more instances of this class.%0A     */%0A
     cons
@@ -1353,24 +1353,169 @@
   %7D%0A    %7D,%0A%0A
+    /**%0A     * Get a piece of data about the feature.  All features must have%0A     * 'start' and 'end', but everything else is optional.%0A     */%0A
     get: fun
@@ -1566,24 +1566,68 @@
  %5D;%0A    %7D,%0A%0A
+    /**%0A     * Set an item of data.%0A     */%0A
     set: fun
@@ -1684,24 +1684,113 @@
 al;%0A    %7D,%0A%0A
+    /**%0A     * Get an array listing which data keys are present in this feature.%0A     */%0A
     tags: fu
@@ -1976,24 +1976,82 @@
  t;%0A    %7D,%0A%0A
+    /**%0A     * Get the unique ID of this feature.%0A     */%0A
     id: func
@@ -2169,65 +2169,222 @@
     
-parent: function() %7B%0A        return this._parent;%0A    %7D,%0A
+/**%0A     * Get this feature's parent feature, or undefined if none.%0A     */%0A    parent: function() %7B%0A        return this._parent;%0A    %7D,%0A%0A    /**%0A     * Get an array of child features, or undefined if none.%0A     */
 %0A   

add some doc to SimpleFeature