Index: src/wp-admin/js/editor-expand.js
===================================================================
--- src/wp-admin/js/editor-expand.js	(revision 29686)
+++ src/wp-admin/js/editor-expand.js	(working copy)
@@ -31,6 +31,8 @@
 		fixedSideBottom = false,
 		scrollTimer,
 		lastScrollPosition = 0,
+		visualEditorScrollPosition = 0,
+		textEditorScrollPosition = 0,
 		pageYOffsetAtTop = 130,
 		pinnedToolsTop = 56,
 		sidebarBottom = 20,
@@ -216,20 +218,35 @@
 
 		// Adjust when switching editor modes.
 		function mceShow() {
+			textEditorScrollPosition = window.pageYOffset;
+
 			setTimeout( function() {
+				var top = $contentWrap.offset().top;
+
+				if ( window.pageYOffset > top || visualEditorScrollPosition ) {
+					window.scrollTo( window.pageXOffset, visualEditorScrollPosition ? visualEditorScrollPosition : top - heights.adminBarHeight );
+				}
+
 				editor.execCommand( 'wpAutoResize' );
 				adjust();
 			}, 300 );
+
+			adjust();
 		}
 
 		function mceHide() {
-			var wrapHeight = $( '#wpwrap' ).height();
+			visualEditorScrollPosition = window.pageYOffset;
 
-			textEditorResize();
+			setTimeout( function() {
+				var top = $contentWrap.offset().top;
 
-			if ( wrapHeight && $window.scrollTop() > wrapHeight ) {
-				window.scrollTo( window.pageXOffset, wrapHeight - 1 );
-			}
+				if ( window.pageYOffset > top || textEditorScrollPosition ) {
+					window.scrollTo( window.pageXOffset, textEditorScrollPosition ? textEditorScrollPosition : top - heights.adminBarHeight );
+				}
+
+				textEditorResize();
+				adjust();
+			}, 100 );
 
 			adjust();
 		}
