         }
 
         [Test]
+        public function test_simple_sort_by_complex_fields_with_custom_compare_function_for_sort():void
+        {
+            function compareByStreet(a:ListCollectionView_FLEX_34837_VO, b:ListCollectionView_FLEX_34837_VO, fields:Array):int
+            {
+                var streetA:String = a.address ? a.address.street : null;
+                var streetB:String = b.address ? b.address.street : null;
+
+                return ObjectUtil.stringCompare(streetA, streetB, true);
+            }
+
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["address.street"]: Street4, Street3, Street2, Street1, Street0
+
+            const sortByStreetAscending:Sort = new Sort();
+            sortByStreetAscending.fields = [new SortField("address.street", false, false, false)]; //should make no difference
+            sortByStreetAscending.compareFunction = compareByStreet;
+            _sut.sort = sortByStreetAscending;
+
+            //when
+            _sut.refresh(); //should be: Street0, Street1, Street2, Street3, Street4
+
+            //then
+            assertIndexesAre([0, 1, 2, 3, 4]);
+        }
+
+        [Test]
+        public function test_simple_sort_by_complex_fields_with_custom_compare_function_for_sort_field():void
+        {
+            function compareByStreet(a:ListCollectionView_FLEX_34837_VO, b:ListCollectionView_FLEX_34837_VO):int
+            {
+                var streetA:String = a.address ? a.address.street : null;
+                var streetB:String = b.address ? b.address.street : null;
+
+                return ObjectUtil.stringCompare(streetA, streetB, true);
+            }
+
+            //given
+            var from4To0:IList = generateVOs(5, true);
+            _sut.addAll(from4To0); //values["address.street"]: Street4, Street3, Street2, Street1, Street0
+
+            const sortByStreetAscending:Sort = new Sort();
+            var sortField:SortField = new SortField("address.street", false, false, false);
+            sortField.compareFunction = compareByStreet;
+            sortByStreetAscending.fields = [sortField];
+            _sut.sort = sortByStreetAscending;
+
+            //when
+            _sut.refresh(); //should be: Street0, Street1, Street2, Street3, Street4
+
+            //then
+            assertIndexesAre([0, 1, 2, 3, 4]);
+        }
+
+        [Test]
         public function test_changing_simple_sort_field_value_places_it_correctly_according_to_collection_sort():void
         {
             //given

            _sut.addAll(from1To4);

            const sortByNameAscending:Sort = new Sort();
            sortByNameAscending.fields = [new SortField("name", false, false)];
            _sut.sort = sortByNameAscending;
            _sut.refresh(); //values: Object1, Object2, Object3, Object4


    import mx.collections.ListCollectionView;
    import mx.collections.Sort;
    import mx.collections.SortField;
    import mx.utils.ObjectUtil;

    import org.flexunit.asserts.assertEquals;

