diff --git a/common/lib/xmodule/xmodule/capa_base.py b/common/lib/xmodule/xmodule/capa_base.py
index 8afe4234721bc8420409cd9cc2dc69446e18f208..98bda82a4e61664aaa979f43a35e247c18f30869 100644
--- a/common/lib/xmodule/xmodule/capa_base.py
+++ b/common/lib/xmodule/xmodule/capa_base.py
@@ -952,7 +952,7 @@ class CapaMixin(ScorableXBlockMixin, CapaFields):
         self.lcp.update_score(score_msg, queuekey)
         self.set_state_from_lcp()
         self.set_score(self.score_from_lcp())
-        self.publish_grade()
+        self.publish_grade(grader_response=True)
 
         return dict()  # No AJAX return is needed
 
@@ -1131,21 +1131,21 @@ class CapaMixin(ScorableXBlockMixin, CapaFields):
 
         return answers
 
-    def publish_grade(self, score=None, only_if_higher=None):
+    def publish_grade(self, score=None, only_if_higher=None, **kwargs):
         """
         Publishes the student's current grade to the system as an event
         """
         if not score:
             score = self.score
-        self.runtime.publish(
-            self,
-            'grade',
-            {
-                'value': score.raw_earned,
-                'max_value': score.raw_possible,
-                'only_if_higher': only_if_higher,
-            }
-        )
+        event = {
+            'value': score.raw_earned,
+            'max_value': score.raw_possible,
+            'only_if_higher': only_if_higher,
+        }
+        if kwargs.get('grader_response'):
+            event['grader_response'] = kwargs['grader_response']
+
+        self.runtime.publish(self, 'grade', event)
 
         return {'grade': self.score.raw_earned, 'max_grade': self.score.raw_possible}
 
diff --git a/lms/djangoapps/courseware/module_render.py b/lms/djangoapps/courseware/module_render.py
index b87f1ec1e6f0715c7bacf7a1ee150378f4345f53..7ffc7a8b78c3f11b721564785ac9078515dd0eea 100644
--- a/lms/djangoapps/courseware/module_render.py
+++ b/lms/djangoapps/courseware/module_render.py
@@ -539,6 +539,7 @@ def get_module_system_for_user(
             raw_possible=event['max_value'],
             only_if_higher=event.get('only_if_higher'),
             score_deleted=event.get('score_deleted'),
+            grader_response=event.get('grader_response')
         )
 
     def handle_deprecated_progress_event(block, event):
diff --git a/lms/djangoapps/courseware/tests/test_module_render.py b/lms/djangoapps/courseware/tests/test_module_render.py
index a3b6403ad60a6f92145fcc4aa982e79fa030b434..4cbd404ebe29c88a7731e35dd467478aced0de55 100644
--- a/lms/djangoapps/courseware/tests/test_module_render.py
+++ b/lms/djangoapps/courseware/tests/test_module_render.py
@@ -2018,6 +2018,7 @@ class TestXmoduleRuntimeEvent(TestSubmittingProblems):
                 'modified': datetime.now().replace(tzinfo=pytz.UTC),
                 'score_db_table': 'csm',
                 'score_deleted': None,
+                'grader_response': None
             }
             send_mock.assert_called_with(**expected_signal_kwargs)
 
diff --git a/lms/djangoapps/grades/signals/handlers.py b/lms/djangoapps/grades/signals/handlers.py
index 6c1f5decdde0ca79e54da75f86de6ef86ff66bfd..c900834c3ce1283f0bb7eeeaf254fa4616b483ba 100644
--- a/lms/djangoapps/grades/signals/handlers.py
+++ b/lms/djangoapps/grades/signals/handlers.py
@@ -172,6 +172,7 @@ def score_published_handler(sender, block, user, raw_earned, raw_possible, only_
             modified=score_modified_time,
             score_db_table=ScoreDatabaseTableEnum.courseware_student_module,
             score_deleted=kwargs.get('score_deleted', False),
+            grader_response=kwargs.get('grader_response', False)
         )
     return update_score
 
@@ -202,6 +203,7 @@ def problem_raw_score_changed_handler(sender, **kwargs):  # pylint: disable=unus
         score_deleted=kwargs.get('score_deleted', False),
         modified=kwargs['modified'],
         score_db_table=kwargs['score_db_table'],
+        grader_response=kwargs.get('grader_response', False)
     )
 
 
