Index: src/display.c
===================================================================
--- src/display.c	(revision 17)
+++ src/display.c	(revision 18)
@@ -2916,6 +2916,35 @@
     return success;
 }
 
+TapType
+get_tap_type(gint x, gint y)
+{
+    TapType type = TAP_TYPE_NONE;
+    PoiInfo poi;
+    gint unitx, unity;
+    printf("%s()\n", __PRETTY_FUNCTION__);
+
+    screen2unit(x, y, unitx, unity);
+
+    if(select_poi(unitx, unity, &poi, TRUE))
+    {
+        type = TAP_TYPE_POI;
+        g_free(poi.label);
+        g_free(poi.desc);
+        g_free(poi.clabel);
+    }
+
+    if((_show_paths & ROUTES_MASK) && _route.whead <= _route.wtail)
+    {
+        WayPoint *way = find_nearest_waypoint(unitx, unity);
+        if(way)
+            type = TAP_TYPE_WAYPOINT;
+    }
+
+    vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
+    return type;
+}
+
 void
 display_init()
 {
Index: src/cmenu.c
===================================================================
--- src/cmenu.c	(revision 17)
+++ src/cmenu.c	(revision 18)
@@ -677,42 +677,28 @@
 static gboolean
 cmenu_cb_show(GtkMenuItem *item)
 {
-    gint unitx, unity;
-    PoiInfo poi;
-    gboolean fallback = TRUE;
+    TapType type;
     printf("%s()\n", __PRETTY_FUNCTION__);
 
-    screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity);
+    type = get_tap_type(_cmenu_position_x, _cmenu_position_y);
 
     gtk_widget_hide(cmenu_quick_tap);
     gtk_widget_hide(cmenu_quick_waypoint);
     gtk_widget_hide(cmenu_quick_poi);
 
-    /* poi? */
-    if(select_poi(unitx, unity, &poi, TRUE))
+    switch(type)
     {
-        gtk_widget_show(cmenu_quick_poi);
-        g_free(poi.label);
-        g_free(poi.desc);
-        g_free(poi.clabel);
-        fallback = FALSE;
-    }
-
-    /* waypoint? */
-    if((_show_paths & ROUTES_MASK) && _route.whead <= _route.wtail)
-    {
-        WayPoint *way = find_nearest_waypoint(unitx, unity);
-        if(way)
-        {
+        case TAP_TYPE_POI:
+            gtk_widget_show(cmenu_quick_poi);
+            break;
+        case TAP_TYPE_WAYPOINT:
             gtk_widget_show(cmenu_quick_waypoint);
-            fallback = FALSE;
-        }
+            break;
+        case TAP_TYPE_NONE:
+            gtk_widget_show(cmenu_quick_tap);
+            break;
     }
 
-    /* fall back to tap point */
-    if(fallback)
-        gtk_widget_show(cmenu_quick_tap);
-
     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
     return TRUE;
 }
Index: src/types.h
===================================================================
--- src/types.h	(revision 17)
+++ src/types.h	(revision 18)
@@ -272,6 +272,13 @@
     DEG_FORMAT_ENUM_COUNT
 } DegFormat;
 
+typedef enum
+{
+    TAP_TYPE_NONE,
+    TAP_TYPE_POI,
+    TAP_TYPE_WAYPOINT
+} TapType;
+
 typedef struct _CoordFormatSetup CoordFormatSetup;
 struct _CoordFormatSetup 
 {
Index: src/display.h
===================================================================
--- src/display.h	(revision 17)
+++ src/display.h	(revision 18)
@@ -74,6 +74,8 @@
         GnomeVFSHandle **handle_out, gint *size_out, gchar **dir, gchar **file,
         GtkFileChooserAction chooser_action);
 
+TapType get_tap_type(gint x, gint y);
+
 void display_init(void);
 
 #ifdef INCLUDE_APRS
