diff --git a/src/drivers/win/taseditor/bookmarks.cpp b/src/drivers/win/taseditor/bookmarks.cpp
index 4e05950c..4120d00c 100644
--- a/src/drivers/win/taseditor/bookmarks.cpp
+++ b/src/drivers/win/taseditor/bookmarks.cpp
@@ -770,7 +770,7 @@ void BOOKMARKS::RedrawBranchesTree()
 		branch = bookmarks_array[branch].parent_branch;
 		if (branch >= 0)
 		{
-			branch_x = BranchCurrX[branch];
+	 		branch_x = BranchCurrX[branch];
 			branch_y = BranchCurrY[branch];
 		} else
 		{
@@ -839,6 +839,7 @@ void BOOKMARKS::RedrawBranchesTree()
 				BitBlt(hBitmapDC, branch_x, branch_y, DIGIT_BITMAP_WIDTH, DIGIT_BITMAP_HEIGHT, hSpritesheetDC, i * DIGIT_BITMAP_WIDTH, 0, SRCCOPY);
 		}
 	}
+	SetBkMode(hBitmapDC, TRANSPARENT);
 	// jump_frame of item under cursor (except cloud - it doesn't have particular frame)
 	if (item_under_mouse > ITEM_UNDER_MOUSE_CLOUD)
 	{
@@ -847,17 +848,34 @@ void BOOKMARKS::RedrawBranchesTree()
 			U32ToDecStr(framenum_string, bookmarks_array[item_under_mouse].snapshot.jump_frame, DIGITS_IN_FRAMENUM);
 		else
 			U32ToDecStr(framenum_string, currFrameCounter, DIGITS_IN_FRAMENUM);
+		SetTextColor(hBitmapDC, BRANCHES_TEXT_SHADOW_COLOR);
+		TextOut(hBitmapDC, BRANCHES_BITMAP_FRAMENUM_X + 1, BRANCHES_BITMAP_FRAMENUM_Y + 1, (LPCSTR)framenum_string, DIGITS_IN_FRAMENUM);
+		SetTextColor(hBitmapDC, BRANCHES_TEXT_COLOR);
 		TextOut(hBitmapDC, BRANCHES_BITMAP_FRAMENUM_X, BRANCHES_BITMAP_FRAMENUM_Y, (LPCSTR)framenum_string, DIGITS_IN_FRAMENUM);
 	}
 	// time of item under cursor
 	if (item_under_mouse > ITEM_UNDER_MOUSE_NONE)
 	{
 		if (item_under_mouse == ITEM_UNDER_MOUSE_CLOUD)
+		{
+			// draw shadow of text
+			SetTextColor(hBitmapDC, BRANCHES_TEXT_SHADOW_COLOR);
+			TextOut(hBitmapDC, BRANCHES_BITMAP_TIME_X + 1, BRANCHES_BITMAP_TIME_Y + 1, (LPCSTR)cloud_time, TIME_DESC_LENGTH-1);
+			SetTextColor(hBitmapDC, BRANCHES_TEXT_COLOR);
 			TextOut(hBitmapDC, BRANCHES_BITMAP_TIME_X, BRANCHES_BITMAP_TIME_Y, (LPCSTR)cloud_time, TIME_DESC_LENGTH-1);
-		else if (item_under_mouse < TOTAL_BOOKMARKS)
+		} else if (item_under_mouse < TOTAL_BOOKMARKS)
+		{
+			SetTextColor(hBitmapDC, BRANCHES_TEXT_SHADOW_COLOR);
+			TextOut(hBitmapDC, BRANCHES_BITMAP_TIME_X + 1, BRANCHES_BITMAP_TIME_Y + 1, (LPCSTR)bookmarks_array[item_under_mouse].snapshot.description, TIME_DESC_LENGTH-1);
+			SetTextColor(hBitmapDC, BRANCHES_TEXT_COLOR);
 			TextOut(hBitmapDC, BRANCHES_BITMAP_TIME_X, BRANCHES_BITMAP_TIME_Y, (LPCSTR)bookmarks_array[item_under_mouse].snapshot.description, TIME_DESC_LENGTH-1);
-		else
+		} else	// fireball - current_pos_time
+		{
+			SetTextColor(hBitmapDC, BRANCHES_TEXT_SHADOW_COLOR);
+			TextOut(hBitmapDC, BRANCHES_BITMAP_TIME_X + 1, BRANCHES_BITMAP_TIME_Y + 1, (LPCSTR)current_pos_time, TIME_DESC_LENGTH-1);
+			SetTextColor(hBitmapDC, BRANCHES_TEXT_COLOR);
 			TextOut(hBitmapDC, BRANCHES_BITMAP_TIME_X, BRANCHES_BITMAP_TIME_Y, (LPCSTR)current_pos_time, TIME_DESC_LENGTH-1);
+		}
 	}
 	// finished
 	must_redraw_branches_tree = false;
