diff --git a/django/db/models/query.py b/django/db/models/query.py
index 0210a79..2f0a4cf 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1021,8 +1021,9 @@ class ValuesQuerySet(QuerySet):
             self.aggregate_names = None
 
         self.query.select = []
-        if self.extra_names is not None:
-            self.query.set_extra_mask(self.extra_names)
+        extra_mask_names = self.extra_names + list(self.query.extra_order_by or [])
+        if extra_mask_names is not None:
+            self.query.set_extra_mask(extra_mask_names)
         self.query.add_fields(self.field_names, True)
         if self.aggregate_names is not None:
             self.query.set_aggregate_mask(self.aggregate_names)
@@ -1097,7 +1098,7 @@ class ValuesListQuerySet(ValuesQuerySet):
     def iterator(self):
         if self.flat and len(self._fields) == 1:
             for row in self.query.get_compiler(self.db).results_iter():
-                yield row[0]
+                yield row[len(self.query.extra_select_mask)]
         elif not self.query.extra_select and not self.query.aggregate_select:
             for row in self.query.get_compiler(self.db).results_iter():
                 yield tuple(row)
diff --git a/tests/regressiontests/queries/tests.py b/tests/regressiontests/queries/tests.py
index 71ac107..4fd6717 100644
--- a/tests/regressiontests/queries/tests.py
+++ b/tests/regressiontests/queries/tests.py
@@ -1700,14 +1700,28 @@ class EmptyQuerySetTests(TestCase):
 
 
 class ValuesQuerysetTests(BaseQuerysetTest):
-    def test_flat_values_lits(self):
+    def setUp(self):
         Number.objects.create(num=72)
+
+    def test_flat_values_lits(self):
         qs = Number.objects.values_list("num")
         qs = qs.values_list("num", flat=True)
         self.assertValueQuerysetEqual(
             qs, [72]
         )
 
+    def test_extra_values(self):
+        qs = Number.objects.extra(select={'value_plus_one': 'num+1'}).order_by('value_plus_one')
+        qs = qs.values('num')
+        identity = lambda x:x
+        self.assertQuerysetEqual(qs, [{'num': 72}], identity)
+
+    def test_extra_values_list(self):
+        qs = Number.objects.extra(select={'value_plus_one': 'num+1'}).order_by('value_plus_one')
+        qs = qs.values_list('num')
+        identity = lambda x:x
+        self.assertQuerysetEqual(qs, [(72,)], identity)
+
 
 class WeirdQuerysetSlicingTests(BaseQuerysetTest):
     def setUp(self):
