diff --git a/batik-gvt/src/main/java/org/apache/batik/gvt/event/AWTEventDispatcher.java b/batik-gvt/src/main/java/org/apache/batik/gvt/event/AWTEventDispatcher.java
index e4032cb..abc49a8 100644
--- a/batik-gvt/src/main/java/org/apache/batik/gvt/event/AWTEventDispatcher.java
+++ b/batik-gvt/src/main/java/org/apache/batik/gvt/event/AWTEventDispatcher.java
@@ -104,7 +104,7 @@
     private int nodeIncrementEventModifiers = 0;
     private int nodeDecrementEventID = KeyEvent.KEY_PRESSED;
     private int nodeDecrementEventCode = KeyEvent.VK_TAB;
-    private int nodeDecrementEventModifiers = InputEvent.SHIFT_MASK;
+    private int nodeDecrementEventModifiers = InputEvent.SHIFT_DOWN_MASK;
 
     /**
      * Constructs a new event dispatcher.
@@ -719,7 +719,7 @@
         if (e instanceof KeyEvent) {
             nodeIncrementEventCode = ((KeyEvent) e).getKeyCode();
         }
-        nodeIncrementEventModifiers = e.getModifiers();
+        nodeIncrementEventModifiers = e.getModifiersEx();
     }
 
     /**
@@ -733,7 +733,7 @@
         if (e instanceof KeyEvent) {
             nodeDecrementEventCode = ((KeyEvent) e).getKeyCode();
         }
-        nodeDecrementEventModifiers = e.getModifiers();
+        nodeDecrementEventModifiers = e.getModifiersEx();
     }
 
     /**
@@ -755,7 +755,7 @@
         }
 
         // here: it was not a KeyEvent at all OR a KeyEvent with nodeIncrementEventCode
-        if ((e.getModifiers() & nodeIncrementEventModifiers) == 0) {
+        if ((e.getModifiersEx() & nodeIncrementEventModifiers) == 0) {
             // no nodeIncrementEventModifiers were set: false
             return false;
         }
@@ -782,7 +782,7 @@
         }
 
         // here: it was not a KeyEvent at all OR a KeyEvent with nodeIncrementEventCode
-        if ((e.getModifiers() & nodeDecrementEventModifiers) == 0) {
+        if ((e.getModifiersEx() & nodeDecrementEventModifiers) == 0) {
             // no nodeDecrementEventModifiers were set: false
             return false;
         }
diff --git a/batik-gvt/src/main/java/org/apache/batik/gvt/event/GraphicsNodeInputEvent.java b/batik-gvt/src/main/java/org/apache/batik/gvt/event/GraphicsNodeInputEvent.java
index 4931241..b83d1c6 100644
--- a/batik-gvt/src/main/java/org/apache/batik/gvt/event/GraphicsNodeInputEvent.java
+++ b/batik-gvt/src/main/java/org/apache/batik/gvt/event/GraphicsNodeInputEvent.java
@@ -33,27 +33,27 @@
     /**
      * The shift key modifier constant.
      */
-    public static final int SHIFT_MASK = InputEvent.SHIFT_MASK;
+    public static final int SHIFT_MASK = InputEvent.SHIFT_DOWN_MASK;
 
     /**
      * The control key modifier constant.
      */
-    public static final int CTRL_MASK = InputEvent.CTRL_MASK;
+    public static final int CTRL_MASK = InputEvent.CTRL_DOWN_MASK;
 
     /**
      * The meta key modifier constant.
      */
-    public static final int META_MASK = InputEvent.META_MASK;
+    public static final int META_MASK = InputEvent.META_DOWN_MASK;
 
     /**
      * The alt key modifier constant.
      */
-    public static final int ALT_MASK = InputEvent.ALT_MASK;
+    public static final int ALT_MASK = InputEvent.ALT_DOWN_MASK;
 
     /**
      * The alt-graph key modifier constant.
      */
