diff -r 3831881bf6aa modules/controls/src/main/java/com/sun/javafx/scene/control/skin/MenuBarSkin.java
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/MenuBarSkin.java	Mon May 04 13:52:33 2015 -0700
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/MenuBarSkin.java	Tue May 05 11:11:27 2015 +0200
@@ -264,8 +264,8 @@
                         // RT-18859: Doing nothing for space and enter
                         if (control.getScene().getWindow().isFocused()) {
                             if (focusedMenuIndex != -1 && openMenu != null) {
-                                openMenu = getSkinnable().getMenus().get(focusedMenuIndex);
-                                if (!isMenuEmpty(getSkinnable().getMenus().get(focusedMenuIndex))) {
+                                openMenu = getMenu(focusedMenuIndex);
+                                if (!isMenuEmpty(openMenu)) {
                                     openMenu.show();
                                 }
                                 event.consume();
@@ -288,7 +288,7 @@
                 unSelectMenus();
                 menuModeStart(0);
                 openMenuButton = ((MenuBarButton)container.getChildren().get(0));
-                openMenu = getSkinnable().getMenus().get(0);
+                openMenu = getMenu(0);
                 openMenuButton.setHover();
             } else {
                 unSelectMenus();
@@ -423,7 +423,7 @@
                             unSelectMenus();
                             menuModeStart(0);
                             openMenuButton = ((MenuBarButton)container.getChildren().get(0));
-                            openMenu = getSkinnable().getMenus().get(0);
+                            openMenu = getMenu(0);
                             openMenuButton.setHover();
                         }
                         else {
@@ -741,8 +741,8 @@
 //                        case ENTER:
 //                            if (menuButton.getScene().getWindow().isFocused()) {
 //                                if (focusedMenuIndex != -1) {
-//                                    if (!isMenuEmpty(getSkinnable().getMenus().get(focusedMenuIndex))) {
-//                                        openMenu = getSkinnable().getMenus().get(focusedMenuIndex);
+//                                    if (!isMenuEmpty(getMenu(focusedMenuIndex))) {
+//                                        openMenu = getMenu(focusedMenuIndex);
 //                                        openMenu.show();
 //                                    } else {
 //                                        openMenu = null;
@@ -996,10 +996,11 @@
         } else {
             focusedMenuIndex--;
         }
-        // RT-19359
-        if (getSkinnable().getMenus().get(focusedMenuIndex).isDisable()) return findPreviousSibling();
+        Menu menu = getMenu(focusedMenuIndex);
+        // RT_19359
+        if (menu.isDisable()) return findPreviousSibling();
         clearMenuButtonHover();
-        return getSkinnable().getMenus().get(focusedMenuIndex);
+        return menu;
     }
 
     private Menu findNextSibling() {
@@ -1009,12 +1010,18 @@
         } else {
             focusedMenuIndex++;
         }
+        Menu menu = getMenu(focusedMenuIndex);
         // RT_19359
-        if (getSkinnable().getMenus().get(focusedMenuIndex).isDisable()) return findNextSibling();
+        if (menu.isDisable()) return findNextSibling();
         clearMenuButtonHover();
-        return getSkinnable().getMenus().get(focusedMenuIndex);
+        return menu;
     }
