diff --git a/Dockerfile b/Dockerfile
index 4546c5bc1711a2fa2df489886bf23750afc47930..839918f770034c152dae9d32dd22c7304f02abff 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -57,7 +57,6 @@ COPY docker/entrypoint /usr/local/bin/entrypoint
 COPY docker/cleanup /usr/local/bin/cleanup
 COPY docker/supervisord.conf /etc/supervisor/supervisord.conf
 COPY docker/supervisord-apache2.conf /etc/supervisor/conf.d/apache2.conf
-COPY docker/supervisord-lvalert-overseer.conf /etc/supervisor/conf.d/overseer.conf
 COPY docker/supervisord-igwn-alert-overseer.conf /etc/supervisor/conf.d/igwn-overseer.conf
 COPY docker/supervisord-shibd.conf /etc/supervisor/conf.d/shibd.conf
 COPY docker/shibboleth-ds /etc/shibboleth-ds
diff --git a/config/settings/base.py b/config/settings/base.py
index 02e3600348678a97b9135975eeacf81110dccd0f..ed8307b4daa1e75dfa0d58e4aa36208f8b1cc583 100644
--- a/config/settings/base.py
+++ b/config/settings/base.py
@@ -124,6 +124,12 @@ LOGOUT_REDIRECT_URL = 'home'
 SEND_XMPP_ALERTS = False
 SEND_PHONE_ALERTS = False
 SEND_EMAIL_ALERTS = False
+
+# igwn-alert group settings. the default development group is 'lvalert-dev'
+# for the container deployments, the variable will be overwriten by the 
+# IGWN_ALERT_GROUP environment variable. 
+DEFAULT_IGWN_ALERT_GROUP = 'lvalert-dev'
+
 # Use LVAlert Overseer?
 USE_LVALERT_OVERSEER = True
 # For each LVAlert server, a separate instance of LVAlert Overseer
@@ -131,13 +137,10 @@ USE_LVALERT_OVERSEER = True
 #   lvalert_server: LVAlert server which overseer sends messages to
 #   listen_port: port which that instance of overseer is listening on
 LVALERT_OVERSEER_INSTANCES = [
-    {
-        "lvalert_server": "lvalert-test.cgca.uwm.edu",
-        "listen_port": 8001,
-    },
     {
         "lvalert_server": "kafka://kafka.scimma.org/",
         "listen_port": 8002,
+        "igwn_alert_group": DEFAULT_IGWN_ALERT_GROUP,
     },
 ]
 
