         
 //        return
         let firstIP = indexPathForFirstVisibleItem()
+        var refFrame : CGRect = CGRectZero
+        var refVisibleFrame : CGRect = CGRectZero
+        if firstIP != nil, let cell = cellForItemAtIndexPath(firstIP!) {
+            refFrame = cell.frame
+            refVisibleFrame = self.convertRect(cell.frame, fromView: self.contentDocumentView)
+        }
         self.info.recalculate()
         let nContentSize = self.info.contentSize
         contentDocumentView.frame.size = nContentSize
         
+        if firstIP != nil, let attrs = self.collectionViewLayout.layoutAttributesForItemAtIndexPath(firstIP!) {
+            var nRef = self.convertRect(attrs.frame, fromView: self.contentDocumentView)
+            nRef.origin.y -= refVisibleFrame.origin.y
+            nRef = self.convertRect(nRef, toView: self.contentDocumentView)
+            self.scrollToRect(nRef, atPosition: .Top, animated: false)
+        }
+        
         self.contentDocumentView.prepareRect(self.contentVisibleRect, force: true)
+        
+        
         return
         
         if animated {

        switch atPosition {
        case .Top:
            // make the top of our rect flush with the top of the visible bounds
            rect.size.height = CGRectGetHeight(visibleRect) + contentInsets.top;
            //rect.origin.y = self.documentVisibleRect.origin.y + rect.size.height;
            break;
        case .Centered:
            // TODO

        
        let nFirstIP = self.indexPathForFirstVisibleItem()
        if nFirstIP != firstIP, let ip = firstIP, let rect = self.collectionViewLayout.scrollRectForItemAtIndexPath(ip, atPosition: CBCollectionViewScrollPosition.Top) {
            self.scrollToRect(rect, atPosition: .Top, animated: false)
        }
        self.contentDocumentView.prepareRect(self.contentVisibleRect)
    }
