diff -uNrp a/keymap.c b/keymap.c
--- a/keymap.c	2009-11-02 17:36:12.000000000 +0300
+++ b/keymap.c	2012-04-21 14:17:24.000000000 +0400
@@ -197,15 +197,17 @@ static const struct _vte_keymap_entry _v
 static const struct _vte_keymap_entry _vte_keymap_GDK_Return[] = {
 	{cursor_all, keypad_all, fkey_all,
 	 VTE_META_MASK, _VTE_CAP_ESC "\n", 2, X_NULL},
-	{cursor_all, keypad_all, fkey_all, GDK_CONTROL_MASK, "\n", 1, X_NULL},
+//	{cursor_all, keypad_all, fkey_all, GDK_CONTROL_MASK, "\n", 1, X_NULL},
+	{cursor_all, keypad_all, fkey_all, GDK_CONTROL_MASK, _VTE_CAP_ESC "\n", 2, X_NULL},
 	{cursor_all, keypad_all, fkey_all, 0, "\r", 1, X_NULL},
 	{cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, X_NULL},
 };
 
 static const struct _vte_keymap_entry _vte_keymap_GDK_Escape[] = {
-	{cursor_all, keypad_all, fkey_all,
-	 VTE_META_MASK, _VTE_CAP_ESC _VTE_CAP_ESC, 2, X_NULL},
-	{cursor_all, keypad_all, fkey_all, 0, _VTE_CAP_ESC, 1, X_NULL},
+//	{cursor_all, keypad_all, fkey_all,
+//	 VTE_META_MASK, _VTE_CAP_ESC _VTE_CAP_ESC, 2, X_NULL},
+//	{cursor_all, keypad_all, fkey_all, 0, _VTE_CAP_ESC, 1, X_NULL},
+	{cursor_all, keypad_all, fkey_all, 0, _VTE_CAP_ESC _VTE_CAP_ESC, 2, X_NULL},
 	{cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, X_NULL},
 };
 
@@ -280,6 +282,9 @@ static const struct _vte_keymap_entry _v
 	{cursor_all, keypad_all, fkey_vt220, 0, _VTE_CAP_CSI "1~", -1, X_NULL},
 	{cursor_all, keypad_all, fkey_hp, 0, _VTE_CAP_ESC "h", -1, X_NULL},
 	{cursor_all, keypad_all, fkey_nothpvt, 0, X_NULL, 0, "kh"},
+	{cursor_all, keypad_all, fkey_all, VTE_META_MASK, _VTE_CAP_ESC "[1;3H", -1, X_NULL},
+	{cursor_all, keypad_all, fkey_all, GDK_SHIFT_MASK, _VTE_CAP_ESC "[1;2H", -1, X_NULL},
+	{cursor_all, keypad_all, fkey_all, GDK_CONTROL_MASK, _VTE_CAP_ESC "[1;5H", -1, X_NULL},
 	{cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, X_NULL},
 };
 
@@ -287,6 +292,9 @@ static const struct _vte_keymap_entry _v
 	{cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, "@7"},
 	{cursor_all, keypad_all, fkey_vt220, 0, _VTE_CAP_CSI "4~", -1, X_NULL},
 	{cursor_all, keypad_all, fkey_notvt220, 0, X_NULL, 0, "@7"},
+	{cursor_all, keypad_all, fkey_all, VTE_META_MASK, _VTE_CAP_ESC "[1;3F", -1, X_NULL},
+	{cursor_all, keypad_all, fkey_all, GDK_SHIFT_MASK, _VTE_CAP_ESC "[1;2F", -1, X_NULL},
+	{cursor_all, keypad_all, fkey_all, GDK_CONTROL_MASK, _VTE_CAP_ESC "[1;5F", -1, X_NULL},
 	{cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, X_NULL},
 };
 
@@ -303,6 +311,14 @@ static const struct _vte_keymap_entry _v
 	{cursor_all, keypad_all, fkey_hp, 0, _VTE_CAP_ESC "S", -1, X_NULL},
 	{cursor_all, keypad_all, fkey_notsunhp, 0, _VTE_CAP_CSI "6~", -1, X_NULL},
 	{cursor_all, keypad_all, fkey_sun, 0, _VTE_CAP_CSI "6z", -1, X_NULL},
+//  All is adjusted already. The way is not clear, but still. 
+//  The only problem was - to force submitting \e-seq. to the child application,
+//  this solved in vte.c by commenting assingments "handled = TRUE"
+//  GDK_SHIFT_MASK | GDK_CONTROL_MASK | VTE_META_MASK | VTE_NUMLOCK_MASK - masks possible
+//  {cursor_all, keypad_all, fkey_all, 0, _VTE_CAP_CSI "6~", -1, X_NULL},
+//	{cursor_all, keypad_all, fkey_all, GDK_CONTROL_MASK, _VTE_CAP_CSI "6~", -1, X_NULL},
+//	{cursor_all, keypad_all, fkey_all, GDK_SHIFT_MASK, _VTE_CAP_CSI "6~", -1, X_NULL},
+//	{cursor_app, keypad_all, fkey_all, VTE_META_MASK, _VTE_CAP_ESC "6~", -1, X_NULL},
 	{cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, X_NULL},
 };
 
