diff --git a/core/misc/collapse.js b/core/misc/collapse.js
index 80f5939..8144642 100644
--- a/core/misc/collapse.js
+++ b/core/misc/collapse.js
@@ -67,7 +67,8 @@ $.extend(CollapsibleFieldset.prototype, {
       .after(' ');
 
     // .wrapInner() does not retain bound events.
-    var $link = $('<a class="fieldset-title" href="#"></a>')
+    var $link = $('<a class="fieldset-title"></a>')
+      .attr('href', '#' + this.$node.attr('id'))
       .prepend($legend.contents())
       .appendTo($legend)
       .click($.proxy(this.onLegendClick, this));
diff --git a/core/misc/machine-name.js b/core/misc/machine-name.js
index 9ef6e47..d06e53e 100644
--- a/core/misc/machine-name.js
+++ b/core/misc/machine-name.js
@@ -109,7 +109,7 @@ Drupal.behaviors.machineName = {
           options: options
         };
         // If it is editable, append an edit link.
-        var $link = $('<span class="admin-link"><a href="#">' + Drupal.t('Edit') + '</a></span>').bind('click', eventData, clickEditHandler);
+        var $link = $('<span class="admin-link"><button type="button" class="link">' + Drupal.t('Edit') + '</button></span>').bind('click', eventData, clickEditHandler);
         $suffix.append(' ').append($link);
 
         // Preview the machine name in realtime when the human-readable name
diff --git a/core/misc/tabledrag.js b/core/misc/tabledrag.js
index 230f588..026c95b 100644
--- a/core/misc/tabledrag.js
+++ b/core/misc/tabledrag.js
@@ -104,7 +104,7 @@ Drupal.tableDrag = function (table, tableSettings) {
   $table.find('> tr.draggable, > tbody > tr.draggable').each(function () { self.makeDraggable(this); });
 
   // Add a link before the table for users to show or hide weight columns.
-  $table.before($('<a href="#" class="tabledrag-toggle-weight"></a>')
+  $table.before($('<button class="link tabledrag-toggle-weight"></button>')
     .attr('title', Drupal.t('Re-order rows by numerical weight instead of dragging.'))
     .click($.proxy(function (e) {
       e.preventDefault();
diff --git a/core/misc/tableresponsive.js b/core/misc/tableresponsive.js
index 4a03be3..2fb15e5 100644
--- a/core/misc/tableresponsive.js
+++ b/core/misc/tableresponsive.js
@@ -35,7 +35,7 @@ function TableResponsive (table) {
   // traversed only once to find them.
   this.$headers = this.$table.find('th');
   // Add a link before the table for users to show or hide weight columns.
-  this.$link = $('<a href="#" class="tableresponsive-toggle"></a>')
+  this.$link = $('<button class="link tableresponsive-toggle"></button>')
     .attr({
       'title': Drupal.t('Show table cells that were hidden to make the table fit within a small screen.')
     })
diff --git a/core/misc/vertical-tabs.js b/core/misc/vertical-tabs.js
index 303840a..ca80108 100644
--- a/core/misc/vertical-tabs.js
+++ b/core/misc/vertical-tabs.js
@@ -85,6 +85,8 @@ Drupal.verticalTab = function (settings) {
   var self = this;
   $.extend(this, settings, Drupal.theme('verticalTab', settings));
 
+  this.link.attr('href', '#' + settings.fieldset.attr('id'));
+
   this.link.click(function (e) {
     e.preventDefault();
     self.focus();
diff --git a/core/modules/contextual/contextual.js b/core/modules/contextual/contextual.js
index 8534ce1..0bcc444 100644
--- a/core/modules/contextual/contextual.js
+++ b/core/modules/contextual/contextual.js
@@ -18,7 +18,7 @@ Drupal.behaviors.contextualLinks = {
       var $wrapper = $(this);
       var $region = $wrapper.closest('.contextual-region');
       var $links = $wrapper.find('ul');
-      var $trigger = $('<a class="trigger" href="#" />').text(Drupal.t('Configure')).click(
+      var $trigger = $('<button type="button" class="trigger link" />').text(Drupal.t('Configure')).click(
         function (e) {
           e.preventDefault();
           e.stopPropagation();
diff --git a/core/modules/field/modules/text/text.js b/core/modules/field/modules/text/text.js
index efc5579..cf7553f 100644
--- a/core/modules/field/modules/text/text.js
+++ b/core/modules/field/modules/text/text.js
@@ -22,19 +22,19 @@ Drupal.behaviors.textSummary = {
       }
 
       // Set up the edit/hide summary link.
-      var $link = $('<span class="field-edit-link">(<a class="link-edit-summary" href="#nogo">' + Drupal.t('Hide summary') + '</a>)</span>');
-      var $a = $link.find('a');
+      var $link = $('<span class="field-edit-link">(<button type="button" class="link link-edit-summary">' + Drupal.t('Hide summary') + '</button>)</span>');
+      var $button = $link.find('button');
       $link.toggle(
         function (e) {
           e.preventDefault();
           $summary.hide();
-          $a.html(Drupal.t('Edit summary'));
+          $button.html(Drupal.t('Edit summary'));
           $link.appendTo($fullLabel);
         },
         function (e) {
           e.preventDefault();
           $summary.show();
-          $a.html(Drupal.t('Hide summary'));
+          $button.html(Drupal.t('Hide summary'));
           $link.appendTo($summaryLabel);
         }
       ).appendTo($summaryLabel);
diff --git a/core/modules/system/system.theme.css b/core/modules/system/system.theme.css
index 483c89d..6510f8a 100644
--- a/core/modules/system/system.theme.css
+++ b/core/modules/system/system.theme.css
@@ -1,4 +1,3 @@
-
 /**
  * @file
  * Basic styling for common markup.
@@ -15,6 +14,9 @@ form {
   margin: 0;
   padding: 0;
 }
+button {
+  font-size: 1em;
+}
 hr {
   border: 1px solid gray;
   height: 1px;
@@ -179,6 +181,21 @@ abbr.form-required, abbr.tabledrag-changed, abbr.ajax-changed {
 }
 
 /**
+ * Show buttons as links.
+ */
+button.link {
+  background: transparent;
+  border: 0;
+  cursor: pointer;
+  margin: 0;
+  padding: 0;
+}
+
+label button.link {
+  font-weight: bold;
+}
+
+/**
  * Collapsible fieldsets.
  *
  * @see collapse.js
diff --git a/core/themes/bartik/css/colors.css b/core/themes/bartik/css/colors.css
index f2a3249..4421fd6 100644
--- a/core/themes/bartik/css/colors.css
+++ b/core/themes/bartik/css/colors.css
@@ -30,14 +30,18 @@ body.overlay {
   background-image: -webkit-linear-gradient(top, #0779bf 0%, #48a9e4 100%);
   background-image: linear-gradient(top, #0779bf 0%, #48a9e4 100%);
 }
-a {
+a,
+.link {
   color: #0071b3;
 }
 a:hover,
-a:focus {
+a:focus,
+.link:hover,
+.link:focus {
   color: #018fe2;
 }
-a:active {
+a:active,
+.link:active {
   color: #23aeff;
 }
 .sidebar .block {
diff --git a/core/themes/bartik/css/style.css b/core/themes/bartik/css/style.css
index 6f4cb14..63e5b8e 100644
--- a/core/themes/bartik/css/style.css
+++ b/core/themes/bartik/css/style.css
@@ -15,7 +15,10 @@ a:visited {
 }
 a:hover,
 a:active,
-a:focus {
+a:focus,
+.link:hover,
+.link:active,
+.link:focus {
   text-decoration: underline;
 }
 h1,
@@ -122,13 +125,14 @@ div.messages,
 div.meta,
 p.comment-time,
 table,
-.breadcrumb {
+.breadcrumb,
+.link {
   font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
 }
 input,
 textarea,
 select,
-a.button {
+button {
   font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif;
 }
 
@@ -1085,8 +1089,7 @@ div.password-confirm {
 
 /* ---------------- Buttons    ---------------- */
 
-input.form-submit,
-a.button {
+input.form-submit {
   background: #fff url(../images/buttons.png) 0 0 repeat-x;
   border: 1px solid #e4e4e4;
   border-bottom: 1px solid #b4b4b4;
@@ -1102,13 +1105,10 @@ a.button {
   padding: 4px 17px;
   border-radius: 15px;
 }
-a.button:link,
-a.button:visited,
-a.button:hover,
-a.button:focus,
-a.button:active {
-  text-decoration: none;
-  color: #5a5a5a;
+
+/* Remove firefox focus padding */
+button.link::-moz-focus-inner{
+  padding: 0;
 }
 
 /* -------------- Form Elements   ------------- */
diff --git a/core/themes/seven/reset.css b/core/themes/seven/reset.css
index 507955e..ba682d6 100644
--- a/core/themes/seven/reset.css
+++ b/core/themes/seven/reset.css
@@ -167,6 +167,7 @@ table {
  * Specifically targets form elements which browsers often times give
  * special treatment.
  */
+button,
 input,
 select,
 textarea {
@@ -199,3 +200,8 @@ ul.inline:after {
   display: none;
   clear: none;
 }
+
+/* Remove firefox focus padding */
+button.link::-moz-focus-inner{
+  padding: 0;
+}
diff --git a/core/themes/seven/style.css b/core/themes/seven/style.css
index 7b8ae1b..76db0ca 100644
--- a/core/themes/seven/style.css
+++ b/core/themes/seven/style.css
@@ -6,11 +6,13 @@ body {
   background: #fff;
   font: normal 81.3%/1.538em "Lucida Grande", "Lucida Sans Unicode", sans-serif;
 }
-a {
+a,
+.link {
   color: #0074bd;
   text-decoration: none;
 }
-a:hover {
+a:hover,
+.link:hover {
   text-decoration: underline;
 }
 hr {
@@ -626,8 +628,7 @@ body div.form-type-radio div.description,
 body div.form-type-checkbox div.description {
   margin-left: 1.5em; /* LTR */
 }
-input.form-submit,
-a.button {
+input.form-submit {
   cursor: pointer;
   padding: 4px 17px;
   margin-bottom: 1em;
@@ -644,16 +645,8 @@ a.button {
   background: url(images/buttons.png) 0 0 repeat-x;
   border-radius: 20px;
 }
-a.button:link,
-a.button:visited,
-a.button:hover,
-a.button:active {
-  text-decoration: none;
-}
 input.form-submit:hover,
-input.form-submit:focus,
-a.button:hover,
-a.button:focus {
+input.form-submit:focus {
   background-position: 0 -40px;
   border: 1px solid #bebebe;
   border-left-color: #afafaf;
@@ -661,8 +654,7 @@ a.button:focus {
   border-bottom-color: #9b9b9b;
   color: #2e2e2e;
 }
-input.form-submit:active,
-a.button:active {
+input.form-submit:active {
   background-position: 0 -80px;
   border: 1px solid #333;
   border-left-color: #222;
