anchor.diff:        item.classes.toggle(this.selectedClass, isSelected);
       }
   
  -    //(egrimes) Note: It looks like Polymer.js adds the property dynamically to
  -    //the item. PolymerSelector defaults selectedAttribute to 'active', so users
  -    //will have to explicitly set selectedProperty to an empty string to keep
  -    //from blowing up. I'm not sure that's reasoable.
  -    mirr.InstanceMirror itemIM = mirr.reflect(item);
  -    Symbol selectedPropertySym = new Symbol('${this.selectedProperty}');
  -    mirr.MethodMirror selectedPropertySetter = itemIM.type.instanceMembers[selectedPropertySym];
  -
       if (this.selectedProperty != null && this.selectedProperty.isNotEmpty) {
  +      //(egrimes) Note: It looks like Polymer.js adds the property dynamically to
  +      //the item. PolymerSelector defaults selectedAttribute to 'active', so users
  +      //will have to explicitly set selectedProperty to an empty string to keep
  +      //from blowing up. I'm not sure that's reasoable.
  +      mirr.InstanceMirror itemIM = mirr.reflect(item);
  +      Symbol selectedPropertySym = new Symbol('${this.selectedProperty}');
  +      mirr.MethodMirror selectedPropertySetter =
  +          itemIM.type.instanceMembers[selectedPropertySym];
  +
         //Note: Reflection is required to work properly with checkboxes
         // TODO check if a setter is available instead of try/catch
         //try {
  -        if(selectedPropertySetter != null && selectedPropertySetter.isSetter
  -            && !selectedPropertySetter.isStatic) {
  +      if (selectedPropertySetter != null && selectedPropertySetter.isSetter &&
  +          !selectedPropertySetter.isStatic) {
           // polymer-ui-submenu-item works only with this
  -          itemIM.setField(selectedPropertySym, isSelected);
  -
  -      //} catch(e) { // required for polymer_ui_breadcrumbs (when an attribute is set on a DOM element
  -//        } else {
  -//        if(isSelected) {
  -//          item.attributes[this.selectedProperty] = isSelected.toString();
  -//        } else {
  -//          item.attributes.remove(this.selectedProperty);
  -//        }
  -      }
  -    }
  -
  -    if(this.selectedAttribute != null && this.selectedAttribute.isNotEmpty) {
  -      if(isSelected) {
  -        item.attributes[this.selectedAttribute] = '';
  +        itemIM.setField(selectedPropertySym, isSelected);
  +
  +        //} catch(e) { // required for polymer_ui_breadcrumbs (when an attribute is set on a DOM element
         } else {
  +        item.attributes[this.selectedProperty] = isSelected.toString();
  +        if(!isSelected) {
  +          item.attributes.remove(this.selectedProperty);
  +        }
  +      }
  +    }
  +
  +    // item.attributes.remove('this.selectedAttribute') doesn't lead to a call of the fieldChangedMethod
  +    if (this.selectedAttribute != null && this.selectedAttribute.isNotEmpty) {
  +      item.attributes[this.selectedAttribute] = isSelected.toString();
  +      if(!isSelected) {
           item.attributes.remove(this.selectedAttribute);
         }
       }
  
positive.code: import 'dart:mirrors' as mirr;
  
  import 'package:polymer/polymer.dart';
  import 'package:polymer_elements/polymer_selection/polymer_selection.dart' show PolymerSelection;
  
  @CustomTag('polymer-selector')
  class PolymerSelector extends PolymerElement {
  
    @published var dummy; // TODO remove workaround for polymer-selector-multi test
  
    /**
     * Gets or sets the selected element.  Default to use the index
  
negative.code:     return (this.$['selection'] as PolymerSelection).selection;
    }
  
    void selectedChanged(old) {
      //(egrimes) Note: Workaround for https://code.google.com/p/dart/issues/detail?id=14496
      // TODO should be fixed
      new async.Future(() => _updateSelected());
      //this._updateSelected();
    }
  
    void _onMutation(records, observer) {
      _updateSelected();
    }
  
    void _updateSelected() {
      this._validateSelected();
      if (this.multi) {
        this.clearSelection();
        if (this.selected != null) {
          this.selected.forEach((s) {
            this._valueToSelection(s);
          });
  