diff --git a/lib/main.dart b/lib/main.dart
index 07afe7e0a62650d3d669961236ec4a69696cd852..f8f6d56001c6cdc0f34bb7687341b450126c3651 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -32,6 +32,7 @@ import 'data/models/node_type.dart';
 import 'data/models/payment_cubit.dart';
 import 'data/models/transaction_cubit.dart';
 import 'g1/api.dart';
+import 'notification_controller.dart';
 import 'shared_prefs.dart';
 import 'ui/contacts_cache.dart';
 import 'ui/logger.dart';
@@ -40,6 +41,7 @@ import 'ui/ui_helpers.dart';
 
 void main() async {
   Bloc.observer = AppBlocObserver();
+  await NotificationController.initializeLocalNotifications();
 
   /// Initialize packages
   WidgetsFlutterBinding.ensureInitialized();
@@ -237,6 +239,10 @@ PageViewModel createPageViewModel(
 class GinkgoApp extends StatefulWidget {
   const GinkgoApp({super.key});
 
+  // The navigator key is necessary to navigate using static methods
+  static final GlobalKey<NavigatorState> navigatorKey =
+      GlobalKey<NavigatorState>();
+
   @override
   State<GinkgoApp> createState() => _GinkgoAppState();
 }
@@ -268,6 +274,8 @@ class _GinkgoAppState extends State<GinkgoApp> {
     super.initState();
     ContactsCache().init();
     NodeManager().loadFromCubit(context.read<NodeListCubit>());
+    // Only after at least the action method is set, the notification events are delivered
+    NotificationController.startListeningNotificationEvents();
   }
 
   @override
@@ -308,6 +316,8 @@ class _GinkgoAppState extends State<GinkgoApp> {
                 darkTheme:
                     ThemeData(useMaterial3: true, colorScheme: darkColorScheme),
 
+                navigatorKey: GinkgoApp.navigatorKey,
+
                 /// Theme stuff
 
                 /// Localization stuff