diff --git a/app/__init__.py b/app/__init__.py
index 7753b037d2ce7ebe36328a8061524473dd2c39c2..dffb23cf3c50424e70d77d173274de04b6cbd4d8 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -12,6 +12,10 @@ from flask_bootstrap import Bootstrap
 import random
 import os
 import json
+import sys
+
+sys.path.append(vars.rabbitmq_agents_loc)
+import rc_util
 
 def create_app(config_name):
     app = Flask(__name__, static_folder='static') # initialization of the flask app
@@ -22,11 +26,13 @@ def create_app(config_name):
         username_key = list(filter(lambda key: (request.headers.get(key)  is not None), vars.username_key))
         fullname_key = list(filter(lambda key: (request.headers.get(key) is not None), vars.fullname_key))
         email_key = list(filter(lambda key: (request.headers.get(key) is not None), vars.email_key))
+        eppa_key = list(filter(lambda key: (request.headers.get(key) is not None), vars.eppa_key))
 
         user = {
             "username": (request.headers.get(username_key[0]) if len(username_key) > 0 else None),
             "fullname": (request.headers.get(fullname_key[0]) if len(fullname_key) > 0 else None),
             "email": (request.headers.get(email_key[0]) if len(email_key) > 0 else None),
+            "eppa": (request.headers.get(eppa_key[0]) if len(eppa_key) > 0 else None),
         }
 
         return user
@@ -34,32 +40,48 @@ def create_app(config_name):
     @app.route('/', methods=['GET', 'POST']) # initial route to display the reg page
     def index():
 
+        invalid_eppa = ["staff"]
+
         if 'uid' not in session:
             session['uid']=str(uuid.uuid4())
 
         if 'user' not in session:
             session["user"] = get_authorized_user()
 
-        if "redir" in request.args and 'return_url' not in session: # check for redir arg in url
-            session['return_url'] = request.args.get("redir")
+        session['return_url'] = request.args.get('redir', vars.default_referrer)
 
-        elif "redir" not in request.args and 'return_url' not in session:
-            session['return_url'] = vars.default_referrer
-        else:
-            session['return_url'] = request.referrer
 
-        return render_template('auth/SignUp.html', room_id=session['uid'],
+#        if session['user'].get('eppa') not  in invalid_eppa:
+#            return render_template('errors/blocked.html', title='shibboleth error')
+
+        if rc_util.check_state(session['user'].get('username')) == "blocked":
+            return render_template('errors/blocked.html')
+
+        elif rc_util.check_state(session['user'].get('username')) == "certification":
+              return render_template('errors/certify.html', room_id=session['uid'],
                                username=session['user'].get('username'),
                                fullname=session['user'].get('fullname'), email=session['user'].get('email'),
                                referrer=session['return_url'], cancel_url=vars.default_referrer,
                                welcome_msg=messages.welcome_message,
                                cancel_msg=messages.cancel_message,
                                error_msg=messages.error_message)
+        else:
+            return render_template('auth/SignUp.html', room_id=session['uid'],
+                               username=session['user'].get('username'),
+                               fullname=session['user'].get('fullname'), email=session['user'].get('email'),
+                               referrer=session['return_url'], cancel_url=vars.default_referrer,
+                               welcome_msg=messages.welcome_message,
+                               cancel_msg=messages.cancel_message,
+                               error_msg=messages.error_message)
+
 
-    @app.route('/error_account')
-    def error_account_create():    
-        return render_template('errors/error.html', title='account creation failed')
+    @app.route('/blocked_account')
+    def account_block():    
+        return render_template('errors/blocked.html')
 
+    @app.route('/certify_account')
+    def error_certify():
+        return render_template('errors/certification.html')
 
     # misc page error catching
     @app.errorhandler(403)
diff --git a/app/static/scripts/function.js b/app/static/scripts/function.js
index ae406d73e8eb8bcb12bab94c16088026b3ca4c0b..8848dae83c5dc8d75c3e78401fc230dc87e43dab 100644
--- a/app/static/scripts/function.js
+++ b/app/static/scripts/function.js
@@ -16,6 +16,14 @@ function request_account() {
     })
 }
 
