diff --git a/lti_consumer/lti.py b/lti_consumer/lti.py
index d0871bab6dda62af37e4159118044c395398339e..43e6bcd665045d4636720aa3c6de481eda3b1670 100644
--- a/lti_consumer/lti.py
+++ b/lti_consumer/lti.py
@@ -152,7 +152,14 @@ class LtiConsumer(object):
             real_user_object = self.xblock.runtime.get_real_user(self.xblock.runtime.anonymous_student_id)
             self.xblock.user_email = getattr(real_user_object, "email", "")
             self.xblock.user_username = getattr(real_user_object, "username", "")
-            self.xblock.user_language = getattr(getattr(real_user_object, "profile", ""), "language", "")
+            user_profile = getattr(real_user_object, "profile", None)
+            if user_profile is not None:
+                language_proficiencies = user_profile.language_proficiencies.all()
+                if len(language_proficiencies) == 1:
+                    # We only want to send the user's language preference if the user has
+                    # a single preferred language - having multiple language proficiencies
+                    # isn't an API violation, but can't be set up via the UI.
+                    self.xblock.user_language = language_proficiencies[0].code
 
         if self.xblock.ask_to_send_username and self.xblock.user_username:
             lti_parameters["lis_person_sourcedid"] = self.xblock.user_username
diff --git a/lti_consumer/tests/unit/test_lti.py b/lti_consumer/tests/unit/test_lti.py
index a7bdb7fa1cdbf187a1aa09ce2d2a8d9a6dd1aa40..ee631ddc4ea4b6eb8748ebeb197a25e55296a189 100644
--- a/lti_consumer/tests/unit/test_lti.py
+++ b/lti_consumer/tests/unit/test_lti.py
@@ -185,7 +185,7 @@ class TestLtiConsumer(TestLtiConsumerXBlock):
         self.lti_consumer.xblock.runtime.get_real_user.return_value = Mock(
             email='edx@example.com',
             username='edx',
-            profile=Mock(language='en')
+            profile=Mock(language_proficiencies=Mock(all=Mock(return_value=[Mock(code='en')])))
         )
         self.assertEqual(self.lti_consumer.get_signed_lti_parameters(), expected_lti_parameters)
 
@@ -197,6 +197,20 @@ class TestLtiConsumer(TestLtiConsumerXBlock):
         del expected_lti_parameters['launch_presentation_locale']
         self.assertEqual(self.lti_consumer.get_signed_lti_parameters(), expected_lti_parameters)
 
+        # Test that we don't send a language when no preferred language exists
+        self.lti_consumer.xblock.runtime.get_real_user.return_value = Mock(
+            spec=['profile'],
+            profile=Mock(language_proficiencies=Mock(all=Mock(return_value=[])))
+        )
+        self.assertEqual(self.lti_consumer.get_signed_lti_parameters(), expected_lti_parameters)
+
+        # Test that we don't send a language when multiple preferred languages exist
+        self.lti_consumer.xblock.runtime.get_real_user.return_value = Mock(
+            spec=['profile'],
+            profile=Mock(language_proficiencies=Mock(all=Mock(return_value=[Mock(code='es'), Mock(code='en')])))
+        )
+        self.assertEqual(self.lti_consumer.get_signed_lti_parameters(), expected_lti_parameters)
+
     def test_get_result(self):
         """
         Test `get_result` returns valid json response
diff --git a/setup.py b/setup.py
index a9602acedc335f51a25c4e7378e86dcca184ff35..9eae70105b3f6ecb8db203d5a6f57d8a87c9f070 100644
--- a/setup.py
+++ b/setup.py
@@ -22,7 +22,7 @@ def package_data(pkg, roots):
 
 setup(
     name='lti_consumer-xblock',
-    version='1.0.7',
+    version='1.0.8',
     description='This XBlock implements the consumer side of the LTI specification.',
     packages=[
         'lti_consumer',