diff --git a/config/settings/container/base.py b/config/settings/container/base.py
index e86da12dd881bfcebaaa677a60a46c048d597395..62ac6467178d94cdab09806b00f80e4e58da68ef 100644
--- a/config/settings/container/base.py
+++ b/config/settings/container/base.py
@@ -73,27 +73,6 @@ if (isinstance(igwn_alert_on, str) and
 else:
     igwn_alert_overseer_on  = False
 
-# Get LVAlert server
-lvalert_server = os.environ.get('LVALERT_SERVER', None)
-if lvalert_server is None:
-    raise ImproperlyConfigured('Could not get LVAlert server from envvars.')
-
-# Get LVAlert Overseer listen port
-lvalert_overseer_port = os.environ.get('LVALERT_OVERSEER_PORT', None)
-if lvalert_overseer_port is None:
-    raise ImproperlyConfigured('Could not get LVAlert overseer port '
-        'from envvars.')
-
-# Get LVAlert username
-lvalert_user = os.environ.get('LVALERT_USER', None)
-if lvalert_user is None:
-    raise ImproperlyConfigured('Could not get LVAlert username from envvars.')
-
-# Get LVAlert password
-lvalert_password = os.environ.get('LVALERT_PASSWORD', None)
-if lvalert_password is None:
-    raise ImproperlyConfigured('Could not get LVAlert password from envvars.')
-
 # Get igwn-alert server
 igwn_alert_server = os.environ.get('IGWN_ALERT_SERVER', None)
 if lvalert_server is None:
@@ -101,18 +80,21 @@ if lvalert_server is None:
 
 # Get igwn-alert Overseer listen port
 igwn_alert_overseer_port = os.environ.get('IGWN_ALERT_OVERSEER_PORT', None)
-if lvalert_overseer_port is None:
+if igwn_alert_overseer_port is None:
     raise ImproperlyConfigured('Could not get igwn-alert overseer port '
         'from envvars.')
 
+# Get igwn-alert group from envirnment:
+igwn_alert_group = os.environ.get('IGWN_ALERT_GROUP', DEFAULT_IGWN_ALERT_GROUP)
+
 # Get igwn-alert username
 igwn_alert_user = os.environ.get('IGWN_ALERT_USER', None)
-if lvalert_user is None:
+if igwn_alert_user is None:
     raise ImproperlyConfigured('Could not get igwn-alert username from envvars.')
 
 # Get igwn-alert password
 igwn_alert_password = os.environ.get('IGWN_ALERT_PASSWORD', None)
-if lvalert_password is None:
+if igwn_alert_password is None:
     raise ImproperlyConfigured('Could not get igwn-alert password from envvars.')
 
 # Get Twilio account information from environment
@@ -328,21 +310,14 @@ except:
 # Main server "hostname" - a little hacky but OK
 SERVER_HOSTNAME = SERVER_FQDN.split('.')[0]
 
-# LVAlert Overseer settings - get from environment
+# igwn_alert  Overseer settings - get from environment
 LVALERT_OVERSEER_INSTANCES = []
-LVALERT_OVERSEER_INSTANCES = [
-    {
-        "lvalert_server": lvalert_server,
-        "listen_port": int(lvalert_overseer_port),
-        "username": lvalert_user,
-        "password": lvalert_password,
-    }]
-
 if igwn_alert_overseer_on:
     LVALERT_OVERSEER_INSTANCES.append(
     {
         "lvalert_server": igwn_alert_server,
         "listen_port": int(igwn_alert_overseer_port),
+        "igwn_alert_group": igwn_alert_group,
         "username": igwn_alert_user,
         "password": igwn_alert_password,
     }
@@ -351,7 +326,7 @@ if igwn_alert_overseer_on:
 INSTANCE_STUB = """
 <li>Phone alerts (calls/SMS) are {0}</li>
 <li>Email alerts are {1}</li>
-<li><span class="text-monospace">LVAlert</span> messages to <span class="text-monospace">{2}</span> are {3}</li>
+<li><span class="text-monospace">igwn-alert</span> messages to <span class="text-monospace">{2}</span> are {3}</li>
 """
 
 INSTANCE_LIST = INSTANCE_STUB.format(ENABLED[SEND_PHONE_ALERTS],
@@ -359,12 +334,6 @@ INSTANCE_LIST = INSTANCE_STUB.format(ENABLED[SEND_PHONE_ALERTS],
                                 LVALERT_OVERSEER_INSTANCES[0]['lvalert_server'],
                                 ENABLED[SEND_XMPP_ALERTS])
 
-if (len(LVALERT_OVERSEER_INSTANCES) == 2):
-    IGWN_STUB = '<li><span class="text-monospace">igwn-alert</span> messages to <span class="text-monospace">{0}</span> are {1}</li>'
-    IGWN_LIST = IGWN_STUB.format(LVALERT_OVERSEER_INSTANCES[1]['lvalert_server'],
-                                ENABLED[SEND_XMPP_ALERTS])
-    INSTANCE_LIST = INSTANCE_LIST + IGWN_LIST
-
 # Use full client certificate to authenticate
 REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] = (
     'api.backends.GraceDbAuthenticatedAuthentication',
diff --git a/config/settings/container/dev.py b/config/settings/container/dev.py
index 8da822978936dc2af6556e126fbe1a02a12414cb..37889a8765d5d6e1b1200be86fdaec9810751838 100644
--- a/config/settings/container/dev.py
+++ b/config/settings/container/dev.py
@@ -72,12 +72,10 @@ if sentry_dsn is not None:
 INSTANCE_TITLE = 'GraceDB Development VM'
 
 # Add sub-bullet with igwn-alert group:
-if (len(LVALERT_OVERSEER_INSTANCES) == 2):
-    igwn_alert_group = os.environ.get('IGWN_ALERT_GROUP', 'lvalert-dev')
-    group_sub_bullet = """<ul>
-    <li> Messages are sent to group: <span class="text-monospace"> {0}  </span></li>
-    </ul>""".format(igwn_alert_group)
-    INSTANCE_LIST = INSTANCE_LIST + group_sub_bullet
+group_sub_bullet = """<ul>
+<li> Messages are sent to group: <span class="text-monospace"> {0}  </span></li>
+</ul>""".format(LVALERT_OVERSEER_INSTANCES[0]['igwn_alert_group'])
+INSTANCE_LIST = INSTANCE_LIST + group_sub_bullet
 
 INSTANCE_TITLE = 'GraceDB Development Server'
 INSTANCE_INFO = """
diff --git a/config/settings/container/playground.py b/config/settings/container/playground.py
index 3ab722b05ece8bd0959b2946eba5e9cc19e9fed9..ee88ed96c050bff0116fb24027028689ac54697e 100644
--- a/config/settings/container/playground.py
+++ b/config/settings/container/playground.py
@@ -23,12 +23,10 @@ ALLOWED_HOSTS += ['testserver']
 INSTANCE_TITLE = 'GraceDB Playground'
 
 # Add sub-bullet with igwn-alert group:
-if (len(LVALERT_OVERSEER_INSTANCES) == 2):
-    igwn_alert_group = os.environ.get('IGWN_ALERT_GROUP', 'lvalert-dev')
-    group_sub_bullet = """<ul>
-    <li> Messages are sent to group: <span class="text-monospace"> {0}  </span></li>
-    </ul>""".format(igwn_alert_group)
-    INSTANCE_LIST = INSTANCE_LIST + group_sub_bullet
+group_sub_bullet = """<ul>
+<li> Messages are sent to group: <span class="text-monospace"> {0}  </span></li>
+</ul>""".format(LVALERT_OVERSEER_INSTANCES[0]['igwn_alert_group'])
+INSTANCE_LIST = INSTANCE_LIST + group_sub_bullet
 
 INSTANCE_INFO = """
 <h5>Playground instance</h5>
diff --git a/config/settings/container/production.py b/config/settings/container/production.py
index bb52156d19670589290d9ca14d1fe8d2c96fd3f3..34321e81a82d9862ff482714d0d5f61fed953e31 100644
--- a/config/settings/container/production.py
+++ b/config/settings/container/production.py
@@ -57,7 +57,13 @@ if sentry_dsn is not None:
     LOGGING['loggers']['django.request']['handlers'] = []
 
 # Home page stuff
-INSTANCE_TITLE = 'GraceDB Playground'
+INSTANCE_TITLE = 'GraceDB'
+
+# Add sub-bullet with igwn-alert group:
+group_sub_bullet = """<ul>
+<li> Messages are sent to group: <span class="text-monospace"> {0}  </span></li>
+</ul>""".format(LVALERT_OVERSEER_INSTANCES[0]['igwn_alert_group'])
+INSTANCE_LIST = INSTANCE_LIST + group_sub_bullet
 
 INSTANCE_INFO = """
 <h5>GraceDB Notifications</h5>
diff --git a/config/settings/container/test.py b/config/settings/container/test.py
index dda5ea839e3784c291c0c056e3c422a128ed0d6e..eefba50c4c9a2b51b7ce50bd728a4626db324214 100644
--- a/config/settings/container/test.py
+++ b/config/settings/container/test.py
@@ -72,12 +72,10 @@ if sentry_dsn is not None:
 INSTANCE_TITLE = 'GraceDB Testing Server'
 
 # Add sub-bullet with igwn-alert group:
-if (len(LVALERT_OVERSEER_INSTANCES) == 2):
-    igwn_alert_group = os.environ.get('IGWN_ALERT_GROUP', 'lvalert-dev')
-    group_sub_bullet = """<ul>
-    <li> Messages are sent to group: <span class="text-monospace"> {0}  </span></li>
-    </ul>""".format(igwn_alert_group)
-    INSTANCE_LIST = INSTANCE_LIST + group_sub_bullet
+group_sub_bullet = """<ul>
+<li> Messages are sent to group: <span class="text-monospace"> {0}  </span></li>
+</ul>""".format(LVALERT_OVERSEER_INSTANCES[0]['igwn_alert_group'])
+INSTANCE_LIST = INSTANCE_LIST + group_sub_bullet
 
 INSTANCE_INFO = """
 <h5>Testing Instance</h5>
diff --git a/config/settings/vm/base.py b/config/settings/vm/base.py
index aaa5d77fedec3c4a50f382834cbc469b43bcf49d..9201d99006932ca267121145eb08c756658182d4 100644
--- a/config/settings/vm/base.py
+++ b/config/settings/vm/base.py
@@ -95,17 +95,10 @@ BETA_REPORTS_LINK = True
 INSTANCE_STUB = """
 <li>Phone alerts (calls/SMS) are {0}</li>
 <li>Email alerts are {1}</li>
-<li><span class="text-monospace">LVAlert</span> messages to <span class="text-monospace">{2}</span> are {3}</li>
+<li><span class="text-monospace">igwn-alert</span> messages to <span class="text-monospace">{2}</span> are {3}</li>
 """
 
 INSTANCE_LIST = INSTANCE_STUB.format(ENABLED[SEND_PHONE_ALERTS],
                                 ENABLED[SEND_EMAIL_ALERTS],
                                 LVALERT_OVERSEER_INSTANCES[0]['lvalert_server'],
                                 ENABLED[SEND_XMPP_ALERTS])
-
-if (len(LVALERT_OVERSEER_INSTANCES) == 2):
-    IGWN_STUB = '<li><span class="text-monospace">igwn-alert</span> messages to <span class="text-monospace">{0}</span> are {1}</li>'
-    IGWN_LIST = IGWN_STUB.format(LVALERT_OVERSEER_INSTANCES[1]['lvalert_server'],
-                                ENABLED[SEND_XMPP_ALERTS])
-    INSTANCE_LIST = INSTANCE_LIST + IGWN_LIST
-
diff --git a/docker/supervisord-lvalert-overseer.conf b/docker/supervisord-lvalert-overseer.conf
deleted file mode 100644
index 598c4c81d114ab20d11fba561a932e7413e39881..0000000000000000000000000000000000000000
--- a/docker/supervisord-lvalert-overseer.conf
+++ /dev/null
@@ -1,14 +0,0 @@
-[program:overseer]
-autostart=%(ENV_ENABLE_OVERSEER)s
-command=lvalert_overseer -a %(ENV_LVALERT_USER)s -b %(ENV_LVALERT_PASSWORD)s
-    -s %(ENV_LVALERT_SERVER)s -p %(ENV_LVALERT_OVERSEER_PORT)s
-    -r %(ENV_LVALERT_OVERSEER_RESOURCE)s
-    -l - -e -
-user=gracedb
-group=www-data
-stdout_logfile=/dev/stdout
-stdout_logfile_maxbytes=0
-redirect_stderr=true
-priority=2
-autorestart=true
-startretries=100
diff --git a/gracedb/alerts/lvalert.py b/gracedb/alerts/lvalert.py
index 3829f81413f5c1a474e8e9deeeb31238b439c864..8bcc3eabcd80c308e62384f5ba665b235ec9a07a 100644
--- a/gracedb/alerts/lvalert.py
+++ b/gracedb/alerts/lvalert.py
@@ -3,8 +3,9 @@ from multiprocessing import Process
 import os
 from subprocess import Popen, PIPE
 
-from ligo.lvalert import LVAlertClient
-from ligo.overseer.overseer_client import send_to_overseer
+from django.conf import settings
+from igwn_alert import client
+from igwn_alert_overseer.overseer.overseer_client import send_to_overseer
 
 # Set up logger
 logger = logging.getLogger(__name__)
@@ -33,8 +34,8 @@ def send_with_lvalert_overseer(node_name, message, manager, port):
     return True if rdict.get('success', None) is not None else False
 
 
-def send_with_lvalert_client(node, message, server, username=None,
-    password=None, **kwargs):
+def send_with_kafka_client(node, message, server, username=None,
+    password=None, group=None, **kwargs):
 
     # Set up for initializing LVAlertClient instance
     client_settings = {
@@ -43,44 +44,21 @@ def send_with_lvalert_client(node, message, server, username=None,
 
     # Username and password should be provided for container deployments.
     # For VMs, they won't be, so it will look up the credentials in the
-    # .netrc file
+    # hop auth.toml file
     if username is not None:
         client_settings['username'] = username
     if password is not None:
         client_settings['password'] = password
+    # if for some reason the group didn't get set correctly, make it the 
+    # default
+    if group is not None:
+        client_settings['group'] = group
+    else:
+        client_settings['group'] = settings.DEFAULT_IGWN_ALERT_GROUP
 
     # Instantiate client
-    client = LVAlertClient(**client_settings)
-
-    # Client setup
-    client.connect(reattempt=False)
-    client.auto_reconnect = False
-    client.process(block=False)
+    igwn_alert_client = client(**client_settings)
 
     # Send message
-    client.publish(node, message)
-
-    # Disconnect
-    client.abort()
-
-
-# OLD
-def send_with_lvalert_send(node, message, server):
-
-    # Set up environment for running lvalert_send executable
-    env = os.environ.copy()
-
-    # Construct LVAlert command
-    cmd = [
-        "lvalert_send",
-        "--server={server}".format(server=server),
-        "--file=-",
-        "--node={node}".format(node=node)
-    ]
-
-    # Execute command
-    p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, env=env)
-    out, err = p.communicate(message)
+    igwn_alert_client.publish(topic=node, msg=message)
 
-    success = True if p.returncode == 0 else False
-    return success, err
diff --git a/gracedb/alerts/xmpp.py b/gracedb/alerts/xmpp.py
index 3272bd677d24167cd4e35a851fc7ddf33854e8f9..789e3e841a4e00eb97acd0bc00a73460f28ec610 100644
--- a/gracedb/alerts/xmpp.py
+++ b/gracedb/alerts/xmpp.py
@@ -14,7 +14,7 @@ from core.time_utils import gpsToUtc
 from events.permission_utils import is_external
 from events.shortcuts import is_event
 from superevents.shortcuts import is_superevent
-from .lvalert import send_with_lvalert_overseer, send_with_lvalert_client
+from .lvalert import send_with_lvalert_overseer, send_with_kafka_client
 
 # Set up logger
 logger = logging.getLogger(__name__)
@@ -115,7 +115,7 @@ def issue_xmpp_alerts(event_or_superevent, alert_type, serialized_object,
             message_id = sha1((node_name + msg).encode()).hexdigest()
 
             # Log message
-            logger.info(("issue_xmpp_alerts: sending alert type {alert_type} "
+            logger.info(("issue_kafka_alerts: sending alert type {alert_type} "
                 "with message {msg_id} for {uid} to {node} on {server}").format(
                 alert_type=alert_type, msg_id=message_id, uid=uid,
                 node=node_name, server=server))
@@ -130,18 +130,21 @@ def issue_xmpp_alerts(event_or_superevent, alert_type, serialized_object,
 
                 # If not success, we need to do this the old way.
                 if not success:
-                    logger.critical(("issue_xmpp_alerts: sending message with "
-                        "LVAlert Overseer failed, trying lvalert_send"))
+                    logger.critical(("issue_kafka_alerts: sending message with "
+                        "Overseer failed, trying igwn-alert client code"))
 
-            # If not using LVAlert Overseer or if sending with overseer failed,
-            # use basic lvalert-client send
+            # If not using Overseer or if sending with overseer failed,
+            # use basic igwn-alert client send
             if (not settings.USE_LVALERT_OVERSEER) or (not success):
                 try:
+                    # Make a settings dictionary and then change some names:
                     lvalert_settings_dict = copy.deepcopy(overseer_instance)
-                    server = lvalert_settings_dict.pop('lvalert_server')
-                    send_with_lvalert_client(node_name, msg, server,
+                    port = lvalert_settings_dict.pop('listen_port')
+                    server  = lvalert_settings_dict.pop('lvalert_server')
+                    lvalert_settings_dict['group'] = lvalert_settings_dict.pop('igwn_alert_group')
+                    send_with_kafka_client(node_name, msg, server,
                         **lvalert_settings_dict)
                 except Exception as e:
-                    logger.critical(("issue_xmpp_alerts: error sending "
-                        "message with lvalert client: {e}").format(e=e))
+                    logger.critical(("issue_kafka_alerts: error sending "
+                        "message with igwn-alert client: {e}").format(e=e))
 
diff --git a/requirements.txt b/requirements.txt
index a7f282f80560503303279e9809865b51057800cf..fb6bb51927738908dd8125e7aabba098bca8fe2a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -18,16 +18,12 @@ gpstime==0.5.5
 gssapi==1.6.14
 gunicorn==20.0.4
 html5lib==1.1.0
+igwn-alert-overseer==0.5.1
 ipdb==0.13.6
 ipython==7.21.0
 Jinja2==3.0.1
 lalsuite==6.82 # undocumented requirement for lscsoft-glue
 python-ligo-lw==1.7.1 # adding support ligo un-ilwdchar'ed events
-ligo-lvalert==1.5.6
-# Temporary pin of lvalert-overseer for Python 3 update
-git+https://git.ligo.org/lscsoft/lvalert-overseer.git@e905ed8c888fcc8f31eb881cbfed7c5d7d1612a3#egg=ligo-lvalert-overseer
-# Temporary pin of igwn_alert_overseer (kafka update)
-git+https://git.ligo.org/lscsoft/lvalert-overseer.git@27d29599d2c079d8df3a8049e159bb03ba974a4a
 lscsoft-glue==2.0.0
 lxml==4.6.0
 matplotlib==3.3.4