diff --git a/templates/standalone/cordovalib/Commands/Notification.cs b/templates/standalone/cordovalib/Commands/Notification.cs
index 9cfd528..4089e3e 100644
--- a/templates/standalone/cordovalib/Commands/Notification.cs
+++ b/templates/standalone/cordovalib/Commands/Notification.cs
@@ -23,6 +23,7 @@
 using Microsoft.Xna.Framework.Audio;
 using WPCordovaClassLib.Cordova.UI;
 
+
 namespace WPCordovaClassLib.Cordova.Commands
 {
     public class Notification : BaseCommand
@@ -83,7 +84,6 @@
         {
             Deployment.Current.Dispatcher.BeginInvoke(() =>
             {
-
                 string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
                 AlertOptions alertOpts = new AlertOptions();
                 alertOpts.message = args[0];
@@ -96,7 +96,9 @@
                     Grid grid = page.FindName("LayoutRoot") as Grid;
                     if (grid != null)
                     {
+                        var previous = notifyBox;
                         notifyBox = new NotificationBox();
+                        notifyBox.Tag = previous;
                         notifyBox.PageTitle.Text = alertOpts.title;
                         notifyBox.SubTitle.Text = alertOpts.message;
                         Button btnOK = new Button();
@@ -105,7 +107,11 @@
                         btnOK.Tag = 1;
                         notifyBox.ButtonPanel.Children.Add(btnOK);
                         grid.Children.Add(notifyBox);
-                        page.BackKeyPress += page_BackKeyPress;
+
+                        if (previous == null)
+                        {
+                            page.BackKeyPress += page_BackKeyPress;
+                        }
                     }
                 }
                 else
@@ -131,7 +137,9 @@
                     Grid grid = page.FindName("LayoutRoot") as Grid;
                     if (grid != null)
                     {
+                        var previous = notifyBox;
                         notifyBox = new NotificationBox();
+                        notifyBox.Tag = previous; 
                         notifyBox.PageTitle.Text = alertOpts.title;
                         notifyBox.SubTitle.Text = alertOpts.message;
 
@@ -146,7 +154,10 @@
                         }
 
                         grid.Children.Add(notifyBox);
-                        page.BackKeyPress += page_BackKeyPress;
+                        if (previous == null)
+                        {
+                            page.BackKeyPress += page_BackKeyPress;
+                        }
                     }
                 }
                 else
@@ -159,15 +170,19 @@
         void page_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
         {
             PhoneApplicationPage page = sender as PhoneApplicationPage;
+
             if (page != null && notifyBox != null)
             {
                 Grid grid = page.FindName("LayoutRoot") as Grid;
                 if (grid != null)
                 {
                     grid.Children.Remove(notifyBox);
+                    notifyBox = notifyBox.Tag as NotificationBox;
                 }
-                notifyBox = null;
-                page.BackKeyPress -= page_BackKeyPress;
+                if (notifyBox == null)
+                {
+                    page.BackKeyPress -= page_BackKeyPress;
+                }
                 e.Cancel = true;
             }
 
@@ -177,12 +192,17 @@
         void btnOK_Click(object sender, RoutedEventArgs e)
         {
             Button btn = sender as Button;
+            FrameworkElement notifBoxParent = null;
             int retVal = 0;
             if (btn != null)
             {
                 retVal = (int)btn.Tag + 1;
+
+                notifBoxParent = btn.Parent as FrameworkElement;
+                while ((notifBoxParent = notifBoxParent.Parent as FrameworkElement) != null &&
+                       !(notifBoxParent is NotificationBox));
             }
-            if (notifyBox != null)
+            if (notifBoxParent != null)
             {
                 PhoneApplicationPage page = Page;
                 if (page != null)
@@ -190,10 +210,15 @@
                     Grid grid = page.FindName("LayoutRoot") as Grid;
                     if (grid != null)
                     {
-                        grid.Children.Remove(notifyBox);
+                        grid.Children.Remove(notifBoxParent);
+                    }
+                    notifyBox = notifBoxParent.Tag as NotificationBox;
+                    if (notifyBox == null)
+                    {
+                        page.BackKeyPress -= page_BackKeyPress;
                     }
                 }
-                notifyBox = null;
+                
             }
             DispatchCommandResult(new PluginResult(PluginResult.Status.OK, retVal));
         }