-    public static final int ALT_GRAPH_MASK = InputEvent.ALT_GRAPH_MASK;
+    public static final int ALT_GRAPH_MASK = InputEvent.ALT_GRAPH_DOWN_MASK;
 
     /**
      * The mouse button1 modifier constant.
@@ -134,7 +134,7 @@
                                      int lockState) {
         super(source, evt.getID());
         this.when = evt.getWhen();
-        this.modifiers = evt.getModifiers();
+        this.modifiers = evt.getModifiersEx();
         this.lockState = lockState;
     }
 
diff --git a/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java b/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java
index 3640879..a8d6d0b 100644
--- a/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java
+++ b/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java
@@ -22,7 +22,6 @@
 import java.awt.Color;
 import java.awt.Cursor;
 import java.awt.Dimension;
-import java.awt.Event;
 import java.awt.EventQueue;
 import java.awt.FileDialog;
 import java.awt.Font;
@@ -32,6 +31,7 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
+import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
@@ -620,11 +620,11 @@
                       cMap.get(JSVGCanvas.ZOOM_OUT_ACTION));
 
         listeners.put(PREVIOUS_TRANSFORM_ACTION, previousTransformAction);
-        key = KeyStroke.getKeyStroke(KeyEvent.VK_K, KeyEvent.CTRL_MASK);
+        key = KeyStroke.getKeyStroke(KeyEvent.VK_K, KeyEvent.CTRL_DOWN_MASK);
         imap.put(key, previousTransformAction);
 
         listeners.put(NEXT_TRANSFORM_ACTION, nextTransformAction);
-        key = KeyStroke.getKeyStroke(KeyEvent.VK_L, KeyEvent.CTRL_MASK);
+        key = KeyStroke.getKeyStroke(KeyEvent.VK_L, KeyEvent.CTRL_DOWN_MASK);
         imap.put(key, nextTransformAction);
 
         listeners.put(USE_STYLESHEET_ACTION, useStylesheetAction);
@@ -1026,7 +1026,7 @@
             menu.getItem(3).setText
                 (Resources.getString("Close.text")); // Exit -> "Close"
             menu.getItem(3).setAccelerator
-                (KeyStroke.getKeyStroke(KeyEvent.VK_W, Event.CTRL_MASK));
+                (KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_DOWN_MASK));
 
             debugGui.setSize(600, 460);
             debugGui.pack();
diff --git a/batik-swing/src/main/java/org/apache/batik/swing/JSVGCanvas.java b/batik-swing/src/main/java/org/apache/batik/swing/JSVGCanvas.java
index 6f6a83a..b75116a 100644
--- a/batik-swing/src/main/java/org/apache/batik/swing/JSVGCanvas.java
+++ b/batik-swing/src/main/java/org/apache/batik/swing/JSVGCanvas.java
@@ -322,25 +322,25 @@
         key = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0);
         inputMap.put(key, SCROLL_DOWN_ACTION);
 
-        key = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.SHIFT_MASK);
+        key = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.SHIFT_DOWN_MASK);
         inputMap.put(key, FAST_SCROLL_RIGHT_ACTION);
 
-        key = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.SHIFT_MASK);
+        key = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.SHIFT_DOWN_MASK);
         inputMap.put(key, FAST_SCROLL_LEFT_ACTION);
 
-        key = KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.SHIFT_MASK);
+        key = KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.SHIFT_DOWN_MASK);
         inputMap.put(key, FAST_SCROLL_UP_ACTION);
 
-        key = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.SHIFT_MASK);
+        key = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.SHIFT_DOWN_MASK);
         inputMap.put(key, FAST_SCROLL_DOWN_ACTION);
 
-        key = KeyStroke.getKeyStroke(KeyEvent.VK_I, KeyEvent.CTRL_MASK);
+        key = KeyStroke.getKeyStroke(KeyEvent.VK_I, KeyEvent.CTRL_DOWN_MASK);
         inputMap.put(key, ZOOM_IN_ACTION);
 
-        key = KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_MASK);
+        key = KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_DOWN_MASK);
         inputMap.put(key, ZOOM_OUT_ACTION);
 
-        key = KeyStroke.getKeyStroke(KeyEvent.VK_T, KeyEvent.CTRL_MASK);
+        key = KeyStroke.getKeyStroke(KeyEvent.VK_T, KeyEvent.CTRL_DOWN_MASK);
         inputMap.put(key, RESET_TRANSFORM_ACTION);
     }
 
@@ -774,11 +774,11 @@
      */
     protected Interactor zoomInteractor = new AbstractZoomInteractor() {
         public boolean startInteraction(InputEvent ie) {
-            int mods = ie.getModifiers();
+            int mods = ie.getModifiersEx();
             return
                 ie.getID() == MouseEvent.MOUSE_PRESSED &&
-                (mods & InputEvent.BUTTON1_MASK) != 0 &&
-                (mods & InputEvent.CTRL_MASK) != 0;
+                (mods & InputEvent.BUTTON1_DOWN_MASK) != 0 &&
+                (mods & InputEvent.CTRL_DOWN_MASK) != 0;
         }
     };
 
