diff --git a/web/gui/src/main/webapp/app/fw/layer/loading.css b/web/gui/src/main/webapp/app/fw/layer/loading.css
new file mode 100644
index 0000000..9c8d354
--- /dev/null
+++ b/web/gui/src/main/webapp/app/fw/layer/loading.css
@@ -0,0 +1,27 @@
+/*
+ *  Copyright 2015 Open Networking Laboratory
+ *
+ *  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.
+ */
+
+/*
+ ONOS GUI -- Loading Service -- CSS file
+ */
+
+#loading-anim {
+    position: fixed;
+    top: 50%;
+    left: 50%;
+    -webkit-transform: translate(-50%, -50%);
+    transform: translate(-50%, -50%);
+}
diff --git a/web/gui/src/main/webapp/app/fw/layer/loading.js b/web/gui/src/main/webapp/app/fw/layer/loading.js
new file mode 100644
index 0000000..7691f09
--- /dev/null
+++ b/web/gui/src/main/webapp/app/fw/layer/loading.js
@@ -0,0 +1,86 @@
+/*
+ *  Copyright 2015 Open Networking Laboratory
+ *
+ *  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.
+ */
+
+/*
+ ONOS GUI -- Layer -- Loading Service
+
+ Provides a mechanism to start/stop the loading animation, center screen.
+ */
+(function () {
+    'use strict';
+
+    // injected references
+    var $log, $timeout, ts;
+
+    // constants
+    var id = 'loading-anim',
+        dir = 'data/img/loading/',
+        pfx = '/load-',
+        speed = 100;
+
+    // internal state
+    var div,
+        img,
+        th,
+        idx,
+        task;
+
+    function fname(i) {
+        var z = i > 9 ? '' : '0';
+        return dir + th + pfx + z + i + '.png';
+    }
+
+    function nextFrame() {
+        idx = idx === 16 ? 1 : idx + 1;
+        img.attr('src', fname(idx));
+        task = $timeout(nextFrame, speed);
+    }
+
+    // start displaying 'loading...' animation (idempotent)
+    function start() {
+        th = ts.theme();
+        div = d3.select('#'+id);
+        if (div.empty()) {
+            div = d3.select('body').append('div').attr('id', id);
+            img = div.append('img').attr('src', fname(1));
+            idx = 1;
+            task = $timeout(nextFrame, speed);
+        }
+    }
+
+    // stop displaying 'loading...' animation (idempotent)
+    function stop() {
+        if (task) {
+            $timeout.cancel(task);
+            task = null;
+        }
+        d3.select('#'+id).remove();
+    }
+
+    angular.module('onosLayer')
+        .factory('LoadingService', ['$log', '$timeout', 'ThemeService',
+        function (_$log_, _$timeout_, _ts_) {
+            $log = _$log_;
+            $timeout = _$timeout_;
+            ts = _ts_;
+
+            return {
+                start: start,
+                stop: stop
+            };
+        }]);
+
+}());
\ No newline at end of file
