diff --git a/.idea/misc.xml b/.idea/misc.xml
index 0256570..94a953d 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,7 +3,11 @@
   <component name="DesignSurface">
     <option name="filePathToZoomLevelMap">
       <map>
+        <entry key="../../../../layout/custom_preview.xml" value="0.5661458333333333" />
+        <entry key="app/src/main/res/layout/activity_list_view.xml" value="0.5307291666666667" />
+        <entry key="app/src/main/res/layout/activity_main.xml" value="0.5307291666666667" />
         <entry key="app/src/main/res/layout/item_geofav.xml" value="0.5307291666666667" />
+        <entry key="app/src/main/res/menu/list_context_menu.xml" value="0.41944444444444445" />
       </map>
     </option>
   </component>
diff --git a/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/GeofavoriteAdapter.java b/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/GeofavoriteAdapter.java
index 1d7be0d..8dcb1c5 100644
--- a/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/GeofavoriteAdapter.java
+++ b/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/GeofavoriteAdapter.java
@@ -23,14 +23,18 @@ package it.danieleverducci.nextcloudmaps.activity.main;
 import android.content.Context;
 import android.content.Intent;
 import android.text.Html;
+import android.util.Log;
 import android.view.ContextMenu;
 import android.view.LayoutInflater;
+import android.view.Menu;
 import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Filter;
 import android.widget.Filterable;
 import android.widget.ImageView;
+import android.widget.PopupMenu;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
@@ -46,6 +50,8 @@ import it.danieleverducci.nextcloudmaps.model.Geofavorite;
 
 public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter.GeofavoriteViewHolder> implements Filterable {
 
+    public static final String TAG = "GeofavoriteAdapter";
+
     public static final int SORT_BY_TITLE = 0;
     public static final int SORT_BY_CREATED = 1;
 
@@ -56,6 +62,9 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter.
     private List<Geofavorite> geofavoriteListFiltered = new ArrayList<>();
     private int sortRule = SORT_BY_CREATED;
 
+    // Contains the position of the element containing the overflow menu clicked
+    private int overflowMenuSelectedPosition = -1;
+
     public GeofavoriteAdapter(Context context, ItemClickListener itemClickListener) {
         this.context = context;
         this.itemClickListener = itemClickListener;
@@ -143,7 +152,7 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter.
         }
     };
 
-    class GeofavoriteViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener {
+    class GeofavoriteViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
         TextView tv_title, tv_content;
         ImageView bt_context_menu;
         ImageView bt_share;
@@ -170,22 +179,17 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter.
         public void onClick(View view) {
             switch (view.getId()) {
                 case R.id.geofav_context_menu_bt:
-                    openContextMenu(view);
+                    onOverflowIconClicked(view, getAdapterPosition());
                     break;
                 case R.id.geofav_share_bt:
                     if (itemClickListener != null)
                         itemClickListener.onItemShareClick(get(getAdapterPosition()));
                     break;
                 default:
-                    itemClickListener.onItemClick(view, getAdapterPosition());
+                    if (itemClickListener != null)
+                        itemClickListener.onItemClick(get(getAdapterPosition()));
             }
         }
-
-        @Override
-        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
-            MenuInflater menuInflater = new MenuInflater(context);
-            menuInflater.inflate(R.menu.list_context_menu, menu);
-        }
     }
 
     private void performSort() {
@@ -196,17 +200,37 @@ public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter.
         }
     }
 
-    private void openContextMenu(View v) {
-        v.showContextMenu();
-        //.showContextMenuForChild(v);
+
+    private void onOverflowIconClicked(View view, int position) {
+        // Save selected item
+        overflowMenuSelectedPosition = position;
+        // Open menu
+        PopupMenu popup = new PopupMenu(context, view);
+        popup.inflate(R.menu.list_context_menu);
+        popup.setOnMenuItemClickListener(this::optionsItemSelected);
+        popup.show();
+    }
+
+    private boolean optionsItemSelected(MenuItem item) {
+        if (overflowMenuSelectedPosition < 0) {
+            Log.e(TAG, "No overflow menu selected position saved!");
+            return false;
+        }
+        Geofavorite gf = get(overflowMenuSelectedPosition);
+        overflowMenuSelectedPosition = -1;
+        if (item.getItemId() == R.id.list_context_menu_detail && itemClickListener != null)
+            itemClickListener.onItemDetailsClick(gf);
+        if (item.getItemId() == R.id.list_context_menu_delete)
+            itemClickListener.onItemDeleteClick(gf);
+        return true;
     }
 
     public interface ItemClickListener {
-        void onItemClick(View view, int position);
+        void onItemClick(Geofavorite item);
         void onItemShareClick(Geofavorite item);
+        void onItemDetailsClick(Geofavorite item);
+        void onItemDeleteClick(Geofavorite item);
     }
 
-    public interface ContextMenuClickListener {
-        void onContextMenuClick();
-    }
+
 }
\ No newline at end of file
diff --git a/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/MainActivity.java b/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/MainActivity.java
index b57e9c8..6fcd5a3 100644
--- a/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/MainActivity.java
+++ b/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/main/MainActivity.java
@@ -21,6 +21,7 @@ import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.View;
 import android.widget.Toast;
 
@@ -103,8 +104,7 @@ public class MainActivity extends AppCompatActivity implements MainView, OnSorti
 
         rvItemClickListener = new ItemClickListener() {
             @Override
-            public void onItemClick(View view, int position) {
-                Geofavorite geofavorite = geofavoriteAdapter.get(position);
+            public void onItemClick(Geofavorite geofavorite) {
                 Intent i = new Intent();
                 i.setAction(Intent.ACTION_VIEW);
                 i.setData(geofavorite.getGeoUri());
@@ -122,14 +122,22 @@ public class MainActivity extends AppCompatActivity implements MainView, OnSorti
                 i.putExtra(Intent.EXTRA_TEXT, shareMessage );
                 startActivity(Intent.createChooser(i, getString(R.string.share_via)));
             }
+
+            @Override
+            public void onItemDetailsClick(Geofavorite item) {
+                Log.d("MENU", "Details "+item.getName());
+            }
+
+            @Override
+            public void onItemDeleteClick(Geofavorite item) {
+                Log.d("MENU", "Delete "+item.getName());
+            }
         };
 
         geofavoriteAdapter = new GeofavoriteAdapter(getApplicationContext(), rvItemClickListener);
         recyclerView.setAdapter(geofavoriteAdapter);
         geofavoriteAdapter.setSortRule(sortRule);
 
-        registerForContextMenu(recyclerView);
-
         swipeRefresh = findViewById(R.id.swipe_refresh);
         swipeRefresh.setOnRefreshListener(() -> presenter.getGeofavorites());