@@ -1409,7 +1425,7 @@ _vte_keymap_key_add_key_modifiers(guint 
 		/* SS3 should have no modifiers so make it CSI instead. See
 		 * http://cvsweb.xfree86.org/cvsweb/xc/programs/xterm/input.c.diff?r1=3.57&r2=3.58
 		 */
-		if (cursor_app_mode &&
+		if ( /* cursor_app_mode && */
 			g_str_has_prefix(nnormal, _VTE_CAP_SS3)
 			&& is_cursor_key(keyval)) {
 			nnormal[1] = '[';
diff -uNrp a/vte.c b/vte.c
--- a/vte.c	2012-04-02 21:05:18.000000000 +0400
+++ b/vte.c	2012-04-21 11:41:09.000000000 +0400
@@ -5115,21 +5115,25 @@ vte_terminal_key_press(GtkWidget *widget
 		/* Keypad/motion keys. */
 		case GDK_KP_Up:
 		case GDK_Up:
-			if (modifiers & GDK_CONTROL_MASK 
-                            && modifiers & GDK_SHIFT_MASK) {
+//			if (modifiers & GDK_CONTROL_MASK 
+//                            && modifiers & GDK_SHIFT_MASK) {
+			if (modifiers & GDK_SHIFT_MASK) {
 				vte_terminal_scroll_lines(terminal, -1);
 				scrolled = TRUE;
-				handled = TRUE;
+//				handled = TRUE;
 				suppress_meta_esc = TRUE;
 			}
 			break;
 		case GDK_KP_Down:
 		case GDK_Down:
-			if (modifiers & GDK_CONTROL_MASK
-                            && modifiers & GDK_SHIFT_MASK) {
+//			if (modifiers & GDK_CONTROL_MASK
+//                            && modifiers & GDK_SHIFT_MASK) {
+//              Is changed as Ctrl+Shift is used often for lang switching
+			if (modifiers & GDK_SHIFT_MASK) {
 				vte_terminal_scroll_lines(terminal, 1);
 				scrolled = TRUE;
-				handled = TRUE;
+//              Next string suppress control sequence feeding for child application
+//				handled = TRUE;
 				suppress_meta_esc = TRUE;
 			}
 			break;
@@ -5138,7 +5142,8 @@ vte_terminal_key_press(GtkWidget *widget
 			if (modifiers & GDK_SHIFT_MASK) {
 				vte_terminal_scroll_pages(terminal, -1);
 				scrolled = TRUE;
-				handled = TRUE;
+//              Next string suppress control sequence feeding for child application
+//				handled = TRUE;
 				suppress_meta_esc = TRUE;
 			}
 			break;
@@ -5147,7 +5152,8 @@ vte_terminal_key_press(GtkWidget *widget
 			if (modifiers & GDK_SHIFT_MASK) {
 				vte_terminal_scroll_pages(terminal, 1);
 				scrolled = TRUE;
-				handled = TRUE;
+//              Next string suppress control sequence feeding for child application
+//				handled = TRUE;
 				suppress_meta_esc = TRUE;
 			}
 			break;
@@ -5156,7 +5162,8 @@ vte_terminal_key_press(GtkWidget *widget
 			if (modifiers & GDK_SHIFT_MASK) {
 				vte_terminal_maybe_scroll_to_top(terminal);
 				scrolled = TRUE;
-				handled = TRUE;
+//              Next string suppress control sequence feeding for child application
+//				handled = TRUE;
 			}
 			break;
 		case GDK_KP_End:
@@ -5164,7 +5171,8 @@ vte_terminal_key_press(GtkWidget *widget
 			if (modifiers & GDK_SHIFT_MASK) {
 				vte_terminal_maybe_scroll_to_bottom(terminal);
 				scrolled = TRUE;
-				handled = TRUE;
+//              Next string suppress control sequence feeding for child application
+//				handled = TRUE;
 			}
 			break;
 		/* Let Shift +/- tweak the font, like XTerm does. */
@@ -10584,6 +10592,7 @@ vte_terminal_paint_cursor(VteTerminal *t
 
                         line_height = (int) (((float) width) * terminal->pvt->cursor_aspect_ratio + 0.5);
                         line_height = CLAMP (line_height, VTE_LINE_WIDTH, height);
+                        line_height += 1;
 
 			vte_terminal_fill_rectangle(terminal, &terminal->pvt->palette[back],
 						     x, y + height - line_height,
