diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6be0b2d..edfc03d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
+## 1.1.2
+
+* Fix a bug where `TypedDataBuffer.insertAll` could fail to insert some elements
+  of an `Iterable`.
+
 ## 1.1.1
+
 * Optimize `insertAll` with an `Iterable` argument and no end-point.
+
 ## 1.1.0
 
 * Add `start` and `end` parameters to the `addAll()` and `insertAll()` methods
diff --git a/lib/typed_buffers.dart b/lib/typed_buffers.dart
index c3c0f38..2d1ca13 100644
--- a/lib/typed_buffers.dart
+++ b/lib/typed_buffers.dart
@@ -59,7 +59,7 @@
   }
 
   void _add(E value) {
-    if (_length == _buffer.length) _grow();
+    if (_length == _buffer.length) _grow(_length);
     _buffer[_length++] = value;
   }
 
@@ -125,25 +125,26 @@
 
     // Add elements at end, growing as appropriate, then put them back at
     // position [index] using flip-by-double-reverse.
-    if (end != null) values = values.take(end);
-    int writeIndex = _length;
-    int skipCount = start;
+    var writeIndex = _length;
+    var skipCount = start;
     for (var value in values) {
       if (skipCount > 0) {
         skipCount--;
         continue;
       }
       if (writeIndex == _buffer.length) {
-        _grow();
+        _grow(writeIndex);
       }
       _buffer[writeIndex++] = value;
     }
+
     if (skipCount > 0) {
       throw new StateError("Too few elements");
     }
     if (end != null && writeIndex < end) {
       throw new RangeError.range(end, start, writeIndex, "end");
     }
+
     // Swap [index.._length) and [_length..writeIndex) by double-reversing.
     _reverse(_buffer, index, _length);
     _reverse(_buffer, _length, writeIndex);
@@ -255,8 +256,11 @@
     return _createBuffer(newLength);
   }
 
-  void _grow() {
-    _buffer = _createBiggerBuffer(null)..setRange(0, _length, _buffer);
+  /// Grows the buffer.
+  ///
+  /// This copies the first [length] elements into the new buffer.
+  void _grow(int length) {
+    _buffer = _createBiggerBuffer(null)..setRange(0, length, _buffer);
   }
 
   void setRange(int start, int end, Iterable<E> source, [int skipCount = 0]) {
diff --git a/pubspec.yaml b/pubspec.yaml
index 8927a76..a58a7e7 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: typed_data
-version: 1.1.2-dev
+version: 1.1.2
 author: Dart Team <misc@dartlang.org>
 description: Utility functions and classes related to the 'dart:typed_data' library.
 homepage: https://github.com/dart-lang/typed_data
diff --git a/test/typed_buffers_test.dart b/test/typed_buffers_test.dart
index 0c99a40..9e97592 100644
--- a/test/typed_buffers_test.dart
+++ b/test/typed_buffers_test.dart
@@ -109,6 +109,13 @@
           expect(buffer, equals([2, 3, 4, 5, 6, 1, 7, 8, 9, 10]));
         });
 
+        // Regression test for #1.
+        test("inserts values into the buffer after removeRange()", () {
+          buffer.removeRange(1, 4);
+          buffer.insertAll(1, source);
+          expect(buffer, equals([6, 1, 2, 3, 4, 5, 10]));
+        });
+
         test("does nothing for empty slices", () {
           buffer.insertAll(1, source, 0, 0);
           expect(buffer, equals([6, 7, 8, 9, 10]));
