diff --git a/django/contrib/admin/static/admin/css/base.css b/django/contrib/admin/static/admin/css/base.css
index 89f2225..d0a02f4 100644
--- a/django/contrib/admin/static/admin/css/base.css
+++ b/django/contrib/admin/static/admin/css/base.css
@@ -309,46 +309,57 @@ tr.alt {
 
 /* SORTABLE TABLES */
 
+thead th {
+    padding: 0;
+    line-height: normal;
+}
+
 thead th a:link, thead th a:visited {
     color: #666;
-    display: block;
+}
+
+thead th a.sortremove {
+    display: none; /* Hide by default */
 }
 
 thead th.sorted {
     background: #c5c5c5 url(../img/nav-bg-selected.gif) top left repeat-x;
 }
 
-table thead th.sorted a {
-    padding-right: 13px;
+table thead th .text a {
+    display: block;
+    padding: 2px 5px;
+    cursor: pointer; /* IE needs this */
 }
 
-table thead th.ascending a {
-    background: url(../img/arrow-up.gif) right .4em no-repeat;
+table thead th .text a:hover {
+    background-color: #FFFFF4;
 }
 
-table thead th.descending a {
-    background: url(../img/arrow-down.gif) right .4em no-repeat;
+table thead th.sorted .sortoptions {
+    display: block;
+    padding: 2px 5px;
+    float: right;
+    text-align: right;
 }
 
-table thead th.sorted a span.text {
-   display: block;
-   float: left;
-   cursor: pointer; /* IE needs this */
+table thead th.sorted img#primary-sort-icon {
+    cursor: pointer;
 }
 
-table thead th.sorted a span.sortpos {
-   display: block;
-   float: right;
-   font-size: .6em;
-   text-align: right;
-   cursor: pointer; /* IE needs this */
+table thead th.sorted .sortposition {
+    font-size: .8em;
+    min-width: 12px;
+    text-align: center;
+    display:inline-block;
+    cursor: pointer; /* IE needs this */
 }
 
 table thead th.sorted a img {
    vertical-align: top;
 }
 
-table thead th.sorted a span.clear {
+table thead th.sorted a .clear {
    display: block;
    clear: both;
 }
diff --git a/django/contrib/admin/static/admin/css/rtl.css b/django/contrib/admin/static/admin/css/rtl.css
index c32fcf0..76a439d 100644
--- a/django/contrib/admin/static/admin/css/rtl.css
+++ b/django/contrib/admin/static/admin/css/rtl.css
@@ -80,22 +80,7 @@ div.breadcrumbs {
 
 /* SORTABLE TABLES */
 
-
-table thead th.sorted a {
-    padding-left: 13px;
-    padding-right: 0px;
-}
-
-table thead th.ascending a,
-table thead th.descending a {
-    background-position: left;
-}
-
-table thead th.sorted a span.text {
-   float: right;
-}
-
-table thead th.sorted a span.sortpos {
+table thead th.sorted .sortoptions {
    float: left;
 }
 
@@ -260,4 +245,4 @@ div.colM {
 
 .submit-row input {
     float: left;
-}
\ No newline at end of file
+}
diff --git a/django/contrib/admin/static/admin/img/arrow-down-hover.gif b/django/contrib/admin/static/admin/img/arrow-down-hover.gif
new file mode 100644
index 0000000000000000000000000000000000000000..30d63d61788f7cc03d18f1516738b11f89cdf36f
GIT binary patch
diff --git a/django/contrib/admin/static/admin/img/arrow-down.gif b/django/contrib/admin/static/admin/img/arrow-down.gif
index a967b9fd5563a0fc2f5fde8ec0f7de3fc8fbc5a9..1161248023ee7d02f6bdc9eb0f4185cf6c1280ac 100644
GIT binary patch
diff --git a/django/contrib/admin/static/admin/img/arrow-up-hover.gif b/django/contrib/admin/static/admin/img/arrow-up-hover.gif
new file mode 100644
index 0000000000000000000000000000000000000000..29a3dc500b6ae6f442e46da95ec10b63dabf0a58
GIT binary patch
diff --git a/django/contrib/admin/static/admin/img/arrow-up.gif b/django/contrib/admin/static/admin/img/arrow-up.gif
index 3fe4851399a37337891ccf5452ee5d59bbedeec7..d0842b3545151ab949a84aeefa39bcfdd83c828b 100644
GIT binary patch
diff --git a/django/contrib/admin/static/admin/img/icon-remove-small.gif b/django/contrib/admin/static/admin/img/icon-remove-small.gif
new file mode 100644
index 0000000000000000000000000000000000000000..288c2ad7cc7b807ab02d035c098c80b2c11458b6
GIT binary patch
diff --git a/django/contrib/admin/static/admin/img/icon_cog-hover.gif b/django/contrib/admin/static/admin/img/icon_cog-hover.gif
new file mode 100644
index 0000000000000000000000000000000000000000..45611686ee942ed9ee4277564f7c00a83684417b
GIT binary patch
diff --git a/django/contrib/admin/templates/admin/change_list_results.html b/django/contrib/admin/templates/admin/change_list_results.html
index b1db647..af9176e 100644
--- a/django/contrib/admin/templates/admin/change_list_results.html
+++ b/django/contrib/admin/templates/admin/change_list_results.html
@@ -11,15 +11,18 @@
 <tr>
 {% for header in result_headers %}
 <th scope="col" {{ header.class_attrib }}>
-  {% if header.sortable %}<a href="{{ header.url_primary }}">{% endif %}
-  <span class="text">{{ header.text|capfirst }}</span>
-  {% if header.sortable %}
-    {% if header.sort_pos > 0 %}<span class="sortpos">
-      {% if header.sort_pos == 1 %}<img id="primary-sort-icon" src="{% static "admin/img/icon_cog.gif" %}" alt="" />&nbsp;{% endif %}
-      {{ header.sort_pos }}</span>
-    {% endif %}
-    <span class="clear"></span></a>
-  {% endif %}
+   {% if header.sortable %}
+     {% if header.sort_pos > 0 %}
+       <div class="sortoptions">
+       {% if header.sort_pos == 1 %}<img id="primary-sort-icon" src="{% static "admin/img/icon_cog.gif" %}" alt="{% trans "options" %}" title="{% trans "Sorting options" %}"/>&nbsp;{% endif %}
+       <span class="sortposition">{{ header.sort_pos }}</span>
+       <a class="sortremove" href="{{ header.url_remove }}" title="{% trans "Remove from sorting" %}"><img src="{% static "admin/img/icon-remove-small.gif" %}"></a>
+       <a href="{{ header.url_toggle }}" class="toggle {% if header.ascending %}ascending{% else %}descending{% endif %}"><img src="{% if header.ascending %}{% static "admin/img/arrow-up.gif" %}{% else %}{% static "admin/img/arrow-down.gif" %}{% endif %}" alt="{% trans "toggle" %}" title="{% trans "Toggle sorting" %}" /></a>
+       </div>
+     {% endif %}
+   {% endif %}
+   <div class="text">{% if header.sortable %}<a href="{{ header.url_primary }}" title="{% trans "Make primary sorting column and toggle sorting" %}">{{ header.text|capfirst }}</a>{% else %}{{ header.text|capfirst }}{% endif %}</div>
+   <div class="clear"></div>
 </th>{% endfor %}
 </tr>
 </thead>
@@ -114,6 +117,33 @@
             hidePopup();
             ev.preventDefault()
         });
+
+        $('a.toggle.ascending img').mouseenter(function(){
+            $(this).attr('src', '{% static "admin/img/arrow-up-hover.gif" %}');
+        });
+        $('a.toggle.ascending img').mouseout(function(){
+            $(this).attr('src', '{% static "admin/img/arrow-up.gif" %}');
+        });
+        $('a.toggle.descending img').mouseenter(function(){
+            $(this).attr('src', '{% static "admin/img/arrow-down-hover.gif" %}');
+        });
+        $('a.toggle.descending img').mouseout(function(){
+            $(this).attr('src', '{% static "admin/img/arrow-down.gif" %}');
+        });
+        $('img#primary-sort-icon').mouseenter(function(){
+            $(this).attr('src', '{% static "admin/img/icon_cog-hover.gif" %}');
+        });
+        $('img#primary-sort-icon').mouseout(function(){
+            $(this).attr('src', '{% static "admin/img/icon_cog.gif" %}');
+        });
+        $('span.sortposition').mouseover(function(){
+            $(this).hide();
+            $(this).siblings('a.sortremove').show();
+        });
+        $('a.sortremove').mouseleave(function(){
+            $(this).hide();
+            $(this).siblings('span.sortposition').show();
+        });
     });
 })(django.jQuery);
 //-->