diff --git a/lms/djangoapps/grades/tests/test_signals.py b/lms/djangoapps/grades/tests/test_signals.py
index 4a9a17626b865cf4a40da2b423b055ccfdf9668c..08c86f60e9a47284f366d1cdd10f5bb5267b3da0 100644
--- a/lms/djangoapps/grades/tests/test_signals.py
+++ b/lms/djangoapps/grades/tests/test_signals.py
@@ -63,6 +63,7 @@ PROBLEM_RAW_SCORE_CHANGED_KWARGS = {
     'score_deleted': True,
     'modified': FROZEN_NOW_TIMESTAMP,
     'score_db_table': ScoreDatabaseTableEnum.courseware_student_module,
+    'grader_response': None
 }
 
 PROBLEM_WEIGHTED_SCORE_CHANGED_KWARGS = {
@@ -76,6 +77,7 @@ PROBLEM_WEIGHTED_SCORE_CHANGED_KWARGS = {
     'score_deleted': True,
     'modified': FROZEN_NOW_TIMESTAMP,
     'score_db_table': ScoreDatabaseTableEnum.courseware_student_module,
+    'grader_response': None
 }
 
 
diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt
index 3860575fb3388573f036eae72113b53c9f6982a5..350711b8d5bdde52e869f7d2e0a6b9587bf9d334 100644
--- a/requirements/edx/base.txt
+++ b/requirements/edx/base.txt
@@ -111,11 +111,11 @@ edx-ace==0.1.9
 edx-analytics-data-api-client==0.14.4
 edx-ccx-keys==0.2.1
 edx-celeryutils==0.2.7
-edx-completion==0.1.8
+edx-completion==0.1.9
 edx-django-oauth2-provider==1.3.4
 edx-django-release-util==0.3.1
 edx-django-sites-extensions==2.3.1
-edx-django-utils==0.5.1
+edx-django-utils==1.0.0
 edx-drf-extensions==1.6.2
 edx-enterprise==0.73.0
 edx-i18n-tools==0.4.6
@@ -234,7 +234,7 @@ uritemplate==3.0.0        # via coreapi
 urllib3==1.23             # via elasticsearch
 user-util==0.1.5
 voluptuous==0.11.5
-watchdog==0.8.3
+watchdog==0.9.0
 web-fragments==0.2.2
 webob==1.8.2              # via xblock
 wrapt==1.10.5
diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt
index 66adeface0693dc7e3f7717dc72534422be13bef..8cc2f1e63df5ae1dbb0e87f736adfde92beba798 100644
--- a/requirements/edx/development.txt
+++ b/requirements/edx/development.txt
@@ -53,7 +53,7 @@ argh==0.26.2
 argparse==1.4.0
 asn1crypto==0.24.0
 astroid==1.5.2
-atomicwrites==1.1.5
+atomicwrites==1.2.0
 attrs==17.4.0
 babel==1.3
 backports.functools-lru-cache==1.5
@@ -130,11 +130,11 @@ edx-ace==0.1.9
 edx-analytics-data-api-client==0.14.4
 edx-ccx-keys==0.2.1
 edx-celeryutils==0.2.7
-edx-completion==0.1.8
+edx-completion==0.1.9
 edx-django-oauth2-provider==1.3.4
 edx-django-release-util==0.3.1
 edx-django-sites-extensions==2.3.1
-edx-django-utils==0.5.1
+edx-django-utils==1.0.0
 edx-drf-extensions==1.6.2
 edx-enterprise==0.73.0
 edx-i18n-tools==0.4.6
@@ -238,7 +238,7 @@ pluggy==0.6.0
 polib==1.1.0
 psutil==1.2.1
 py2neo==3.1.2
-py==1.5.4
+py==1.6.0
 pyasn1-modules==0.2.2
 pyasn1==0.4.4
 pycodestyle==2.3.1
@@ -269,7 +269,7 @@ pytest-cov==2.5.1
 pytest-django==3.1.2
 pytest-forked==0.2
 pytest-randomly==1.2.3
-pytest-xdist==1.22.5
+pytest-xdist==1.23.0
 pytest==3.6.3
 python-dateutil==2.4.0
 python-levenshtein==0.12.0
@@ -311,9 +311,9 @@ social-auth-app-django==2.1.0
 social-auth-core==1.7.0
 sorl-thumbnail==12.3
 sortedcontainers==0.9.2
-sphinx==1.7.7
+sphinx==1.7.8
 sphinxcontrib-websupport==1.1.0  # via sphinx
-splinter==0.8.0
+splinter==0.9.0
 sqlparse==0.2.4           # via django-debug-toolbar
 stevedore==1.10.0
 sure==1.4.11
@@ -327,7 +327,7 @@ tox==3.2.1
 traceback2==1.4.0
 transifex-client==0.13.4
 twisted==16.6.0
-typing==3.6.4             # via sphinx
+typing==3.6.6             # via sphinx
 unicodecsv==0.14.1
 unidecode==1.0.22
 unittest2==1.1.0
@@ -339,7 +339,7 @@ virtualenv==16.0.0
 voluptuous==0.11.5
 vulture==0.29
 w3lib==1.19.0
-watchdog==0.8.3
+watchdog==0.9.0
 web-fragments==0.2.2
 webob==1.8.2
 werkzeug==0.14.1
diff --git a/requirements/edx/paver.txt b/requirements/edx/paver.txt
index 9b555e332264c3de141a21a602aa083b7b310158..8de84d7f48d17e3f35e14755db928247e8644995 100644
--- a/requirements/edx/paver.txt
+++ b/requirements/edx/paver.txt
@@ -22,5 +22,5 @@ pyyaml==3.13              # via watchdog
 requests==2.9.1
 six==1.11.0               # via edx-opaque-keys, libsass, paver, stevedore
 stevedore==1.10.0
-watchdog==0.8.3
+watchdog==0.9.0
 wrapt==1.10.5
diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt
index 3b350608f5a3e56d5b688205a4de6d3647c084ae..7de2164b90bd885de859de1711b26e962f39fcbd 100644
--- a/requirements/edx/testing.txt
+++ b/requirements/edx/testing.txt
@@ -50,7 +50,7 @@ argh==0.26.2
 argparse==1.4.0
 asn1crypto==0.24.0
 astroid==1.5.2            # via edx-lint, pylint, pylint-celery
-atomicwrites==1.1.5       # via pytest
+atomicwrites==1.2.0       # via pytest
 attrs==17.4.0
 babel==1.3
 backports.functools-lru-cache==1.5  # via astroid, pylint
@@ -125,11 +125,11 @@ edx-ace==0.1.9
 edx-analytics-data-api-client==0.14.4
 edx-ccx-keys==0.2.1
 edx-celeryutils==0.2.7
-edx-completion==0.1.8
+edx-completion==0.1.9
 edx-django-oauth2-provider==1.3.4
 edx-django-release-util==0.3.1
 edx-django-sites-extensions==2.3.1
-edx-django-utils==0.5.1
+edx-django-utils==1.0.0
 edx-drf-extensions==1.6.2
 edx-enterprise==0.73.0
 edx-i18n-tools==0.4.6
@@ -227,7 +227,7 @@ pluggy==0.6.0             # via pytest, tox
 polib==1.1.0
 psutil==1.2.1
 py2neo==3.1.2
-py==1.5.4                 # via pytest, tox
+py==1.6.0                 # via pytest, tox
 pyasn1-modules==0.2.2     # via service-identity
 pyasn1==0.4.4             # via pyasn1-modules, service-identity
 pycodestyle==2.3.1
@@ -257,7 +257,7 @@ pytest-cov==2.5.1
 pytest-django==3.1.2
 pytest-forked==0.2        # via pytest-xdist
 pytest-randomly==1.2.3
-pytest-xdist==1.22.5
+pytest-xdist==1.23.0
 pytest==3.6.3
 python-dateutil==2.4.0
 python-levenshtein==0.12.0
@@ -297,7 +297,7 @@ social-auth-app-django==2.1.0
 social-auth-core==1.7.0
 sorl-thumbnail==12.3
 sortedcontainers==0.9.2
-splinter==0.8.0
+splinter==0.9.0
 stevedore==1.10.0
 sure==1.4.11
 sympy==0.7.1
@@ -320,7 +320,7 @@ user-util==0.1.5
 virtualenv==16.0.0        # via tox
 voluptuous==0.11.5
 w3lib==1.19.0             # via parsel, scrapy
-watchdog==0.8.3
+watchdog==0.9.0
 web-fragments==0.2.2
 webob==1.8.2
 werkzeug==0.14.1          # via flask