diff --git a/src/core/components/button-with-spinner/button-with-spinner.scss b/src/core/components/button-with-spinner/button-with-spinner.scss
new file mode 100644
index 000000000..5c9d86ae3
--- /dev/null
+++ b/src/core/components/button-with-spinner/button-with-spinner.scss
@@ -0,0 +1,15 @@
+:host {
+ font-size: 1.4rem;
+ display: flex;
+ flex-flow: row;
+ align-items: center;
+ justify-content: space-around;
+ align-content: center;
+ min-height: var(--a11y-min-target-size);
+ min-width: var(--a11y-min-target-size);
+ position: relative;
+
+ > * {
+ position: absolute;
+ }
+}
diff --git a/src/core/components/button-with-spinner/button-with-spinner.ts b/src/core/components/button-with-spinner/button-with-spinner.ts
new file mode 100644
index 000000000..76cfa0c5c
--- /dev/null
+++ b/src/core/components/button-with-spinner/button-with-spinner.ts
@@ -0,0 +1,37 @@
+// (C) Copyright 2015 Moodle Pty Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import { Component, Input } from '@angular/core';
+import { CoreAnimations } from '@components/animations';
+
+/**
+ * Component to show a button or a spinner when loading.
+ *
+ * Usage:
+ *
+ * ...
+ *
+ */
+@Component({
+ selector: 'core-button-with-spinner',
+ templateUrl: 'core-button-with-spinner.html',
+ styleUrls: ['button-with-spinner.scss'],
+ animations: [CoreAnimations.SHOW_HIDE],
+})
+export class CoreButtonWithSpinnerComponent {
+
+ @Input() loading = true;
+ @Input() loadingLabel = 'core.loading';
+
+}
diff --git a/src/core/components/button-with-spinner/core-button-with-spinner.html b/src/core/components/button-with-spinner/core-button-with-spinner.html
new file mode 100644
index 000000000..303eb0b3c
--- /dev/null
+++ b/src/core/components/button-with-spinner/core-button-with-spinner.html
@@ -0,0 +1,6 @@
+