diff --git a/hypha/apply/utils/views.py b/hypha/apply/utils/views.py
index 0e7d61744a3eb563a3393cc4ecc3e3711409c7fd..2cc5b34f7aaaa7d9b9f446662fd27ca7ac2cc7ec 100644
--- a/hypha/apply/utils/views.py
+++ b/hypha/apply/utils/views.py
@@ -1,14 +1,22 @@
+from django.db.models import ProtectedError
+
 from django.contrib.auth.decorators import login_required
 from django.forms.models import ModelForm
 from django.http import HttpResponseForbidden
-from django.shortcuts import redirect
+from django.shortcuts import get_object_or_404, redirect
 from django.utils.decorators import method_decorator
+from django.utils.translation import gettext as _
 from django.views import defaults
 from django.views.generic import View
 from django.views.generic.base import ContextMixin
 from django.views.generic.detail import SingleObjectTemplateResponseMixin
 from django.views.generic.edit import ModelFormMixin, ProcessFormView
 
+from wagtail.core.models import Page
+from wagtail.admin import messages
+from wagtail.admin.auth import require_admin_access
+from wagtail.admin.views.pages import delete
+
 
 def page_not_found(request, exception=None, template_name='apply/404.html'):
     if not request.user.is_authenticated:
@@ -222,3 +230,24 @@ class CreateOrUpdateView(SingleObjectTemplateResponseMixin, ModelFormMixin, Proc
             self.object = None
 
         return super().post(request, *args, **kwargs)
+
+
+@require_admin_access
+def custom_wagtail_page_delete(request, page_id):
+    """
+    Currently, ProtectedError exception is not caught in Wagtail admin.
+    This workaround shows warning to the user if the page model like Fund, Round
+    can not be deleted instead of raising 500.
+    More details at https://github.com/wagtail/wagtail/issues/1602
+    Once the issue is fixed in Wagtail core, we can remove this workaround.
+    """
+    try:
+        return delete(request, page_id)
+    except ProtectedError as e:
+        item = e.protected_objects[0]
+        page = get_object_or_404(Page, id=page_id).specific
+        parent_id = page.get_parent().id
+        messages.warning(request, _("Page '{0}' can't be deleted because is in use in '{1}'.").format(
+            page.get_admin_display_title(), item.title
+        ))
+        return redirect('wagtailadmin_explore', parent_id)
diff --git a/hypha/urls.py b/hypha/urls.py
index d060adff04b94fd5d8187009c478d2c4db21a50f..310f8cc1c324e86e7c5d524220d904b5b5919603 100644
--- a/hypha/urls.py
+++ b/hypha/urls.py
@@ -11,6 +11,7 @@ from wagtail.images.views.serve import ServeView
 
 from hypha.apply.users.urls import public_urlpatterns as user_urls
 from hypha.apply.users.views import LoginView
+from hypha.apply.utils.views import custom_wagtail_page_delete
 from hypha.public import urls as public_urls
 
 urlpatterns = [
@@ -23,6 +24,7 @@ urlpatterns = [
         ),
         name='wagtailadmin_login'
     ),
+    path('admin/pages/<int:page_id>/delete/', custom_wagtail_page_delete),
     path('admin/', include(wagtailadmin_urls)),
 
     path('documents/', include(wagtaildocs_urls)),