@@ -931,11 +949,11 @@ void BOOKMARKS::CheckMousePos()
 		// find item under mouse
 		item_under_mouse = ITEM_UNDER_MOUSE_NONE;
 		for (int i = 0; i < TOTAL_BOOKMARKS; ++i)
-			if (item_under_mouse == ITEM_UNDER_MOUSE_NONE && mouse_x >= BranchCurrX[i] - DIGIT_RECT_HALFWIDTH && mouse_x < BranchCurrX[i] - DIGIT_RECT_HALFWIDTH + DIGIT_RECT_WIDTH && mouse_y >= BranchCurrY[i] - DIGIT_RECT_HALFHEIGHT && mouse_y < BranchCurrY[i] - DIGIT_RECT_HALFHEIGHT + DIGIT_RECT_HEIGHT)
+			if (item_under_mouse == ITEM_UNDER_MOUSE_NONE && mouse_x >= BranchCurrX[i] - DIGIT_RECT_HALFWIDTH_COLLISION && mouse_x < BranchCurrX[i] - DIGIT_RECT_HALFWIDTH_COLLISION + DIGIT_RECT_WIDTH_COLLISION && mouse_y >= BranchCurrY[i] - DIGIT_RECT_HALFHEIGHT_COLLISION && mouse_y < BranchCurrY[i] - DIGIT_RECT_HALFHEIGHT_COLLISION + DIGIT_RECT_HEIGHT_COLLISION)
 				item_under_mouse = i;
 		if (item_under_mouse == ITEM_UNDER_MOUSE_NONE && mouse_x >= cloud_x - BRANCHES_CLOUD_HALFWIDTH && mouse_x < cloud_x - BRANCHES_CLOUD_HALFWIDTH + BRANCHES_CLOUD_WIDTH && mouse_y >= BRANCHES_CLOUD_Y - BRANCHES_CLOUD_HALFHEIGHT && mouse_y < BRANCHES_CLOUD_Y - BRANCHES_CLOUD_HALFHEIGHT + BRANCHES_CLOUD_HEIGHT)
 			item_under_mouse = ITEM_UNDER_MOUSE_CLOUD;
-		if (item_under_mouse == ITEM_UNDER_MOUSE_NONE && changes_since_current_branch && mouse_x >= BranchCurrX[TOTAL_BOOKMARKS] - DIGIT_RECT_HALFWIDTH && mouse_x < BranchCurrX[TOTAL_BOOKMARKS] - DIGIT_RECT_HALFWIDTH + DIGIT_RECT_WIDTH && mouse_y >= BranchCurrY[TOTAL_BOOKMARKS] - DIGIT_RECT_HALFHEIGHT && mouse_y < BranchCurrY[TOTAL_BOOKMARKS] - DIGIT_RECT_HALFHEIGHT + DIGIT_RECT_HEIGHT)
+		if (item_under_mouse == ITEM_UNDER_MOUSE_NONE && changes_since_current_branch && mouse_x >= BranchCurrX[TOTAL_BOOKMARKS] - DIGIT_RECT_HALFWIDTH_COLLISION && mouse_x < BranchCurrX[TOTAL_BOOKMARKS] - DIGIT_RECT_HALFWIDTH_COLLISION + DIGIT_RECT_WIDTH_COLLISION && mouse_y >= BranchCurrY[TOTAL_BOOKMARKS] - DIGIT_RECT_HALFHEIGHT_COLLISION && mouse_y < BranchCurrY[TOTAL_BOOKMARKS] - DIGIT_RECT_HALFHEIGHT_COLLISION + DIGIT_RECT_HEIGHT_COLLISION)
 			item_under_mouse = TOTAL_BOOKMARKS;
 		if (prev_item_under_mouse != item_under_mouse)
 			must_redraw_branches_tree = true;
diff --git a/src/drivers/win/taseditor/bookmarks.h b/src/drivers/win/taseditor/bookmarks.h
index b41c2cc8..e4a88b7c 100644
--- a/src/drivers/win/taseditor/bookmarks.h
+++ b/src/drivers/win/taseditor/bookmarks.h
@@ -30,10 +30,12 @@ enum COMMANDS
 #define BRANCHES_BITMAP_WIDTH 170
 #define BRANCHES_BITMAP_HEIGHT 145
 #define BRANCHES_ANIMATION_FRAMES 12
-#define BRANCHES_BITMAP_FRAMENUM_X 0
-#define BRANCHES_BITMAP_FRAMENUM_Y 0
-#define BRANCHES_BITMAP_TIME_X 0
+#define BRANCHES_BITMAP_FRAMENUM_X 2
+#define BRANCHES_BITMAP_FRAMENUM_Y 1
+#define BRANCHES_BITMAP_TIME_X 2
 #define BRANCHES_BITMAP_TIME_Y BRANCHES_BITMAP_HEIGHT - 17
+#define BRANCHES_TEXT_SHADOW_COLOR 0xFFFFFF
+#define BRANCHES_TEXT_COLOR 0x7F0000
 // constants for drawing branches tree
 #define BRANCHES_CANVAS_WIDTH 146
 #define BRANCHES_CANVAS_HEIGHT 130
