Index: django/contrib/admin/media/css/widgets.css
===================================================================
--- django/contrib/admin/media/css/widgets.css	(revision 3754)
+++ django/contrib/admin/media/css/widgets.css	(working copy)
@@ -58,10 +58,12 @@
 .calendarnav { font-size:10px; text-align: center; color:#ccc; margin:0; padding:1px 3px; }
 .calendarnav a:link, #calendarnav a:visited, #calendarnav a:hover { color: #999; }
 .calendar-shortcuts { background:white; font-size:10px; line-height:11px; border-top:1px solid #eee; padding:3px 0 4px; color:#ccc; }
-.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { display:block; position:absolute; font-weight:bold; font-size:12px; background:#C9DBED url(../img/admin/default-bg.gif) bottom left repeat-x; padding:1px 4px 2px 4px; color:white; }
-.calendarnav-previous:hover, .calendarnav-next:hover { background:#036; }
-.calendarnav-previous { top:0; left:0; }
-.calendarnav-next { top:0; right:0; }
+.calendarbox .calendarnav-previous-year, .calendarbox .calendarnav-next-year, .calendarbox .calendarnav-previous-month, .calendarbox .calendarnav-next-month { display:block; position:absolute; font-weight:bold; font-size:9px; background:#C9DBED url(../img/admin/default-bg.gif) bottom left repeat-x; padding:3px 2px 4px 2px; color:white; }
+.calendarnav-previous-year:hover, .calendarnav-next-year:hover, .calendarnav-previous-month:hover, .calendarnav-next-month:hover { background:#036; }
+.calendarnav-previous-year { top:0; left:0; }
+.calendarnav-previous-month { top:0; left:20px; }
+.calendarnav-next-month { top:0; right:20px; }
+.calendarnav-next-year { top:0; right:0; }
 .calendar-cancel { margin:0 !important; padding:0; font-size:10px; background:#e1e1e1 url(../img/admin/nav-bg.gif) 0 50% repeat-x;  border-top:1px solid #ddd; }
 .calendar-cancel a { padding:2px; color:#999; }
 ul.timelist, .timelist li { list-style-type:none; margin:0; padding:0; }
@@ -98,4 +100,4 @@
 .editinline-stacked .inline-object { margin-left:210px; background:white; }
 .editinline-stacked .inline-source { float:left; width:200px; background:#f8f8f8;  }
 .editinline-stacked .inline-splitter { float:left; width:9px; background:#f8f8f8 url(../img/admin/inline-splitter-bg.gif) 50% 50% no-repeat; border-right:1px solid #ccc; }
-.editinline-stacked .controls { clear:both; background:#e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x; padding:3px 4px; font-size:11px; border-top:1px solid #ddd; }
\ No newline at end of file
+.editinline-stacked .controls { clear:both; background:#e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x; padding:3px 4px; font-size:11px; border-top:1px solid #ddd; }
Index: django/contrib/admin/media/js/admin/DateTimeShortcuts.js
===================================================================
--- django/contrib/admin/media/js/admin/DateTimeShortcuts.js	(revision 3754)
+++ django/contrib/admin/media/js/admin/DateTimeShortcuts.js	(working copy)
@@ -167,10 +167,14 @@
 
         // next-prev links
         var cal_nav = quickElement('div', cal_box, '');
-        var cal_nav_prev = quickElement('a', cal_nav, '<', 'href', 'javascript:DateTimeShortcuts.drawPrev('+num+');');
-        cal_nav_prev.className = 'calendarnav-previous';
-        var cal_nav_next = quickElement('a', cal_nav, '>', 'href', 'javascript:DateTimeShortcuts.drawNext('+num+');');
-        cal_nav_next.className = 'calendarnav-next';
+        var cal_nav_prev_year = quickElement('a', cal_nav, '<<', 'href', 'javascript:DateTimeShortcuts.drawPrevYear('+num+');');
+        cal_nav_prev_year.className = 'calendarnav-previous-year';
+        var cal_nav_prev_month = quickElement('a', cal_nav, '<', 'href', 'javascript:DateTimeShortcuts.drawPrevMonth('+num+');');
+        cal_nav_prev_month.className = 'calendarnav-previous-month';
+        var cal_nav_next_month = quickElement('a', cal_nav, '>', 'href', 'javascript:DateTimeShortcuts.drawNextMonth('+num+');');
+        cal_nav_next_month.className = 'calendarnav-next-month';
+        var cal_nav_next_year = quickElement('a', cal_nav, '>>', 'href', 'javascript:DateTimeShortcuts.drawNextYear('+num+');');
+        cal_nav_next_year.className = 'calendarnav-next-year';
         cal_box.appendChild(cal_nav);
 
         // main box
@@ -217,12 +221,18 @@
     dismissCalendar: function(num) {
         document.getElementById(DateTimeShortcuts.calendarDivName1+num).style.display = 'none';
     },
-    drawPrev: function(num) {
+    drawPrevMonth: function(num) {
         DateTimeShortcuts.calendars[num].drawPreviousMonth();
     },
-    drawNext: function(num) {
+    drawNextMonth: function(num) {
         DateTimeShortcuts.calendars[num].drawNextMonth();
     },
+    drawPrevYear: function(num) {
+        DateTimeShortcuts.calendars[num].drawPreviousYear();
+    },
+    drawNextYear: function(num) {
+        DateTimeShortcuts.calendars[num].drawNextYear();
+    },
     handleCalendarCallback: function(num) {
         return "function(y, m, d) { DateTimeShortcuts.calendarInputs["+num+"].value = y+'-'+m+'-'+d; document.getElementById(DateTimeShortcuts.calendarDivName1+"+num+").style.display='none';}";
     },
