diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
index 28807b8..227974a 100644
--- a/gdk/quartz/gdkevents-quartz.c
+++ b/gdk/quartz/gdkevents-quartz.c
@@ -249,6 +249,8 @@ get_keyboard_modifiers_from_ns_event (NSEvent *nsevent)
     modifiers |= GDK_CONTROL_MASK;
   if (nsflags & NSCommandKeyMask)
     modifiers |= GDK_MOD1_MASK;
+  if (nsflags & NSAlternateKeyMask)
+      modifiers |= GDK_MOD5_MASK;
 
   return modifiers;
 }
diff --git a/gdk/quartz/gdkkeys-quartz.c b/gdk/quartz/gdkkeys-quartz.c
index ab38c6a..af460ca 100644
--- a/gdk/quartz/gdkkeys-quartz.c
+++ b/gdk/quartz/gdkkeys-quartz.c
@@ -663,14 +663,21 @@ void
 gdk_keymap_add_virtual_modifiers (GdkKeymap       *keymap,
                                   GdkModifierType *state)
 {
-  /* FIXME: For now, we've mimiced the Windows backend. */
+  if (*state & GDK_MOD1_MASK)
+    *state |= GDK_META_MASK;
+  if (*state & GDK_MOD5_MASK)
+    *state |= GDK_SUPER_MASK;
 }
 
 gboolean
 gdk_keymap_map_virtual_modifiers (GdkKeymap       *keymap,
                                   GdkModifierType *state)
 {
-  /* FIXME: For now, we've mimiced the Windows backend. */
+
+  if (*state & GDK_META_MASK)
+    *state |= GDK_MOD1_MASK;
+  if (*state & GDK_SUPER_MASK)
+    *state |= GDK_MOD5_MASK;
   return TRUE;
 }
 