@@ -58,9 +60,13 @@ enum COMMANDS
 #define BLUE_DIGITS_SPRITESHEET_DX DIGIT_BITMAP_WIDTH*TOTAL_BOOKMARKS
 #define MOUSEOVER_DIGITS_SPRITESHEET_DY DIGIT_BITMAP_HEIGHT
 #define DIGIT_RECT_WIDTH 11
+#define DIGIT_RECT_WIDTH_COLLISION (DIGIT_RECT_WIDTH + 2)
 #define DIGIT_RECT_HALFWIDTH DIGIT_RECT_WIDTH/2
+#define DIGIT_RECT_HALFWIDTH_COLLISION (DIGIT_RECT_HALFWIDTH + 1)
 #define DIGIT_RECT_HEIGHT 15
+#define DIGIT_RECT_HEIGHT_COLLISION (DIGIT_RECT_HEIGHT + 2)
 #define DIGIT_RECT_HALFHEIGHT DIGIT_RECT_HEIGHT/2
+#define DIGIT_RECT_HALFHEIGHT_COLLISION (DIGIT_RECT_HALFHEIGHT + 1)
 #define BRANCHES_CLOUD_WIDTH 26
 #define BRANCHES_CLOUD_HALFWIDTH BRANCHES_CLOUD_WIDTH/2
 #define BRANCHES_CLOUD_HEIGHT 15
diff --git a/src/drivers/win/taseditor/piano_roll.cpp b/src/drivers/win/taseditor/piano_roll.cpp
index b3a21177..d08d18be 100644
--- a/src/drivers/win/taseditor/piano_roll.cpp
+++ b/src/drivers/win/taseditor/piano_roll.cpp
@@ -227,6 +227,12 @@ void PIANO_ROLL::init()
 		list_row_height = 14;
 	}
 	ListView_SetItemCountEx(hwndList, 0, LVSICF_NOSCROLL|LVSICF_NOINVALIDATEALL);
+	// find header height
+	RECT wrect;
+	if (GetWindowRect(hwndHeader, &wrect))
+		list_header_height = wrect.bottom - wrect.top;
+	else
+		list_header_height = 20;
 
 	hrmenu = LoadMenu(fceu_hInstance,"TASEDITORCONTEXTMENUS");
 	header_colors.resize(TOTAL_COLUMNS);
@@ -235,6 +241,7 @@ void PIANO_ROLL::init()
 	tme.dwFlags = TME_LEAVE;
 	tme.hwndTrack = hwndHeader;
 	drag_mode = DRAG_MODE_NONE;
+	rbutton_drag_mode = false;
 }
 void PIANO_ROLL::free()
 {
@@ -341,24 +348,30 @@ void PIANO_ROLL::update()
 		if (GetAsyncKeyState(GetSystemMetrics(SM_SWAPBUTTON) ? VK_RBUTTON : VK_LBUTTON) >= 0)
 			FinishDrag();
 	}
