diff --git a/Packages/ohif-core/client/components/bootstrap/dialog/form.html b/Packages/ohif-core/client/components/bootstrap/dialog/form.html
index 84f0e9b97..483d56297 100644
--- a/Packages/ohif-core/client/components/bootstrap/dialog/form.html
+++ b/Packages/ohif-core/client/components/bootstrap/dialog/form.html
@@ -17,11 +17,11 @@
{{/form}}
diff --git a/Packages/ohif-core/client/components/bootstrap/dialog/progress.html b/Packages/ohif-core/client/components/bootstrap/dialog/progress.html
new file mode 100644
index 000000000..09725fcc7
--- /dev/null
+++ b/Packages/ohif-core/client/components/bootstrap/dialog/progress.html
@@ -0,0 +1,13 @@
+
+ {{#dialogForm (extend this
+ dialogClass='modal-sm modal-progress'
+ title=(choose this.title 'Processing...')
+ )}}
+
+
{{formatNumberPrecision progress 0}}%
+
+
+ {{{message}}}
+
+ {{/dialogForm}}
+
diff --git a/Packages/ohif-core/client/components/bootstrap/dialog/progress.js b/Packages/ohif-core/client/components/bootstrap/dialog/progress.js
new file mode 100644
index 000000000..f8569b8e0
--- /dev/null
+++ b/Packages/ohif-core/client/components/bootstrap/dialog/progress.js
@@ -0,0 +1,78 @@
+import { Template } from 'meteor/templating';
+import { Session } from 'meteor/session';
+import { _ } from 'meteor/underscore';
+
+Template.dialogProgress.onCreated(() => {
+ console.log('dialogProgress :: onCreated');
+});
+
+Template.dialogProgress.onCreated(() => {
+ Session.set('progressDialogState', {
+ progress: 0,
+ message: 'Test Message'
+ });
+})
+
+Template.dialogProgress.onDestroyed(() => {
+ Session.set('progressDialogState', undefined);
+})
+
+Template.dialogProgress.onRendered(() => {
+ const instance = Template.instance();
+ const task = instance.data.task;
+ const state = Session.get('progressDialogState');
+
+ const progressDialog = {
+ promise: instance.data.promise,
+
+ done: () => {
+ // Hide the modal, removing the backdrop
+ instance.$('.modal').on('hidden.bs.modal', event => {
+ instance.data.promiseResolve();
+ }).modal('hide');
+ },
+
+ cancel: () => {
+ // Hide the modal, removing the backdrop
+ instance.$('.modal').on('hidden.bs.modal', event => {
+ instance.data.promiseReject();
+ }).modal('hide');
+ },
+
+ setProgress: _.throttle(progress => {
+ const state = Session.get('progressDialogState');
+ state.progress = Math.min(1, progress);
+
+ Session.set('progressDialogState', state);
+ }, 100),
+
+ setMessage: _.throttle(message => {
+ const state = Session.get('progressDialogState');
+ state.message = message;
+
+ Session.set('progressDialogState', state);
+ }, 100)
+ }
+
+ task.start(progressDialog);
+});
+
+Template.dialogProgress.helpers({
+ progress() {
+ const state = Session.get('progressDialogState');
+ if (!state) {
+ return;
+ }
+
+ return state.progress * 100;
+ },
+
+ message() {
+ const state = Session.get('progressDialogState');
+ if (!state) {
+ return;
+ }
+
+ return state.message;
+ }
+})
\ No newline at end of file
diff --git a/Packages/ohif-core/client/components/bootstrap/dialog/progress.styl b/Packages/ohif-core/client/components/bootstrap/dialog/progress.styl
new file mode 100644
index 000000000..b086da1ad
--- /dev/null
+++ b/Packages/ohif-core/client/components/bootstrap/dialog/progress.styl
@@ -0,0 +1,7 @@
+.modal-progress
+ .status
+ .progress-bar
+ float: none;
+ .btn-confirm
+ display: none
+
\ No newline at end of file
diff --git a/Packages/ohif-core/client/components/bootstrap/index.js b/Packages/ohif-core/client/components/bootstrap/index.js
index bdfd260e9..7352cc6fc 100644
--- a/Packages/ohif-core/client/components/bootstrap/index.js
+++ b/Packages/ohif-core/client/components/bootstrap/index.js
@@ -1,4 +1,6 @@
import './dialog/confirm.html';
+import './dialog/progress.html';
+import './dialog/progress.js';
import './dialog/form.html';
import './dialog/form.js';
import './dialog/login.html';
diff --git a/Packages/ohif-core/package.js b/Packages/ohif-core/package.js
index 6de7d1c90..a82ceaadd 100644
--- a/Packages/ohif-core/package.js
+++ b/Packages/ohif-core/package.js
@@ -26,6 +26,7 @@ Package.onUse(function(api) {
api.addFiles([
'client/ui/dimensional/dimensional.styl',
'client/ui/resizable/resizable.styl',
+ 'client/components/bootstrap/dialog/progress.styl',
'client/components/bootstrap/dialog/unsavedChangesDialog.styl',
'client/components/bootstrap/dropdown/dropdown.styl'
], 'client');