anchor.diff:       ]);
      });
     
  -}
  -
  -class GetAttr extends Component{
  +   static elementExist => Funcs.alwaysEffect(Valids.exist);
  +}
  +
  +class AttrCore extends Component{
       html.Element elem;
   
  +    static create() => new AttrCore();
  +
  +    AttrCore(): super('AttrCore'){
  +      this.removeDefaultPorts();
  +    
  +      this.makePort('in:elem');
  +      this.port('in:elem').forceCondition(Elements.isElement);
  +      this.port('in:elem').tap((e){ this.elem = e.data; });
  +    }
  +}
  +
  +class GetAttr extends AttrCore{
  +
       static create() => new GetAttr();
   
  -    GetAttr(): super('GetAttr'){
  -      this.removeDefaultPorts();
  -    
  -      this.makePort('in:elem');
  +    GetAttr(){
  +      this.meta('id','GetAttr');
         this.makePort('in:get');
         this.makePort('out:value');
         
  -      this.port('in:elem').forceCondition(Elements.isElement);
         this.port('in:get').forceCondition((n){ return Valids.exist(this.elem); });
         this.port('in:get').forceCondition(Valids.isString);
   
  -      this.port('in:elem').tap((n){ this.elem = n.data; });
         this.port('in:get').tap((n){
           this.port('out:value').send(this.elem.getAttribute(n.data));
         });
   
  -
  -    }
  -}
  -
  -class SetAttr extends Component{
  -    html.Element elem;
  +    }
  +}
  +
  +class SetAttr extends AttrCore{
       
       static create() => new SetAttr();
   
  -    SetAttr(): super('SetAttr'){
  -      this.removeDefaultPorts();
  -
  -      this.makePort('in:elem');
  +    SetAttr(){
  +      this.meta('id','SetAttr');
  +
         this.makePort('in:set');
         this.makePort('in:attr');
  -
  -      this.port('in:elem').tap((n){ this.elem = n.data; });
  -      this.port('in:elem').forceCondition(Elements.isElement);
   
         this.port('in:set').forceCondition((n){ return Valids.exist(this.elem); });
         this.port('in:set').forceCondition(Valids.isString);
  
positive.code:         SparkRegistry.register('elements','MapAttributable',MapAttributable.create);
  
          SparkRegistry.register('elements','Attr',Attr.create);
          SparkRegistry.register('elements','getattr',GetAttr.create);
          SparkRegistry.register('elements','setattr',SetAttr.create);
  
          SparkRegistry.register('elements','element',Element.create);
      }
  
     static isElement(n) => n is html.Element;
  
negative.code:    static create() => new Attr();
  
     Attr(): super('Attr'){
       this.removeDefaultPorts();
       this.enableSubnet();
       
  