-	// also scroll Piano Roll if user is dragging cursor outside
-	if (drag_mode != DRAG_MODE_NONE)
+	if (rbutton_drag_mode)
+	{
+		// check if user released right button
+		if (GetAsyncKeyState(GetSystemMetrics(SM_SWAPBUTTON) ? VK_LBUTTON : VK_RBUTTON) >= 0)
+			rbutton_drag_mode = false;
+	}
+	// scroll Piano Roll if user is dragging cursor outside
+	if (drag_mode != DRAG_MODE_NONE || rbutton_drag_mode)
 	{
 		POINT p;
 		if (GetCursorPos(&p))
 		{
-			int scroll_dx = 0, scroll_dy = 0;
-			RECT wrect;
-			GetWindowRect(hwndList, &wrect);
 			ScreenToClient(hwndList, &p);
-			if (p.x < 0)
-				scroll_dx = p.x;
-			else if (p.x > (wrect.right - wrect.left))
-				scroll_dx = p.x - (wrect.right - wrect.left);
-			if (p.y < 0)
-				scroll_dy = p.y;
-			else if (p.y > (wrect.bottom - wrect.top))
-				scroll_dy = p.y - (wrect.bottom - wrect.top);
+			RECT wrect;
+			GetClientRect(hwndList, &wrect);
+			int scroll_dx = 0, scroll_dy = 0;
+			if (p.x < SCROLLING_BORDER_SIZE)
+				scroll_dx = p.x - SCROLLING_BORDER_SIZE;
+			else if (p.x > (wrect.right - wrect.left - SCROLLING_BORDER_SIZE))
+				scroll_dx = p.x - (wrect.right - wrect.left - SCROLLING_BORDER_SIZE);
+			if (p.y < (list_header_height + SCROLLING_BORDER_SIZE))
+				scroll_dy = p.y - (list_header_height + SCROLLING_BORDER_SIZE);
+			else if (p.y > (wrect.bottom - wrect.top - SCROLLING_BORDER_SIZE))
+				scroll_dy = p.y - (wrect.bottom - wrect.top - SCROLLING_BORDER_SIZE);
 			if (scroll_dx || scroll_dy)
 				ListView_Scroll(hwndList, scroll_dx, scroll_dy);
 		}
@@ -368,8 +381,7 @@ void PIANO_ROLL::update()
 	{
 		case DRAG_MODE_PLAYBACK:
 		{
-			if (!playback.pause_frame)
-				DragPlaybackCursor();
+			DragPlaybackCursor();
 			break;
 		}
 		case DRAG_MODE_MARKER:
@@ -411,8 +423,6 @@ void PIANO_ROLL::update()
 			POINT p;
 			if (GetCursorPos(&p))
 			{
-				RECT wrect;
-				GetWindowRect(hwndList, &wrect);
 				ScreenToClient(hwndList, &p);
 				int drawing_current_x = p.x + GetScrollPos(hwndList, SB_HORZ);
 				int drawing_current_y = p.y + GetScrollPos(hwndList, SB_VERT) * list_row_height;
@@ -521,10 +531,10 @@ void PIANO_ROLL::update()
 				POINT p;
 				if (GetCursorPos(&p))
 				{
-					RECT wrect;
-					GetWindowRect(hwndList, &wrect);
 					ScreenToClient(hwndList, &p);
-					if (p.x >= 0 && p.y >= 0 && p.x < (wrect.right - wrect.left) && p.y < (wrect.bottom - wrect.top))
+					RECT wrect;
+					GetClientRect(hwndList, &wrect);
+					if (p.x >= 0 && p.y >= list_header_height && p.x < (wrect.right - wrect.left) && p.y < (wrect.bottom - wrect.top))
 					{
 						// perform hit test
 						LVHITTESTINFO info;
@@ -1466,11 +1476,22 @@ LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 				if ((int)(piano_roll.vk_control_release_time + GetDoubleClickTime()) > clock())
 					piano_roll.FollowSelection();
 			}
-			// only allow 8 keys
-			if (taseditor_config.keyboard_for_piano_roll && (wParam == VK_LEFT || wParam == VK_UP || wParam == VK_RIGHT || wParam == VK_DOWN || wParam == VK_END || wParam == VK_HOME || wParam == VK_PRIOR || wParam == VK_NEXT))
+			if (taseditor_config.keyboard_for_piano_roll)
 			{
-				piano_roll.must_check_item_under_mouse = true;
-				break;
+				// only allow 8 keys, and change behaviour of Right and Left keys
+				if (wParam == VK_LEFT)
+				{
+					// faster speed of horizontal scrolling, and don't scroll vertically to the selection
+					ListView_Scroll(piano_roll.hwndList, -COLUMN_BUTTON_WIDTH, 0);
+				} else if (wParam == VK_RIGHT)
+				{
+					ListView_Scroll(piano_roll.hwndList, COLUMN_BUTTON_WIDTH, 0);
+				} else if (wParam == VK_UP || wParam == VK_DOWN || wParam == VK_END || wParam == VK_HOME || wParam == VK_PRIOR || wParam == VK_NEXT)
+				{
+					// these 6 keys will be handled by hwndList_oldWndProc
+					piano_roll.must_check_item_under_mouse = true;
+					break;
+				}
 			}
 			return 0;
 		}
@@ -1492,7 +1513,6 @@ LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 			if(column_index == COLUMN_ICONS)
 			{
 				// click on the "icons" column
-				piano_roll.DragPlaybackCursor();
 				if (piano_roll.drag_mode == DRAG_MODE_NONE)
 					piano_roll.drag_mode = DRAG_MODE_PLAYBACK;
 			} else if(column_index == COLUMN_FRAMENUM || column_index == COLUMN_FRAMENUM2)
@@ -1504,11 +1524,7 @@ LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 					if (taseditor_config.deselect_on_doubleclick)
 						selection.ClearSelection();
 					if (taseditor_config.doubleclick_affects_playback)
-					{
 						piano_roll.DragPlaybackCursor();
-						if (piano_roll.drag_mode == DRAG_MODE_NONE)
-							piano_roll.drag_mode = DRAG_MODE_PLAYBACK;
-					}
 				} else
 				{
 					if (row_index >= 0)
@@ -1611,23 +1627,23 @@ LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 			{
 				// Shift + wheel = Playback rewind full(speed)/forward full(speed)
 				if (zDelta < 0)
-					playback.ForwardFull(-zDelta / 120);
+					playback.ForwardFull(-zDelta / WHEEL_DELTA);
 				else if (zDelta > 0)
-					playback.RewindFull(zDelta / 120);
+					playback.RewindFull(zDelta / WHEEL_DELTA);
 			} else if (fwKeys & MK_CONTROL)
 			{
 				// Ctrl + wheel = Selection rewind full(speed)/forward full(speed)
 				if (zDelta < 0)
-					selection.JumpNextMarker(-zDelta / 120);
+					selection.JumpNextMarker(-zDelta / WHEEL_DELTA);
 				else if (zDelta > 0)
-					selection.JumpPrevMarker(zDelta / 120);
+					selection.JumpPrevMarker(zDelta / WHEEL_DELTA);
 			} else if (alt_pressed || fwKeys & MK_RBUTTON)
 			{
 				// Right button + wheel = Alt + wheel = rewind/forward
-				// if both Right button and Alt are pressed, move 2x faster
+				// if both Right button and Alt are pressed, move 4x faster
 				if (alt_pressed && fwKeys & MK_RBUTTON)
 					zDelta *= BOOST_WHEN_BOTH_RIGHTBUTTON_AND_ALT_PRESSED;
-				int destination_frame = currFrameCounter - (zDelta / 120);
+				int destination_frame = currFrameCounter - (zDelta / WHEEL_DELTA);
 				if (destination_frame < 0) destination_frame = 0;
 				int lastCursor = currFrameCounter;
 				playback.jump(destination_frame);
@@ -1642,13 +1658,14 @@ LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 				return SendMessage(history.hwndHistoryList, WM_MOUSEWHEEL_RESENT, wParam, lParam);
 			} else
 			{
-				// normal scrolling
-				CallWindowProc(hwndList_oldWndProc, hWnd, msg, wParam, lParam);
+				// normal scrolling - make it 2x faster than usual
+				CallWindowProc(hwndList_oldWndProc, hWnd, msg, MAKELONG(fwKeys, zDelta * PIANO_ROLL_SCROLLING_BOOST), lParam);
 			}
 			return 0;
 		}
 		case WM_RBUTTONDOWN:
 		case WM_RBUTTONDBLCLK:
+			piano_roll.rbutton_drag_mode = true;
 			if (GetFocus() != hWnd)
 				SetFocus(hWnd);
 			return 0;
@@ -1676,7 +1693,6 @@ LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 				{
 					// user clicked on left border of the Piano Roll
 					// consider this as a "misclick" on Piano Roll's first column
-					piano_roll.DragPlaybackCursor();
 					if (piano_roll.drag_mode == DRAG_MODE_NONE)
 						piano_roll.drag_mode = DRAG_MODE_PLAYBACK;
 					return 0;
@@ -1692,9 +1708,37 @@ LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 		}
 		case LVM_ENSUREVISIBLE:
 		{
+			// Piano Roll probably scrolls
 			piano_roll.must_check_item_under_mouse = true;
 			break;
 		}
+		case WM_VSCROLL:
+		{
+			// fix for known WinXP bug
+			if (LOWORD(wParam) == SB_LINEUP)
+			{
+				ListView_Scroll(piano_roll.hwndList, 0, -piano_roll.list_row_height);
+				return 0;
+			} else if (LOWORD(wParam) == SB_LINEDOWN)
+			{
+				ListView_Scroll(piano_roll.hwndList, 0, piano_roll.list_row_height);
+				return 0;
+			}
+			break;
+		}
+		case WM_HSCROLL:
+		{
+			if (LOWORD(wParam) == SB_LINELEFT)
+			{
+				ListView_Scroll(piano_roll.hwndList, -COLUMN_BUTTON_WIDTH, 0);
+				return 0;
+			} else if (LOWORD(wParam) == SB_LINERIGHT)
+			{
+				ListView_Scroll(piano_roll.hwndList, COLUMN_BUTTON_WIDTH, 0);
+				return 0;
+			}
+			break;
+		}
 
 	}
 	return CallWindowProc(hwndList_oldWndProc, hWnd, msg, wParam, lParam);
diff --git a/src/drivers/win/taseditor/piano_roll.h b/src/drivers/win/taseditor/piano_roll.h
index d7d1d475..75fcd03e 100644
--- a/src/drivers/win/taseditor/piano_roll.h
+++ b/src/drivers/win/taseditor/piano_roll.h
@@ -17,11 +17,15 @@
 #define HEADER_LIGHT_UPDATE_TICK 40	// 25FPS
 #define HEADER_DX_FIX 4
 
+#define PIANO_ROLL_SCROLLING_BOOST 2
 #define BOOST_WHEN_BOTH_RIGHTBUTTON_AND_ALT_PRESSED 4
 
 #define MARKER_DRAG_BOX_ALPHA 175
 #define DRAWING_MIN_LINE_LEN 14		// = min(list_row_width, list_row_height) in pixels
 
+#define SCROLLING_BORDER_SIZE 8		// in pixels
+
+
 enum
 {
 	COLUMN_ICONS,
@@ -176,8 +180,9 @@ public:
 	HWND hwndList, hwndHeader;
 	TRACKMOUSEEVENT tme;
 
+	int list_row_top, list_row_height, list_header_height;
 	unsigned int drag_mode;
-	int list_row_top, list_row_height;
+	bool rbutton_drag_mode;
 	int marker_drag_box_dx, marker_drag_box_dy;
 	int marker_drag_framenum;
 	int drawing_last_x, drawing_last_y;
diff --git a/src/drivers/win/taseditor/playback.cpp b/src/drivers/win/taseditor/playback.cpp
index 3fb42bfa..aa281b9a 100644
--- a/src/drivers/win/taseditor/playback.cpp
+++ b/src/drivers/win/taseditor/playback.cpp
@@ -207,9 +207,8 @@ void PLAYBACK::update()
 		bookmarks.RedrawChangedBookmarks(currFrameCounter);
 		lastCursor = currFrameCounter;
 		piano_roll.FollowPlaybackIfNeeded();
-		if (!turbo)
-			// enforce redrawing now
-			UpdateWindow(piano_roll.hwndList);
+		// enforce redrawing now
+		UpdateWindow(piano_roll.hwndList);
 		// lazy update of "Playback's Marker text"
 		int current_marker = markers_manager.GetMarkerUp(currFrameCounter);
 		if (shown_marker != current_marker)
diff --git a/src/drivers/win/taseditor/popup_display.cpp b/src/drivers/win/taseditor/popup_display.cpp
index 95bff54e..96d7c20d 100644
--- a/src/drivers/win/taseditor/popup_display.cpp
+++ b/src/drivers/win/taseditor/popup_display.cpp
@@ -24,18 +24,19 @@ extern TASEDITOR_WINDOW taseditor_window;
 extern BOOKMARKS bookmarks;
 extern PIANO_ROLL piano_roll;
 extern MARKERS_MANAGER markers_manager;
+extern PLAYBACK playback;
 
 LRESULT CALLBACK ScrBmpWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
 LRESULT APIENTRY MarkerNoteDescrWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
 
 // resources
 char szClassName[] = "ScrBmp";
-char szClassName2[] = "MarketNoteTooltip";
+char szClassName2[] = "MarketNoteDescr";
 
 POPUP_DISPLAY::POPUP_DISPLAY()
 {
 	hwndScrBmp = 0;
-	hwndMarkerNoteTooltip = 0;
+	hwndMarkerNoteDescr = 0;
 	// create BITMAPINFO
 	scr_bmi = (LPBITMAPINFO)malloc(sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD));	// 256 color in palette
 	scr_bmi->bmiHeader.biSize = sizeof(scr_bmi->bmiHeader);
@@ -119,10 +120,10 @@ void POPUP_DISPLAY::reset()
 		DestroyWindow(hwndScrBmp);
 		hwndScrBmp = 0;
 	}
-	if (hwndMarkerNoteTooltip)
+	if (hwndMarkerNoteDescr)
 	{
-		DestroyWindow(hwndMarkerNoteTooltip);
-		hwndMarkerNoteTooltip = 0;
+		DestroyWindow(hwndMarkerNoteDescr);
+		hwndMarkerNoteDescr = 0;
 	}
 }
 
