diff --git a/core/misc/collapse.js b/core/misc/collapse.js
index d834563..f2e8de1 100644
--- a/core/misc/collapse.js
+++ b/core/misc/collapse.js
@@ -84,17 +84,17 @@ Drupal.behaviors.collapse = {
         .after(' ');
 
       // .wrapInner() does not retain bound events.
-      var $link = $('<a class="fieldset-title" href="#"></a>')
+      var $link = $('<button type="button" class="fieldset-title button-link"></button>')
         .prepend($legend.contents())
         .appendTo($legend)
-        .click(function () {
+        .click(function (e) {
+          e.preventDefault();
           var fieldset = $fieldset.get(0);
           // Don't animate multiple times.
           if (!fieldset.animating) {
             fieldset.animating = true;
             Drupal.toggleFieldset(fieldset);
           }
-          return false;
         });
 
       $legend.append(summary);
diff --git a/core/misc/machine-name.js b/core/misc/machine-name.js
index a7ba0f7..0ffd17e 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="button-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 bd79bde..250b739 100644
--- a/core/misc/tabledrag.js
+++ b/core/misc/tabledrag.js
@@ -93,7 +93,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 type="button" class="tabledrag-toggle-weight button-link"></button>')
     .attr('title', Drupal.t('Re-order rows by numerical weight instead of dragging.'))
     .click($.proxy(function (e) {
       e.preventDefault();
@@ -274,7 +274,7 @@ Drupal.tableDrag.prototype.makeDraggable = function (item) {
   var $item = $(item);
 
   // Create the handle.
-  var handle = $('<a href="#" class="tabledrag-handle"><div class="handle">&nbsp;</div></a>').attr('title', Drupal.t('Drag to re-order'));
+  var handle = $('<button type="button" class="tabledrag-handle button-link"><div class="handle">&nbsp;</div></button>').attr('title', Drupal.t('Drag to re-order'));
   // Insert the handle after indentations (if any).
   var $indentationLast = $item.find('td:first .indentation:last');
   if ($indentationLast.length) {
diff --git a/core/misc/vertical-tabs.css b/core/misc/vertical-tabs.css
index c946503..ec6f3de 100644
--- a/core/misc/vertical-tabs.css
+++ b/core/misc/vertical-tabs.css
@@ -28,17 +28,17 @@ fieldset.vertical-tabs-pane > legend {
   padding: 0;
   margin: 0;
 }
-.vertical-tabs ul.vertical-tabs-list li a {
+.vertical-tabs ul.vertical-tabs-list li .button-link {
   display: block;
   text-decoration: none;
   padding: 0.5em 0.6em;
 }
-.vertical-tabs ul.vertical-tabs-list li a:focus strong,
-.vertical-tabs ul.vertical-tabs-list li a:active strong,
-.vertical-tabs ul.vertical-tabs-list li a:hover strong {
+.vertical-tabs ul.vertical-tabs-list li .button-link:focus strong,
+.vertical-tabs ul.vertical-tabs-list li .button-link:active strong,
+.vertical-tabs ul.vertical-tabs-list li .button-link:hover strong {
   text-decoration: underline;
 }
-.vertical-tabs ul.vertical-tabs-list li a:hover {
+.vertical-tabs ul.vertical-tabs-list li .button-link:hover {
   outline: 1px dotted;
 }
 .vertical-tabs ul.vertical-tabs-list li.selected {
diff --git a/core/misc/vertical-tabs.js b/core/misc/vertical-tabs.js
index 0fbb3f9..cd84eea 100644
--- a/core/misc/vertical-tabs.js
+++ b/core/misc/vertical-tabs.js
@@ -188,7 +188,7 @@ Drupal.verticalTab.prototype = {
 Drupal.theme.prototype.verticalTab = function (settings) {
   var tab = {};
   tab.item = $('<li class="vertical-tab-button" tabindex="-1"></li>')
-    .append(tab.link = $('<a href="#"></a>')
+    .append(tab.link = $('<button type="button" class="button-link"></button>')
       .append(tab.title = $('<strong></strong>').text(settings.title))
       .append(tab.summary = $('<span class="summary"></span>')
     )
diff --git a/core/modules/contextual/contextual.js b/core/modules/contextual/contextual.js
index 3b7aeeb..56fd6b6 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 button-linke" />').text(Drupal.t('Configure')).click(
         function () {
           $links.stop(true, true).slideToggle(100);
           $wrapper.toggleClass('contextual-active');
diff --git a/core/modules/field/modules/text/text.js b/core/modules/field/modules/text/text.js
index efc5579..08345ec 100644
--- a/core/modules/field/modules/text/text.js
+++ b/core/modules/field/modules/text/text.js
@@ -22,8 +22,8 @@ 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-edit-summary button-link">' + Drupal.t('Hide summary') + '</button>)</span>');
+      var $a = $link.find('button');
       $link.toggle(
         function (e) {
           e.preventDefault();
diff --git a/core/modules/system/system.base.css b/core/modules/system/system.base.css
index f8a7726..0e9e3dd 100644
--- a/core/modules/system/system.base.css
+++ b/core/modules/system/system.base.css
@@ -95,7 +95,7 @@ fieldset.collapsible .fieldset-legend {
 body.drag {
   cursor: move;
 }
-.draggable a.tabledrag-handle {
+.draggable .button-link.tabledrag-handle {
   cursor: move;
   float: left; /* LTR */
   height: 1.7em;
@@ -103,17 +103,17 @@ body.drag {
   overflow: hidden;
   text-decoration: none;
 }
-a.tabledrag-handle:hover {
+.button-link.tabledrag-handle:hover {
   text-decoration: none;
 }
-a.tabledrag-handle .handle {
+.button-link.tabledrag-handle .handle {
   background: url(../../misc/draggable.png) no-repeat 6px 9px;
   height: 13px;
   margin: -0.4em 0.5em; /* LTR */
   padding: 0.42em 0.5em; /* LTR */
   width: 13px;
 }
-a.tabledrag-handle-hover .handle {
+.button-link.tabledrag-handle-hover .handle {
   background-position: 6px -11px;
 }
 div.indentation {
diff --git a/core/modules/system/system.theme.css b/core/modules/system/system.theme.css
index d5f41e1..c1e3e6b 100644
--- a/core/modules/system/system.theme.css
+++ b/core/modules/system/system.theme.css
@@ -179,6 +179,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/seven/style.css b/core/themes/seven/style.css
index 09e6b35..a319c33 100644
--- a/core/themes/seven/style.css
+++ b/core/themes/seven/style.css
@@ -7,11 +7,13 @@ body {
   background: #fff;
   font: normal 81.3%/1.538em "Lucida Grande", "Lucida Sans Unicode", sans-serif;
 }
-a {
+a,
+.button-link {
   color: #0074bd;
   text-decoration: none;
 }
-a:hover {
+a:hover,
+.button-link:hover {
   text-decoration: underline;
 }
 hr {
