diff --git a/lib/binding/collection.js b/lib/binding/collection.js
index <HASH>..<HASH> 100644
--- a/lib/binding/collection.js
+++ b/lib/binding/collection.js
@@ -19,6 +19,10 @@ function Collection() {
       var removed = source.splice(idx, count);
       this.length = source.length;
       api.fire('changed', { removed: removed, removeIdx: idx });
+    },
+
+    get : function (idx) {
+      return source[idx];
     }
   };
 
diff --git a/lib/controls/itemsControl.js b/lib/controls/itemsControl.js
index <HASH>..<HASH> 100644
--- a/lib/controls/itemsControl.js
+++ b/lib/controls/itemsControl.js
@@ -55,8 +55,15 @@ function appendChildren(itemsControl) {
   ensureCanAppendChildren(itemsControl);
 
   var itemSource = itemsControl._itemSource;
-  for (var i = 0; i < itemSource.length; ++i) {
-    itemsControl._addItem(itemSource[i]);
+  var i;
+  if (typeof itemSource.get === 'function') {
+    for (i = 0; i < itemSource.length; ++i) {
+      itemsControl._addItem(itemSource.get(i));
+    }
+  } else {
+    for (i = 0; i < itemSource.length; ++i) {
+      itemsControl._addItem(itemSource[i]);
+    }
   }
 }
Dirty iteration over observable collection

Ideally it should be array like, but I don't want to kill garbage
collection