@@ -789,11 +789,11 @@
     protected Interactor imageZoomInteractor
         = new AbstractImageZoomInteractor() {
         public boolean startInteraction(InputEvent ie) {
-            int mods = ie.getModifiers();
+            int mods = ie.getModifiersEx();
             return
                 ie.getID() == MouseEvent.MOUSE_PRESSED &&
-                (mods & InputEvent.BUTTON3_MASK) != 0 &&
-                (mods & InputEvent.SHIFT_MASK) != 0;
+                (mods & InputEvent.BUTTON3_DOWN_MASK) != 0 &&
+                (mods & InputEvent.SHIFT_DOWN_MASK) != 0;
         }
     };
 
@@ -803,11 +803,11 @@
      */
     protected Interactor panInteractor = new AbstractPanInteractor() {
         public boolean startInteraction(InputEvent ie) {
-            int mods = ie.getModifiers();
+            int mods = ie.getModifiersEx();
             return
                 ie.getID() == MouseEvent.MOUSE_PRESSED &&
-                (mods & InputEvent.BUTTON1_MASK) != 0 &&
-                (mods & InputEvent.SHIFT_MASK) != 0;
+                (mods & InputEvent.BUTTON1_DOWN_MASK) != 0 &&
+                (mods & InputEvent.SHIFT_DOWN_MASK) != 0;
         }
     };
 
@@ -817,11 +817,11 @@
      */
     protected Interactor rotateInteractor = new AbstractRotateInteractor() {
         public boolean startInteraction(InputEvent ie) {
-            int mods = ie.getModifiers();
+            int mods = ie.getModifiersEx();
             return
                 ie.getID() == MouseEvent.MOUSE_PRESSED &&
-                (mods & InputEvent.BUTTON3_MASK) != 0 &&
-                (mods & InputEvent.CTRL_MASK) != 0;
+                (mods & InputEvent.BUTTON3_DOWN_MASK) != 0 &&
+                (mods & InputEvent.CTRL_DOWN_MASK) != 0;
         }
     };
 
@@ -832,12 +832,12 @@
     protected Interactor resetTransformInteractor =
         new AbstractResetTransformInteractor() {
         public boolean startInteraction(InputEvent ie) {
-            int mods = ie.getModifiers();
+            int mods = ie.getModifiersEx();
             return
                 ie.getID() == MouseEvent.MOUSE_CLICKED &&
-                (mods & InputEvent.BUTTON3_MASK) != 0 &&
-                (mods & InputEvent.SHIFT_MASK) != 0 &&
-                (mods & InputEvent.CTRL_MASK) != 0;
+                (mods & InputEvent.BUTTON3_DOWN_MASK) != 0 &&
+                (mods & InputEvent.SHIFT_DOWN_MASK) != 0 &&
+                (mods & InputEvent.CTRL_DOWN_MASK) != 0;
         }
     };
 
diff --git a/batik-swing/src/main/java/org/apache/batik/swing/gvt/JGVTComponent.java b/batik-swing/src/main/java/org/apache/batik/swing/gvt/JGVTComponent.java
index 1950aea..a479129 100644
--- a/batik-swing/src/main/java/org/apache/batik/swing/gvt/JGVTComponent.java
+++ b/batik-swing/src/main/java/org/apache/batik/swing/gvt/JGVTComponent.java
@@ -1078,7 +1078,7 @@
                         (e.getComponent(),
                          MouseEvent.MOUSE_CLICKED,
                          e.getWhen(),
-                         e.getModifiers(),
+                         e.getModifiersEx(),
                          e.getX(),
                          e.getY(),
                          e.getClickCount(),
diff --git a/batik-swing/src/main/java/org/apache/batik/swing/svg/JSVGComponent.java b/batik-swing/src/main/java/org/apache/batik/swing/svg/JSVGComponent.java
index fd02ae7..ea3d0b3 100644
--- a/batik-swing/src/main/java/org/apache/batik/swing/svg/JSVGComponent.java
+++ b/batik-swing/src/main/java/org/apache/batik/swing/svg/JSVGComponent.java
@@ -2229,7 +2229,7 @@
                             MouseDraggedRunnable mdr;
                             mdr = (MouseDraggedRunnable)next;
                             MouseEvent mev = mdr.event;
-                            if (mev.getModifiers() == e.getModifiers()) {
+                            if (mev.getModifiersEx() == e.getModifiersEx()) {
                                 mdr.event = e;
                             }
                             return;
@@ -2273,7 +2273,7 @@
                             MouseMovedRunnable mmr;
                             mmr = (MouseMovedRunnable)next;
                             MouseEvent mev = mmr.event;
-                            if (mev.getModifiers() == e.getModifiers()) {
+                            if (mev.getModifiersEx() == e.getModifiersEx()) {
                                 mmr.event = e;
                             }
                             return;