@@ -141,19 +142,22 @@ void POPUP_DISPLAY::update()
 				RedrawScreenshotBitmap();
 				ShowWindow(hwndScrBmp, SW_SHOWNA);
 			}
-			if (taseditor_config.show_branch_descr && !hwndMarkerNoteTooltip)
+			if (taseditor_config.show_branch_descr && !hwndMarkerNoteDescr)
 			{
-				hwndMarkerNoteTooltip = CreateWindowEx(WS_EX_LAYERED | WS_EX_TRANSPARENT, szClassName2, szClassName2, WS_POPUP, taseditor_config.wndx + tooltip_x, taseditor_config.wndy + tooltip_y, MARKER_NOTE_TOOLTIP_WIDTH, MARKER_NOTE_TOOLTIP_HEIGHT, taseditor_window.hwndTasEditor, NULL, fceu_hInstance, NULL);
-				ChangeTooltipText();
-				ShowWindow(hwndMarkerNoteTooltip, SW_SHOWNA);
+				RECT wrect;
+				GetWindowRect(playback.hwndPlaybackMarkerEdit, &wrect);
+				descr_x = scr_bmp_x + (SCREENSHOT_WIDTH - (wrect.right - wrect.left)) / 2;
+				hwndMarkerNoteDescr = CreateWindowEx(WS_EX_LAYERED | WS_EX_TRANSPARENT, szClassName2, szClassName2, WS_POPUP, taseditor_config.wndx + descr_x, taseditor_config.wndy + descr_y, wrect.right - wrect.left, wrect.bottom - wrect.top, taseditor_window.hwndTasEditor, NULL, fceu_hInstance, NULL);
+				ChangeDescrText();
+				ShowWindow(hwndMarkerNoteDescr, SW_SHOWNA);
 			}
