| Index: sdk/lib/collection/iterable.dart
 | 
| diff --git a/sdk/lib/collection/iterable.dart b/sdk/lib/collection/iterable.dart
 | 
| index d74448aa099e7fadffe156d1aac1d5c28fff1327..7c8ec7039b66312b1cb6e8acfb32eb62b3b574ae 100644
 | 
| --- a/sdk/lib/collection/iterable.dart
 | 
| +++ b/sdk/lib/collection/iterable.dart
 | 
| @@ -31,7 +31,7 @@ abstract class IterableMixin<E> implements Iterable<E> {
 | 
|    E reduce(E combine(E value, E element)) {
 | 
|      Iterator<E> iterator = this.iterator;
 | 
|      if (!iterator.moveNext()) {
 | 
| -      throw new StateError("No elements");
 | 
| +      throw IterableElementError.noElement();
 | 
|      }
 | 
|      E value = iterator.current;
 | 
|      while (iterator.moveNext()) {
 | 
| @@ -117,7 +117,7 @@ abstract class IterableMixin<E> implements Iterable<E> {
 | 
|    E get first {
 | 
|      Iterator it = iterator;
 | 
|      if (!it.moveNext()) {
 | 
| -      throw new StateError("No elements");
 | 
| +      throw IterableElementError.noElement();
 | 
|      }
 | 
|      return it.current;
 | 
|    }
 | 
| @@ -125,7 +125,7 @@ abstract class IterableMixin<E> implements Iterable<E> {
 | 
|    E get last {
 | 
|      Iterator it = iterator;
 | 
|      if (!it.moveNext()) {
 | 
| -      throw new StateError("No elements");
 | 
| +      throw IterableElementError.noElement();
 | 
|      }
 | 
|      E result;
 | 
|      do {
 | 
| @@ -136,9 +136,9 @@ abstract class IterableMixin<E> implements Iterable<E> {
 | 
|  
 | 
|    E get single {
 | 
|      Iterator it = iterator;
 | 
| -    if (!it.moveNext()) throw new StateError("No elements");
 | 
| +    if (!it.moveNext()) throw IterableElementError.noElement();
 | 
|      E result = it.current;
 | 
| -    if (it.moveNext()) throw new StateError("More than one element");
 | 
| +    if (it.moveNext()) throw IterableElementError.tooMany();
 | 
|      return result;
 | 
|    }
 | 
|  
 | 
| @@ -147,7 +147,7 @@ abstract class IterableMixin<E> implements Iterable<E> {
 | 
|        if (test(element)) return element;
 | 
|      }
 | 
|      if (orElse != null) return orElse();
 | 
| -    throw new StateError("No matching element");
 | 
| +    throw IterableElementError.noElement();
 | 
|    }
 | 
|  
 | 
|    dynamic lastWhere(bool test(E value), { Object orElse() }) {
 | 
| @@ -161,7 +161,7 @@ abstract class IterableMixin<E> implements Iterable<E> {
 | 
|      }
 | 
|      if (foundMatching) return result;
 | 
|      if (orElse != null) return orElse();
 | 
| -    throw new StateError("No matching element");
 | 
| +    throw IterableElementError.noElement();
 | 
|    }
 | 
|  
 | 
|    E singleWhere(bool test(E value)) {
 | 
| @@ -170,14 +170,14 @@ abstract class IterableMixin<E> implements Iterable<E> {
 | 
|      for (E element in this) {
 | 
|        if (test(element)) {
 | 
|          if (foundMatching) {
 | 
| -          throw new StateError("More than one matching element");
 | 
| +          throw IterableElementError.tooMany();
 | 
|          }
 | 
|          result = element;
 | 
|          foundMatching = true;
 | 
|        }
 | 
|      }
 | 
|      if (foundMatching) return result;
 | 
| -    throw new StateError("No matching element");
 | 
| +    throw IterableElementError.noElement();
 | 
|    }
 | 
|  
 | 
|    E elementAt(int index) {
 | 
| @@ -225,7 +225,7 @@ abstract class IterableBase<E> implements Iterable<E> {
 | 
|    E reduce(E combine(E value, E element)) {
 | 
|      Iterator<E> iterator = this.iterator;
 | 
|      if (!iterator.moveNext()) {
 | 
| -      throw new StateError("No elements");
 | 
| +      throw IterableElementError.noElement();
 | 
|      }
 | 
|      E value = iterator.current;
 | 
|      while (iterator.moveNext()) {
 | 
| @@ -311,7 +311,7 @@ abstract class IterableBase<E> implements Iterable<E> {
 | 
|    E get first {
 | 
|      Iterator it = iterator;
 | 
|      if (!it.moveNext()) {
 | 
| -      throw new StateError("No elements");
 | 
| +      throw IterableElementError.noElement();
 | 
|      }
 | 
|      return it.current;
 | 
|    }
 | 
| @@ -319,7 +319,7 @@ abstract class IterableBase<E> implements Iterable<E> {
 | 
|    E get last {
 | 
|      Iterator it = iterator;
 | 
|      if (!it.moveNext()) {
 | 
| -      throw new StateError("No elements");
 | 
| +      throw IterableElementError.noElement();
 | 
|      }
 | 
|      E result;
 | 
|      do {
 | 
| @@ -330,9 +330,9 @@ abstract class IterableBase<E> implements Iterable<E> {
 | 
|  
 | 
|    E get single {
 | 
|      Iterator it = iterator;
 | 
| -    if (!it.moveNext()) throw new StateError("No elements");
 | 
| +    if (!it.moveNext()) throw IterableElementError.noElement();
 | 
|      E result = it.current;
 | 
| -    if (it.moveNext()) throw new StateError("More than one element");
 | 
| +    if (it.moveNext()) throw IterableElementError.tooMany();
 | 
|      return result;
 | 
|    }
 | 
|  
 | 
| @@ -341,7 +341,7 @@ abstract class IterableBase<E> implements Iterable<E> {
 | 
|        if (test(element)) return element;
 | 
|      }
 | 
|      if (orElse != null) return orElse();
 | 
| -    throw new StateError("No matching element");
 | 
| +    throw IterableElementError.noElement();
 | 
|    }
 | 
|  
 | 
|    dynamic lastWhere(bool test(E value), { Object orElse() }) {
 | 
| @@ -355,7 +355,7 @@ abstract class IterableBase<E> implements Iterable<E> {
 | 
|      }
 | 
|      if (foundMatching) return result;
 | 
|      if (orElse != null) return orElse();
 | 
| -    throw new StateError("No matching element");
 | 
| +    throw IterableElementError.noElement();
 | 
|    }
 | 
|  
 | 
|    E singleWhere(bool test(E value)) {
 | 
| @@ -364,14 +364,14 @@ abstract class IterableBase<E> implements Iterable<E> {
 | 
|      for (E element in this) {
 | 
|        if (test(element)) {
 | 
|          if (foundMatching) {
 | 
| -          throw new StateError("More than one matching element");
 | 
| +          throw IterableElementError.tooMany();
 | 
|          }
 | 
|          result = element;
 | 
|          foundMatching = true;
 | 
|        }
 | 
|      }
 | 
|      if (foundMatching) return result;
 | 
| -    throw new StateError("No matching element");
 | 
| +    throw IterableElementError.noElement();
 | 
|    }
 | 
|  
 | 
|    E elementAt(int index) {
 | 
| 
 |