*** src/edit.c.HEAD.80235.c	2009-01-12 02:24:11.000000000 +1030
--- src/edit.c	2009-01-12 02:18:12.000000000 +1030
***************
*** 8733,8738 ****
--- 8733,8743 ----
  # endif
      }
  
+ #ifdef FEAT_SCROLLBIND
+     if (!vim_strchr(p_sbo, 'f'))
+ 	do_check_scrollbind(TRUE);
+ #endif
+ 
  # if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
      curwin->w_redr_status = TRUE;
  
*** src/gui.c.HEAD.80235.c	2009-01-12 02:24:56.000000000 +1030
--- src/gui.c	2009-01-12 02:17:48.000000000 +1030
***************
*** 3770,3781 ****
      int		sb_num;
  #ifdef USE_ON_FLY_SCROLL
      colnr_T	old_leftcol = curwin->w_leftcol;
- # ifdef FEAT_SCROLLBIND
-     linenr_T	old_topline = curwin->w_topline;
- # endif
- # ifdef FEAT_DIFF
-     int		old_topfill = curwin->w_topfill;
- # endif
  #else
      char_u	bytes[sizeof(long_u)];
      int		byte_count;
--- 3770,3775 ----
***************
*** 3855,3860 ****
--- 3849,3866 ----
      }
  #endif
  
+ # ifdef FEAT_SCROLLBIND
+     /* Prime 'scrollbind' */
+     if (!vim_strchr(p_sbo, 'f')) {
+ 	wp = curwin;
+ 	if (sb->wp)
+ 	    curwin = sb->wp;
+ 	if (curwin->w_p_scb && !vim_strchr(p_sbo, 'f'))
+ 	    do_check_scrollbind(TRUE);
+ 	curwin = wp;
+     }
+ # endif
+ 
      if (sb->wp != NULL)		/* vertical scrollbar */
      {
  	sb_num = 0;
***************
*** 3946,3966 ****
      /*
       * synchronize other windows, as necessary according to 'scrollbind'
       */
!     if (curwin->w_p_scb
! 	    && ((sb->wp == NULL && curwin->w_leftcol != old_leftcol)
! 		|| (sb->wp == curwin && (curwin->w_topline != old_topline
! #  ifdef FEAT_DIFF
! 					   || curwin->w_topfill != old_topfill
! #  endif
! 			))))
!     {
! 	do_check_scrollbind(TRUE);
! 	/* need to update the window right here */
! 	for (wp = firstwin; wp != NULL; wp = wp->w_next)
! 	    if (wp->w_redr_type > 0)
! 		updateWindow(wp);
! 	setcursor();
!     }
  # endif
      out_flush();
      gui_update_cursor(FALSE, TRUE);
--- 3952,3973 ----
      /*
       * synchronize other windows, as necessary according to 'scrollbind'
       */
!     if (!vim_strchr(p_sbo, 'f')) {
! 	wp = curwin;
! 	if (sb->wp)
! 	    curwin = sb->wp;
! 	if (curwin->w_p_scb)
! 	    do_check_scrollbind(TRUE);
! 	curwin = wp;
!     } else {
! 	if (curwin->w_p_scb)
! 	    do_check_scrollbind(TRUE);
!     }
!     /* need to update the window right here */
!     for (wp = firstwin; wp != NULL; wp = wp->w_next)
! 	if (wp->w_redr_type > 0)
! 	    updateWindow(wp);
!     setcursor();
  # endif
      out_flush();
      gui_update_cursor(FALSE, TRUE);
*** src/normal.c.HEAD.80235.c	2009-01-12 02:25:07.000000000 +1030
--- src/normal.c	2009-01-12 02:14:34.000000000 +1030
***************
*** 4525,4530 ****
--- 4525,4535 ----
  	nv_scroll_line(cap);
      }
  
+ #ifdef FEAT_SCROLLBIND
+     if (!vim_strchr(p_sbo, 'f'))
+ 	do_check_scrollbind(TRUE);
+ #endif
+ 
  # if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
      curwin->w_redr_status = TRUE;
  
*** src/option.c.HEAD.80235.c	2009-01-12 02:25:15.000000000 +1030
--- src/option.c	2009-01-12 02:14:08.000000000 +1030
***************
*** 2102,2108 ****
      {"scrollopt",   "sbo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
  #ifdef FEAT_SCROLLBIND
  			    (char_u *)&p_sbo, PV_NONE,
! 			    {(char_u *)"ver,jump", (char_u *)0L}
  #else
  			    (char_u *)NULL, PV_NONE,
  			    {(char_u *)0L, (char_u *)0L}
--- 2102,2108 ----
      {"scrollopt",   "sbo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
  #ifdef FEAT_SCROLLBIND
  			    (char_u *)&p_sbo, PV_NONE,
! 			    {(char_u *)"ver,jump,focusonly", (char_u *)0L}
  #else
  			    (char_u *)NULL, PV_NONE,
  			    {(char_u *)0L, (char_u *)0L}
***************
*** 2882,2888 ****
  static char *(p_bsdir_values[]) = {"current", "last", "buffer", NULL};
  #endif
  #ifdef FEAT_SCROLLBIND
! static char *(p_scbopt_values[]) = {"ver", "hor", "jump", NULL};
  #endif
  static char *(p_debug_values[]) = {"msg", "throw", "beep", NULL};
  #ifdef FEAT_VERTSPLIT
--- 2882,2888 ----
  static char *(p_bsdir_values[]) = {"current", "last", "buffer", NULL};
  #endif
  #ifdef FEAT_SCROLLBIND
! static char *(p_scbopt_values[]) = {"ver", "hor", "jump", "focusonly", NULL};
  #endif
  static char *(p_debug_values[]) = {"msg", "throw", "beep", NULL};
  #ifdef FEAT_VERTSPLIT