-			// change screenshot_bitmap pic and tooltip text if needed
+			// change screenshot_bitmap pic and description text if needed
 			if (screenshot_currently_shown != bookmarks.item_under_mouse)
 			{
 				if (taseditor_config.show_branch_screenshots)
 					ChangeScreenshotBitmap();
 				if (taseditor_config.show_branch_descr)
-					ChangeTooltipText();
+					ChangeDescrText();
 				screenshot_currently_shown = bookmarks.item_under_mouse;
 			}
 			if (scr_bmp_phase < SCR_BMP_PHASE_MAX)
@@ -167,10 +171,10 @@ void POPUP_DISPLAY::update()
 					SetLayeredWindowAttributes(hwndScrBmp, 0, (255 * phase_alpha) / SCR_BMP_PHASE_ALPHA_MAX, LWA_ALPHA);
 					UpdateLayeredWindow(hwndScrBmp, 0, 0, 0, 0, 0, 0, &blend, ULW_ALPHA);
 				}
-				if (hwndMarkerNoteTooltip)
+				if (hwndMarkerNoteDescr)
 				{
-					SetLayeredWindowAttributes(hwndMarkerNoteTooltip, 0, (255 * phase_alpha) / SCR_BMP_PHASE_ALPHA_MAX, LWA_ALPHA);
-					UpdateLayeredWindow(hwndMarkerNoteTooltip, 0, 0, 0, 0, 0, 0, &blend, ULW_ALPHA);
+					SetLayeredWindowAttributes(hwndMarkerNoteDescr, 0, (255 * phase_alpha) / SCR_BMP_PHASE_ALPHA_MAX, LWA_ALPHA);
+					UpdateLayeredWindow(hwndMarkerNoteDescr, 0, 0, 0, 0, 0, 0, &blend, ULW_ALPHA);
 				}
 			}
 		} else