-
+    
+    private Menu getMenu(int idx) {
+        // instead of calling getSkinnable().getMenus().get(idx), we refer to the container, which will only contain visible menus
+        return ((MenuBarButton) container.getChildren().get(idx)).menu; 
+    }
+    
     private void updateFocusedIndex() {
         int index = 0;
         for(Node n : container.getChildren()) {
diff -r 3831881bf6aa modules/controls/src/test/java/javafx/scene/control/MenuBarTest.java
--- a/modules/controls/src/test/java/javafx/scene/control/MenuBarTest.java	Mon May 04 13:52:33 2015 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/MenuBarTest.java	Tue May 05 11:11:27 2015 +0200
@@ -28,10 +28,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-
-import javafx.application.Application;
-import javafx.event.Event;
-import javafx.event.EventHandler;
 import javafx.scene.Node;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
@@ -42,11 +38,11 @@
 import javafx.stage.Stage;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import com.sun.javafx.pgstub.StubToolkit;
 import com.sun.javafx.scene.control.infrastructure.KeyEventFirer;
+import com.sun.javafx.scene.control.infrastructure.KeyModifier;
 import com.sun.javafx.scene.control.infrastructure.MouseEventGenerator;
 import com.sun.javafx.scene.control.skin.ContextMenuContent;
 import com.sun.javafx.scene.control.skin.MenuBarMenuButtonRetriever;
@@ -308,7 +304,7 @@
         assertEquals(menu.showingProperty().get(), true);
     }
     
-    @Test public void testKeyNavigationWithDisabledMenuItem() {
+    @Test public void testKeyNavigationWithDisabledMenu() {
         VBox root = new VBox();
         Menu menu1 = new Menu("Menu1");
         Menu menu2 = new Menu("Menu2");
@@ -349,6 +345,82 @@
         assertTrue(menu3.isShowing());
     }
     
+    @Test public void testKeyNavigationWithInvisibleMenu() {
+        VBox root = new VBox();
+        Menu menu1 = new Menu("Menu1");
+        Menu menu2 = new Menu("Menu2");
+        Menu menu3 = new Menu("Menu3");
+        
+        MenuItem menuItem1 = new MenuItem("MenuItem1");
+        MenuItem menuItem2 = new MenuItem("MenuItem2");
+        MenuItem menuItem3 = new MenuItem("MenuItem3");
+
+        menu1.getItems().add(menuItem1);
+        menu2.getItems().add(menuItem2);
+        menu3.getItems().add(menuItem3);
+        
+        menuBar.getMenus().addAll(menu1, menu2, menu3);
+        menu2.setVisible(false);
+        
+        root.getChildren().addAll(menuBar);
+        startApp(root);
+        tk.firePulse();
+        
+        MenuBarSkin skin = (MenuBarSkin)menuBar.getSkin();
+        assertTrue(skin != null);
+        
+        double xval = (menuBar.localToScene(menuBar.getLayoutBounds())).getMinX();
+        double yval = (menuBar.localToScene(menuBar.getLayoutBounds())).getMinY();
+   
+        MenuButton mb = MenuBarMenuButtonRetriever.getNodeForMenu(skin, 0);
+        mb.getScene().getWindow().requestFocus();
+        scene.impl_processMouseEvent(
+            MouseEventGenerator.generateMouseEvent(MouseEvent.MOUSE_PRESSED, xval+20, yval+20));
+        scene.impl_processMouseEvent(
+            MouseEventGenerator.generateMouseEvent(MouseEvent.MOUSE_RELEASED, xval+20, yval+20));
+        assertTrue(menu1.isShowing());
+        
+        KeyEventFirer keyboard = new KeyEventFirer(mb.getScene());
+        keyboard.doKeyPress(KeyCode.RIGHT);
+        tk.firePulse(); 
+        assertTrue(menu3.isShowing());
+    }
+    
+    @Test public void testKeyNavigationWithInvisibleFirstMenu() {
+        VBox root = new VBox();
+        Menu menu1 = new Menu("Menu1");
+        Menu menu2 = new Menu("Menu2");
+        Menu menu3 = new Menu("Menu3");
+        
+        MenuItem menuItem1 = new MenuItem("MenuItem1");
+        MenuItem menuItem2 = new MenuItem("MenuItem2");
+        MenuItem menuItem3 = new MenuItem("MenuItem3");
+
+        menu1.getItems().add(menuItem1);
+        menu2.getItems().add(menuItem2);
+        menu3.getItems().add(menuItem3);
+        
+        menuBar.getMenus().addAll(menu1, menu2, menu3);
+        menu1.setVisible(false);
+        
+        root.getChildren().addAll(menuBar);
+        startApp(root);
+        tk.firePulse();
+        
+        MenuBarSkin skin = (MenuBarSkin)menuBar.getSkin();
+        assertTrue(skin != null);
+        root.getScene().getWindow().requestFocus();
+        
+        KeyEventFirer keyboard = new KeyEventFirer(menuBar);
+        keyboard.doKeyPress(KeyCode.ALT, KeyModifier.ALT);
+        tk.firePulse();
+        
+        keyboard.doKeyPress(KeyCode.DOWN);
+        tk.firePulse();
+        
+        assertTrue(menu2.isShowing());
+    }
+    
     
      @Test public void testMenuOnShowingEventFiringWithMenuHideOperation() {
         VBox root = new VBox();
