diff --git a/gracedb/view_logic.py b/gracedb/view_logic.py
index cc3d4904e4fb372ccec91d26eeb57d942edf95a7..be98f6c81510769f1ce4bac353fa03fd4853ebcd 100644
--- a/gracedb/view_logic.py
+++ b/gracedb/view_logic.py
@@ -10,7 +10,8 @@ from models import SimInspiralEvent
 from models import LalInferenceBurstEvent
 from models import EMBBEventLog, EMGroup
 from models import EMObservation, EMFootprint
-from alert import issueAlert, issueAlertForLabel, issueAlertForUpdate
+from alert import issueAlert, issueAlertForLabel, issueAlertForUpdate, \
+    issueXMPPAlert
 from translator import handle_uploaded_data
 
 from utils.vfile import VersionedFile
@@ -194,7 +195,7 @@ def create_label(event, request, labelName, doAlert=True, doXMPP=True):
     # and label_created bool
     return json.dumps(d), label_created
 
-def delete_label(event, request, labelName):
+def delete_label(event, request, labelName, doXMPP=True):
     # This function deletes a label. It starts out a lot like the create
     # label function. First get user and event info:
     creator = request.user
@@ -228,6 +229,15 @@ def delete_label(event, request, labelName):
             logger.exception('Problem saving log message (%s)' % str(e))
             d['error'] = str(e)
 
+        # send an XMPP alert, no email or phone alerts
+        try:
+            if doXMPP:
+                issueXMPPAlert(event, "", alert_type="label",
+                    description="Label {0} removed".format(label.name))
+        except Exception as e:
+            logger.exception('Problem issuing alert (%s)' % str(e))
+            d['warning'] = "Problem issuing alert (%s)" % str(e)
+
     # Return the json for some reason. I don't do any alert stuff in here.
     return json.dumps(d)
 
diff --git a/gracedb/views.py b/gracedb/views.py
index edfd0c2d10cb21f2f82340977582d7be9290bd86..15002a02ae9a169acdaf201c859928c6963915e7 100644
--- a/gracedb/views.py
+++ b/gracedb/views.py
@@ -26,6 +26,12 @@ from view_logic import create_label, delete_label
 from view_utils import assembleLigoLw, get_file
 from view_utils import flexigridResponse, jqgridResponse
 from view_utils import get_recent_events_string
+from view_utils import eventLogToDict
+from alert import issueAlertForUpdate
+
+# Set up logging
+import logging
+log = logging.getLogger(__name__)
 
 import os
 from django.conf import settings
@@ -178,6 +184,8 @@ def _create(request):
 
 @event_and_auth_required
 def logentry(request, event, num=None):
+    """Creates an EventLog from the web interface"""
+
     if request.method == "POST":
         # create a log entry
         elog = EventLog(event=event, issuer=request.user)
@@ -252,6 +260,22 @@ def logentry(request, event, num=None):
             except:
                 pass
 
+        # Send XMPP alert message
+        try:
+            if uploadedFile:
+                desc = "UPLOAD: '{0}' ".format(uploadedFile.name)
+                fname = uploadedFile.name
+            else:
+                desc = "LOG: "
+                fname = ""
+            issueAlertForUpdate(event, desc+elog.comment, doxmpp=True,
+                filename=fname,
+                serialized_object=eventLogToDict(elog, request=request))
+        except Exception as e:
+            log.error('Error issuing alert: %s' % str(e))
+            return HttpResponse("Failed to send alert for log message: %s" \
+                .format(e))
+
     elif request.method == "GET":
         if not user_has_perm(request.user, 'view', event):
             return HttpResponseForbidden("Forbidden")