@@ -188,10 +192,10 @@ void POPUP_DISPLAY::update()
 					SetLayeredWindowAttributes(hwndScrBmp, 0, (255 * phase_alpha) / SCR_BMP_PHASE_ALPHA_MAX, LWA_ALPHA);
 					UpdateLayeredWindow(hwndScrBmp, 0, 0, 0, 0, 0, 0, &blend, ULW_ALPHA);
 				}
-				if (hwndMarkerNoteTooltip)
+				if (hwndMarkerNoteDescr)
 				{
-					SetLayeredWindowAttributes(hwndMarkerNoteTooltip, 0, (255 * phase_alpha) / SCR_BMP_PHASE_ALPHA_MAX, LWA_ALPHA);
-					UpdateLayeredWindow(hwndMarkerNoteTooltip, 0, 0, 0, 0, 0, 0, &blend, ULW_ALPHA);
+					SetLayeredWindowAttributes(hwndMarkerNoteDescr, 0, (255 * phase_alpha) / SCR_BMP_PHASE_ALPHA_MAX, LWA_ALPHA);
+					UpdateLayeredWindow(hwndMarkerNoteDescr, 0, 0, 0, 0, 0, 0, &blend, ULW_ALPHA);
 				}
 			} else
 			{
@@ -202,10 +206,10 @@ void POPUP_DISPLAY::update()
 					DestroyWindow(hwndScrBmp);
 					hwndScrBmp = 0;
 				}
-				if (hwndMarkerNoteTooltip)
+				if (hwndMarkerNoteDescr)
 				{
-					DestroyWindow(hwndMarkerNoteTooltip);
-					hwndMarkerNoteTooltip = 0;
+					DestroyWindow(hwndMarkerNoteDescr);
+					hwndMarkerNoteDescr = 0;
 				}
 			}
 		}
@@ -232,14 +236,14 @@ void POPUP_DISPLAY::RedrawScreenshotBitmap()
 	if (temp_bmp && temp_bmp != scr_bmp)
 		DeleteObject(temp_bmp);
 }
-void POPUP_DISPLAY::ChangeTooltipText()
+void POPUP_DISPLAY::ChangeDescrText()
 {
 	// retrieve info from the pointed bookmark's markers
 	int frame = bookmarks.bookmarks_array[bookmarks.item_under_mouse].snapshot.jump_frame;
 	int marker_id = markers_manager.GetMarkerUp(bookmarks.bookmarks_array[bookmarks.item_under_mouse].snapshot.GetMarkers(), frame);
 	char new_text[MAX_NOTE_LEN];
 	strcpy(new_text, markers_manager.GetNote(bookmarks.bookmarks_array[bookmarks.item_under_mouse].snapshot.GetMarkers(), marker_id).c_str());
-	SetWindowText(marker_note_tooltip, new_text);
+	SetWindowText(marker_note_descr, new_text);
 }
 
 void POPUP_DISPLAY::ParentWindowMoved()
@@ -250,13 +254,15 @@ void POPUP_DISPLAY::ParentWindowMoved()
 	GetWindowRect(GetDlgItem(taseditor_window.hwndTasEditor, IDC_BOOKMARKS_BOX), &temp_rect);
 	scr_bmp_x = temp_rect.left - SCREENSHOT_WIDTH - SCR_BMP_DX - parent_rect.left;
 	scr_bmp_y = (temp_rect.bottom - SCREENSHOT_HEIGHT) - parent_rect.top;