+function certify_account() {
+    socket.emit('request certification', {
+        fullname: document.getElementById("fullname").value,
+        email: document.getElementById("email").value,
+        username: document.getElementById("username").value
+    })
+}
+
 function renderDom(title, message, error_msg) {
     document.getElementById("form-wrapper").innerHTML = "<h3>" + title + "</h3><br>";
     document.getElementById("form-wrapper").innerHTML += "<p>" +  message + "</p><br>";
diff --git a/app/templates/errors/blocked.html b/app/templates/errors/blocked.html
new file mode 100644
index 0000000000000000000000000000000000000000..964235ee1dfb6324c37f53ae2a21528d4efa7503
--- /dev/null
+++ b/app/templates/errors/blocked.html
@@ -0,0 +1,74 @@
+<html class="gr__rc_uab_edu">
+<title>User Blocked </title>
+<head>
+<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
+<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
+<script src="{{ url_for('static', filename='scripts/function.js') }}"></script>
+
+
+<link rel="shortcut icon" type="image/x-icon" href="/public/favicon.ico">
+<link rel="stylesheet" media="all" href="{{ url_for('static', filename='style/application.css') }}">
+<link rel="stylesheet" media="all" href="{{ url_for('static', filename='style/app2.css') }}">
+
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<style>
+  .navbar-inverse { background-color: rgb(0,99,65); }
+  button{ margin: 13px;
+  .important { color: #336699; }}
+</style>
+
+</head>
+
+
+<body data-gr-c-s-loaded="true">
+<header>
+  <nav class="navbar navbar-inverse navbar-static-top">
+    <div class="container-fluid">
+      <div class="navbar-header">
+        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-9" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
+        <a class="navbar-brand" href="/"> UAB Research Computing</a>
+      </div>
+      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-9">
+        <div class="navbar-right">
+          <ul class="nav navbar-nav">
+          <li>
+            <a target="_blank" href="https://docs.uabgrid.uab.edu/wiki/Cheaha_GettingStarted">
+              <i class="fas fa-info-circle fa-fw"></i> Online Documentation
+            </a>
+          </li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+<div class="container content" role="main" style="width: 100%">
+  <div class="col-md-2 col-sm-2 my-col">
+    <img alt="logo" height="auto" width="80%"  src="{{ url_for('static', filename='img/logo_svg.svg') }}">
+    <a href="https://tinyurl.com/cheahaAL" target="_blank"></a>
+  </div>
+
+  <div class="col-md-10 col-sm-10 my-col">
+    <div id="form-wrapper">
+    <h2> Account blocked </h2>
+    <p style="font-size:110%;"> {{ welcome_msg |safe }}</p>
+    </div>
+  </div>
+</div>  
+
+<footer>
+  <div class="container-fluid">
+    <div class="row">
+      <div class="col-md-6 col-sm-6">
+        <a href="https://osc.github.io/Open-OnDemand/">
+	  <img class="footer-logo" alt="Powered by Open OnDemand" height="40" style="margin-bottom: 20px" src="{{ url_for('static', filename='img/OpenOnDemand_powered_by_RGB-cb3aad5ff5350c7994f250fb334ddcc72e343233ce99eb71fda93beddd76a847.svg') }}">
+        </a>
+      </div>
+    </div>
+  </div>
+</footer>
+
+</body>
+</html>
diff --git a/app/templates/errors/certification.html b/app/templates/errors/certification.html
new file mode 100644
index 0000000000000000000000000000000000000000..529b7c7770a83095705db4a87bbea06b6ceee42d
--- /dev/null
+++ b/app/templates/errors/certification.html
@@ -0,0 +1,75 @@
+<html class="gr__rc_uab_edu">
+<title>User Certification Needed </title>
+<head>
+<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
+<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
+<script src="{{ url_for('static', filename='scripts/function.js') }}"></script>
+
+
+<link rel="shortcut icon" type="image/x-icon" href="/public/favicon.ico">
+<link rel="stylesheet" media="all" href="{{ url_for('static', filename='style/application.css') }}">
+<link rel="stylesheet" media="all" href="{{ url_for('static', filename='style/app2.css') }}">
+
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<style>
+  .navbar-inverse { background-color: rgb(0,99,65); }
+  button{ margin: 13px;
+  .important { color: #336699; }}
+</style>
+
+</head>
+
+
+<body data-gr-c-s-loaded="true">
+<header>
+  <nav class="navbar navbar-inverse navbar-static-top">
+    <div class="container-fluid">
+      <div class="navbar-header">
+        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-9" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
+        <a class="navbar-brand" href="/"> UAB Research Computing</a>
+      </div>
+      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-9">
+        <div class="navbar-right">
+          <ul class="nav navbar-nav">
+          <li>
+            <a target="_blank" href="https://docs.uabgrid.uab.edu/wiki/Cheaha_GettingStarted">
+              <i class="fas fa-info-circle fa-fw"></i> Online Documentation
+            </a>
+          </li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+<div class="container content" role="main" style="width: 100%">
+  <div class="col-md-2 col-sm-2 my-col">
+    <img alt="logo" height="auto" width="80%"  src="{{ url_for('static', filename='img/logo_svg.svg') }}">
+    <a href="https://tinyurl.com/cheahaAL" target="_blank"></a>
+  </div>
+
+  <div class="col-md-10 col-sm-10 my-col">
+    <div id="form-wrapper">
+    <h2> Account/User Certification Needed </h2>
+    <p style="font-size:110%;"> {{ welcome_msg |safe }}</p>
+      <button class="btn btn-primary btn-md"  id="submit" name="submit" type="button" value="Submit" onclick="accountCertification()"> Certify Account</button>
+    </div>
+  </div>
+</div>  
+
+<footer>
+  <div class="container-fluid">
+    <div class="row">
+      <div class="col-md-6 col-sm-6">
+        <a href="https://osc.github.io/Open-OnDemand/">
+	  <img class="footer-logo" alt="Powered by Open OnDemand" height="40" style="margin-bottom: 20px" src="{{ url_for('static', filename='img/OpenOnDemand_powered_by_RGB-cb3aad5ff5350c7994f250fb334ddcc72e343233ce99eb71fda93beddd76a847.svg') }}">
+        </a>
+      </div>
+    </div>
+  </div>
+</footer>
+
+</body>
+</html>
diff --git a/run.py b/run.py
index f69a20825a47ab2d526807240273a5737a878ac5..d68af7680ea9fe04320aacde2022edf8cae3dae8 100644
--- a/run.py
+++ b/run.py
@@ -35,5 +35,16 @@ def request_account(json, methods=['GET', 'POST']):
         print(time.strftime("%m-%d-%Y_%H:%M:%S") + "\tError in account creation: ", e)
         socketio.emit("Account creation failed", room)
 
+@socketio.on('request certification')
+def certify_account(json, methods=['GET', 'POST']):
+    print (time.strftime("%m-%d-%Y_%H:%M:%S") + '\tQueue request received: ' + str(json))
+    room = str(session['uid'])
+    print("CERTIFY Room: {}".format(room))
+    try:
+        tasks.celery_certify_account(json, session=room )
+    except Exception as e:
+        print(time.strftime("%m-%d-%Y_%H:%M:%S") + "\tError in account certification: ", e)
+        socketio.emit("Account certification failed", room)
+
 if __name__ == '__main__':
     socketio.run(app, host='0.0.0.0')
diff --git a/tasks.py b/tasks.py
index acf38186af98bb565c808bbd72c59b32e9d12faf..5721e470dbfa34a61b51663f7a7179f61d02c025 100644
--- a/tasks.py
+++ b/tasks.py
@@ -59,4 +59,20 @@ def celery_create_account(json, session):
     rc_util.add_account(username, queuename, email, fullname, reason)
     print('sent account info')
     print('Waiting for completion...')
-    rc_util.consume(queuename, routing_key=f'complete.{queuename}', callback=gen_f(room))    
+    rc_util.consume(queuename, routing_key=f'complete.{queuename}', callback=gen_f(room))
+
+@celery.task
+def celery_certify_account(json, session):
+    room = session
+    username= json['username']
+    email= json['email']
+    fullname= json['fullname']
+    queuename= rc_util.encode_name(username)
+
+    print("CERTIFY : "+time.strftime("%m-%d-%Y_%H:%M:%S") + '\tUser ' + username + ' added to queue')
+    send_msg('certifying account', room)
+    print(username)
+    rc_util.update_state(username, 'ok')
+    print('sent account info')
+    print('Waiting for certification...')
+    send_msg('certified', room)