-	tooltip_x = scr_bmp_x + (SCREENSHOT_WIDTH - MARKER_NOTE_TOOLTIP_WIDTH) / 2;
-	tooltip_y = scr_bmp_y + SCREENSHOT_HEIGHT + SCR_BMP_TOOLTIP_GAP;
+	RECT wrect;
+	GetWindowRect(playback.hwndPlaybackMarkerEdit, &wrect);
+	descr_x = scr_bmp_x + (SCREENSHOT_WIDTH - (wrect.right - wrect.left)) / 2;
+	descr_y = scr_bmp_y + SCREENSHOT_HEIGHT + SCR_BMP_DESCR_GAP;
 	// if popup windows are currently shown, update their positions
 	if (hwndScrBmp)
 		SetWindowPos(hwndScrBmp, 0, taseditor_config.wndx + scr_bmp_x, taseditor_config.wndy + scr_bmp_y, 0, 0, SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
-	if (hwndMarkerNoteTooltip)
-		SetWindowPos(hwndMarkerNoteTooltip, 0, taseditor_config.wndx + tooltip_x, taseditor_config.wndy + tooltip_y, 0, 0, SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
+	if (hwndMarkerNoteDescr)
+		SetWindowPos(hwndMarkerNoteDescr, 0, taseditor_config.wndx + descr_x, taseditor_config.wndy + descr_y, 0, 0, SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
 }
 // ----------------------------------------------------------------------------------------
 LRESULT APIENTRY ScrBmpWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
@@ -282,8 +288,10 @@ LRESULT APIENTRY MarkerNoteDescrWndProc(HWND hwnd, UINT message, WPARAM wParam,
 		case WM_CREATE:
 		{
 			// create static text field
-			popup_display.marker_note_tooltip = CreateWindow(WC_STATIC, NULL, WS_CHILD | WS_VISIBLE | SS_CENTER | SS_SUNKEN, 1, 1, MARKER_NOTE_TOOLTIP_WIDTH - 2, MARKER_NOTE_TOOLTIP_HEIGHT - 2, hwnd, NULL, NULL, NULL);
-			SendMessage(popup_display.marker_note_tooltip, WM_SETFONT, (WPARAM)piano_roll.hMarkersEditFont, 0);
+			RECT wrect;
+			GetWindowRect(playback.hwndPlaybackMarkerEdit, &wrect);
+			popup_display.marker_note_descr = CreateWindow(WC_STATIC, NULL, WS_CHILD | WS_VISIBLE | SS_CENTER | SS_ENDELLIPSIS | SS_SUNKEN, 1, 1, wrect.right - wrect.left - 2, wrect.bottom - wrect.top - 2, hwnd, NULL, NULL, NULL);
+			SendMessage(popup_display.marker_note_descr, WM_SETFONT, (WPARAM)piano_roll.hMarkersEditFont, 0);
 			return 0;
 		}
 		default:
diff --git a/src/drivers/win/taseditor/popup_display.h b/src/drivers/win/taseditor/popup_display.h
index 69065c72..086084a6 100644
--- a/src/drivers/win/taseditor/popup_display.h
+++ b/src/drivers/win/taseditor/popup_display.h
@@ -4,10 +4,7 @@
 #define SCR_BMP_PHASE_ALPHA_MAX 8
 #define SCR_BMP_DX 7
 
-#define SCR_BMP_TOOLTIP_GAP 2
-
-#define MARKER_NOTE_TOOLTIP_WIDTH 360
-#define MARKER_NOTE_TOOLTIP_HEIGHT 20
+#define SCR_BMP_DESCR_GAP 2
 
 #define DISPLAY_UPDATE_TICK 40		// update at 25FPS
 
@@ -22,12 +19,12 @@ public:
 
 	void ChangeScreenshotBitmap();
 	void RedrawScreenshotBitmap();
-	void ChangeTooltipText();
+	void ChangeDescrText();
 
 	void ParentWindowMoved();
 
 	int screenshot_currently_shown;
-	HWND hwndScrBmp, scr_bmp_pic, hwndMarkerNoteTooltip, marker_note_tooltip;
+	HWND hwndScrBmp, scr_bmp_pic, hwndMarkerNoteDescr, marker_note_descr;
 	
 private:
 	int scr_bmp_x;
@@ -35,8 +32,8 @@ private:
 	int scr_bmp_phase;
 	int next_update_time;
 
-	int tooltip_x;
-	int tooltip_y;
+	int descr_x;
+	int descr_y;
 	
 	WNDCLASSEX wincl1, wincl2;
 	BLENDFUNCTION blend;
diff --git a/src/drivers/win/taseditor/taseditor_window.cpp b/src/drivers/win/taseditor/taseditor_window.cpp
index c0a48fa1..c17a5ed2 100644
--- a/src/drivers/win/taseditor/taseditor_window.cpp
+++ b/src/drivers/win/taseditor/taseditor_window.cpp
@@ -1330,7 +1330,6 @@ BOOL CALLBACK WndprocTasEditor(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara
 				&& y > window_items[PIANOROLL_IN_WINDOWITEMS].y
 				&& y < window_items[PIANOROLL_IN_WINDOWITEMS].y + (wrect.bottom - wrect.top))
 			{
-				piano_roll.DragPlaybackCursor();
 				if (piano_roll.drag_mode == DRAG_MODE_NONE)
 					piano_roll.drag_mode = DRAG_MODE_PLAYBACK;
 			}