diff --git a/core/api/src/main/java/org/onosproject/ui/lion/LionUtils.java b/core/api/src/main/java/org/onosproject/ui/lion/LionUtils.java
index c7aecca..c14409a 100644
--- a/core/api/src/main/java/org/onosproject/ui/lion/LionUtils.java
+++ b/core/api/src/main/java/org/onosproject/ui/lion/LionUtils.java
@@ -17,13 +17,9 @@
 
 package org.onosproject.ui.lion;
 
-import com.google.common.collect.ImmutableList;
-import org.onosproject.ui.lion.stitch.BundleStitcher;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Locale;
 import java.util.ResourceBundle;
 import java.util.Set;
@@ -215,58 +211,4 @@
         sb.append(DOT).append(baseName);
         return ResourceBundle.getBundle(sb.toString());
     }
-
-    /**
-     * Generates an immutable list of localization bundles, using the specified
-     * resource tree (base) and localization configuration file names (tags).
-     * <p>
-     * As an example, you might invoke:
-     * <pre>
-     * private static final String LION_BASE = "/org/onosproject/ui/lion";
-     *
-     * private static final String[] LION_TAGS = {
-     *     "core.view.App",
-     *     "core.view.Settings",
-     *     "core.view.Cluster",
-     *     "core.view.Processor",
-     *     "core.view.Partition",
-     * };
-     *
-     * List&lt;LionBundle&gt; bundles =
-     *      LionUtils.generateLionBundles(LION_BASE, LION_TAGS);
-     * </pre>
-     * It is expected that in the "LION_BASE" directory there is a subdirectory
-     * named "_config" which contains the configuration files listed in the
-     * "LION_TAGS" array, each with a ".lioncfg" suffix...
-     * <pre>
-     * /org/onosproject/ui/lion/
-     *   |
-     *   +-- _config
-     *         |
-     *         +-- core.view.App.lioncfg
-     *         +-- core.view.Settings.lioncfg
-     *         :
-     * </pre>
-     * These files collate a localization bundle for their particular view
-     * by referencing resource bundles and their keys.
-     *
-     * @param base the base resource directory path
-     * @param tags the list of bundles to generate
-     * @return a list of generated localization bundles
-     */
-    public static List<LionBundle> generateLionBundles(String base,
-                                                       String... tags) {
-        List<LionBundle> result = new ArrayList<>(tags.length);
-        BundleStitcher stitcher = new BundleStitcher(base);
-        for (String tag : tags) {
-            try {
-                LionBundle b = stitcher.stitch(tag);
-                result.add(b);
-
-            } catch (IllegalArgumentException e) {
-                log.warn("Unable to generate bundle: {} / {}", base, tag);
-            }
-        }
-        return ImmutableList.copyOf(result);
-    }
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/lion/stitch/BundleStitcher.java b/core/api/src/main/java/org/onosproject/ui/lion/stitch/BundleStitcher.java
deleted file mode 100644
index dc6e05f..0000000
--- a/core/api/src/main/java/org/onosproject/ui/lion/stitch/BundleStitcher.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright 2017-present 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.
- *
- */
-
-package org.onosproject.ui.lion.stitch;
-
-import org.onosproject.ui.lion.LionBundle;
-import org.onosproject.ui.lion.LionUtils;
-
-import java.util.ResourceBundle;
-import java.util.Set;
-
-/**
- * Gathers and stitches together a localization bundle according to a
- * "lion" configuration file.
- */
-public class BundleStitcher {
-
-    private static final String CONFIG_DIR = "_config";
-    private static final String SUFFIX = ".lioncfg";
-    private static final String SLASH = "/";
-    private static final String DOT = ".";
-
-
-    private final String base;
-
-    /**
-     * Creates a bundle stitcher, configured with the specified base resource
-     * path.
-     *
-     * @param base the base resource path
-     */
-    public BundleStitcher(String base) {
-        this.base = base;
-    }
-
-    @Override
-    public String toString() {
-        return "BundleStitcher{base=\"" + base + "\"}";
-    }
-
-    /**
-     * Stitches together a LionBundle, based on the bundle configuration data
-     * for the given bundle ID.
-     *
-     * @param id the bundle ID
-     * @return a corresponding lion bundle
-     * @throws IllegalArgumentException if the bundle config cannot be loaded
-     */
-    public LionBundle stitch(String id) {
-        String source = base + SLASH + CONFIG_DIR + SLASH + id + SUFFIX;
-        LionConfig cfg = new LionConfig().load(source);
-        LionBundle.Builder builder = new LionBundle.Builder(id);
-
-        for (LionConfig.CmdFrom from : cfg.entries()) {
-            addItemsToBuilder(builder, from);
-        }
-
-        return builder.build();
-    }
-
-    private void addItemsToBuilder(LionBundle.Builder builder,
-                                   LionConfig.CmdFrom from) {
-        String resBundleName = base + SLASH + from.res();
-        String resFqbn = convertToFqbn(resBundleName);
-        ResourceBundle bundle = LionUtils.getBundledResource(resFqbn);
-
-        if (from.starred()) {
-            addAllItems(builder, bundle);
-        } else {
-            addItems(builder, bundle, from.keys());
-        }
-    }
-
-    // to fully-qualified-bundle-name
-    private String convertToFqbn(String path) {
-        if (!path.startsWith(SLASH)) {
-            throw new IllegalArgumentException("path should start with '/'");
-        }
-        return path.substring(1).replaceAll(SLASH, DOT);
-    }
-
-    private void addAllItems(LionBundle.Builder builder, ResourceBundle bundle) {
-        addItems(builder, bundle, bundle.keySet());
-    }
-
-    private void addItems(LionBundle.Builder builder, ResourceBundle bundle,
-                          Set<String> keys) {
-        keys.forEach(k -> builder.addItem(k, bundle.getString(k)));
-    }
-}
diff --git a/core/api/src/test/java/org/onosproject/ui/lion/LionUtilsTest.java b/core/api/src/test/java/org/onosproject/ui/lion/LionUtilsTest.java
index 957fe73..289ec52 100644
--- a/core/api/src/test/java/org/onosproject/ui/lion/LionUtilsTest.java
+++ b/core/api/src/test/java/org/onosproject/ui/lion/LionUtilsTest.java
@@ -24,7 +24,6 @@
 import org.junit.Test;
 import org.onosproject.ui.AbstractUiTest;
 
-import java.util.List;
 import java.util.Locale;
 import java.util.ResourceBundle;
 
@@ -175,27 +174,6 @@
         checkLanguageCountry(locale, "ko", "KR");
     }
 
-    // -- Testing generateLionBundles(...)
-
-    private static final String LION_BASE = "/org/onosproject/ui/lion/stitchtests";
-
-    private static final String[] LION_TAGS = {"CardGame1"};
-
-    @Test
-    public void generateLionBundles() {
-        title("generateLionBundles");
-        List<LionBundle> bundles =
-                LionUtils.generateLionBundles(LION_BASE, LION_TAGS);
-        print(bundles);
-        assertEquals("missing the bundle", 1, bundles.size());
-
-        LionBundle b = bundles.get(0);
-        assertEquals("wrong id", "CardGame1", b.id());
-        assertEquals("unexpected item count", 12, b.size());
-        assertEquals("missing 3oak", "Three of a Kind", b.getValue("three_oak"));
-        assertEquals("missing queen", "Queen", b.getValue("queen"));
-        assertEquals("missing clubs", "Clubs", b.getValue("clubs"));
-    }
 
     // -- Testing loading of correct bundle, based on locale
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
index 85935de..83af0d7 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
@@ -225,7 +225,7 @@
         return new UiExtension.Builder(CL, coreViews)
                 // TODO: currently broken, until BundleStitcher & LionConfig
                 //        have been moved to web.gui module...
-//                .lionBundles(generateLionBundles(LION_BASE, LION_TAGS))
+//                .lionBundles(generateBundles(LION_BASE, LION_TAGS))
                 .messageHandlerFactory(messageHandlerFactory)
                 .topoOverlayFactory(topoOverlayFactory)
                 .topo2OverlayFactory(topo2OverlayFactory)
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/lion/BundleStitcher.java b/web/gui/src/main/java/org/onosproject/ui/impl/lion/BundleStitcher.java
new file mode 100644
index 0000000..aaeab93
--- /dev/null
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/lion/BundleStitcher.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright 2017-present 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.
+ *
+ */
+
+package org.onosproject.ui.impl.lion;
+
+import com.google.common.collect.ImmutableList;
+import org.onosproject.ui.lion.LionBundle;
+import org.onosproject.ui.lion.LionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ResourceBundle;
+import java.util.Set;
+
+/**
+ * Gathers and stitches together a localization bundle according to a
+ * "lion" configuration file.
+ */
+public class BundleStitcher {
+
+    private static final Logger log =
+            LoggerFactory.getLogger(BundleStitcher.class);
+
+    private static final String CONFIG_DIR = "_config";
+    private static final String SUFFIX = ".lioncfg";
+    private static final String SLASH = "/";
+    private static final String DOT = ".";
+
+
+    private final String base;
+
+    /**
+     * Creates a bundle stitcher, configured with the specified base resource
+     * path.
+     *
+     * @param base the base resource path
+     */
+    public BundleStitcher(String base) {
+        this.base = base;
+    }
+
+    @Override
+    public String toString() {
+        return "BundleStitcher{base=\"" + base + "\"}";
+    }
+
+    /**
+     * Stitches together a LionBundle, based on the bundle configuration data
+     * for the given bundle ID.
+     *
+     * @param id the bundle ID
+     * @return a corresponding lion bundle
+     * @throws IllegalArgumentException if the bundle config cannot be loaded
+     */
+    public LionBundle stitch(String id) {
+        String source = base + SLASH + CONFIG_DIR + SLASH + id + SUFFIX;
+        LionConfig cfg = new LionConfig().load(source);
+        LionBundle.Builder builder = new LionBundle.Builder(id);
+
+        for (LionConfig.CmdFrom from : cfg.entries()) {
+            addItemsToBuilder(builder, from);
+        }
+
+        return builder.build();
+    }
+
+    private void addItemsToBuilder(LionBundle.Builder builder,
+                                   LionConfig.CmdFrom from) {
+        String resBundleName = base + SLASH + from.res();
+        String resFqbn = convertToFqbn(resBundleName);
+        ResourceBundle bundle = LionUtils.getBundledResource(resFqbn);
+
+        if (from.starred()) {
+            addAllItems(builder, bundle);
+        } else {
+            addItems(builder, bundle, from.keys());
+        }
+    }
+
+    // to fully-qualified-bundle-name
+    private String convertToFqbn(String path) {
+        if (!path.startsWith(SLASH)) {
+            throw new IllegalArgumentException("path should start with '/'");
+        }
+        return path.substring(1).replaceAll(SLASH, DOT);
+    }
+
+    private void addAllItems(LionBundle.Builder builder, ResourceBundle bundle) {
+        addItems(builder, bundle, bundle.keySet());
+    }
+
+    private void addItems(LionBundle.Builder builder, ResourceBundle bundle,
+                          Set<String> keys) {
+        keys.forEach(k -> builder.addItem(k, bundle.getString(k)));
+    }
+
+    /**
+     * Generates an immutable list of localization bundles, using the specified
+     * resource tree (base) and localization configuration file names (tags).
+     * <p>
+     * As an example, you might invoke:
+     * <pre>
+     * private static final String LION_BASE = "/org/onosproject/ui/lion";
+     *
+     * private static final String[] LION_TAGS = {
+     *     "core.view.App",
+     *     "core.view.Settings",
+     *     "core.view.Cluster",
+     *     "core.view.Processor",
+     *     "core.view.Partition",
+     * };
+     *
+     * List&lt;LionBundle&gt; bundles =
+     *      LionUtils.generateBundles(LION_BASE, LION_TAGS);
+     * </pre>
+     * It is expected that in the "LION_BASE" directory there is a subdirectory
+     * named "_config" which contains the configuration files listed in the
+     * "LION_TAGS" array, each with a ".lioncfg" suffix...
+     * <pre>
+     * /org/onosproject/ui/lion/
+     *   |
+     *   +-- _config
+     *         |
+     *         +-- core.view.App.lioncfg
+     *         +-- core.view.Settings.lioncfg
+     *         :
+     * </pre>
+     * These files collate a localization bundle for their particular view
+     * by referencing resource bundles and their keys.
+     *
+     * @param base the base resource directory path
+     * @param tags the list of bundles to generate
+     * @return a list of generated localization bundles
+     */
+    public static List<LionBundle> generateBundles(String base,
+                                                   String... tags) {
+        List<LionBundle> result = new ArrayList<>(tags.length);
+        BundleStitcher stitcher = new BundleStitcher(base);
+        for (String tag : tags) {
+            try {
+                LionBundle b = stitcher.stitch(tag);
+                result.add(b);
+
+            } catch (IllegalArgumentException e) {
+                log.warn("Unable to generate bundle: {} / {}", base, tag);
+            }
+        }
+        return ImmutableList.copyOf(result);
+    }
+}
diff --git a/core/api/src/main/java/org/onosproject/ui/lion/stitch/LionConfig.java b/web/gui/src/main/java/org/onosproject/ui/impl/lion/LionConfig.java
similarity index 99%
rename from core/api/src/main/java/org/onosproject/ui/lion/stitch/LionConfig.java
rename to web/gui/src/main/java/org/onosproject/ui/impl/lion/LionConfig.java
index 71a423a..0fa520a 100644
--- a/core/api/src/main/java/org/onosproject/ui/lion/stitch/LionConfig.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/lion/LionConfig.java
@@ -15,7 +15,7 @@
  *
  */
 
-package org.onosproject.ui.lion.stitch;
+package org.onosproject.ui.impl.lion;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSortedSet;
diff --git a/core/api/src/main/java/org/onosproject/ui/lion/stitch/package-info.java b/web/gui/src/main/java/org/onosproject/ui/impl/lion/package-info.java
similarity index 84%
rename from core/api/src/main/java/org/onosproject/ui/lion/stitch/package-info.java
rename to web/gui/src/main/java/org/onosproject/ui/impl/lion/package-info.java
index 0661144..f8566fa 100644
--- a/core/api/src/main/java/org/onosproject/ui/lion/stitch/package-info.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/lion/package-info.java
@@ -16,6 +16,6 @@
  */
 
 /**
- * Facilities for stitching together localization bundles.
+ * Set of resources providing localization utilities for the ONOS GUI.
  */
-package org.onosproject.ui.lion.stitch;
+package org.onosproject.ui.impl.lion;
diff --git a/core/api/src/test/java/org/onosproject/ui/lion/stitch/BundleStitcherTest.java b/web/gui/src/test/java/org/onosproject/ui/impl/lion/BundleStitcherTest.java
similarity index 74%
rename from core/api/src/test/java/org/onosproject/ui/lion/stitch/BundleStitcherTest.java
rename to web/gui/src/test/java/org/onosproject/ui/impl/lion/BundleStitcherTest.java
index f1a606a..e5ae6a6 100644
--- a/core/api/src/test/java/org/onosproject/ui/lion/stitch/BundleStitcherTest.java
+++ b/web/gui/src/test/java/org/onosproject/ui/impl/lion/BundleStitcherTest.java
@@ -15,7 +15,7 @@
  *
  */
 
-package org.onosproject.ui.lion.stitch;
+package org.onosproject.ui.impl.lion;
 
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -25,6 +25,7 @@
 import org.onosproject.ui.AbstractUiTest;
 import org.onosproject.ui.lion.LionBundle;
 
+import java.util.List;
 import java.util.Locale;
 
 import static org.junit.Assert.assertEquals;
@@ -34,8 +35,10 @@
  */
 public class BundleStitcherTest extends AbstractUiTest {
 
-    private static final String TEST_RESOURCE_BASE =
-            "/org/onosproject/ui/lion/stitchtests";
+    private static final String LION_BASE = "/org/onosproject/ui/lion";
+
+    private static final String[] LION_TAGS = {"CardGame1"};
+
 
     private static final String[] CARD_GAME_1_KEYS = {
             "of", "flush", "full_house", "pair", "three_oak",
@@ -78,7 +81,7 @@
 
 
     private BundleStitcher testStitcher() {
-        return new BundleStitcher(TEST_RESOURCE_BASE);
+        return new BundleStitcher(LION_BASE);
     }
 
     private void verifyItems(LionBundle lion, String[] values) {
@@ -91,6 +94,24 @@
         }
     }
 
+    // -- Testing generateLionBundles(...)
+
+    @Test
+    public void generateBundles() {
+        title("generateBundles");
+        List<LionBundle> bundles =
+                BundleStitcher.generateBundles(LION_BASE, LION_TAGS);
+        print(bundles);
+        assertEquals("missing the bundle", 1, bundles.size());
+
+        LionBundle b = bundles.get(0);
+        assertEquals("wrong id", "CardGame1", b.id());
+        assertEquals("unexpected item count", 12, b.size());
+        assertEquals("missing 3oak", "Three of a Kind", b.getValue("three_oak"));
+        assertEquals("missing queen", "Queen", b.getValue("queen"));
+        assertEquals("missing clubs", "Clubs", b.getValue("clubs"));
+    }
+
     @Test
     public void cardGame1English() {
         title("cardGame1English");
@@ -105,12 +126,12 @@
 
     /*
      * TODO: Andrea to localize
-     * Under: ${ONOS_ROOT}/core/api/src/test/resources/
+     * Under: ${ONOS_ROOT}/web/gui/src/test/resources/
      *
      * Bundles to Localize:
-     *    org/onosproject/ui/lion/stitchtests/app/Cards.properties
-     *    org/onosproject/ui/lion/stitchtests/core/stuff/Rank.properties
-     *    org/onosproject/ui/lion/stitchtests/core/stuff/Suit.properties
+     *    org/onosproject/ui/lion/app/Cards.properties
+     *    org/onosproject/ui/lion/core/stuff/Rank.properties
+     *    org/onosproject/ui/lion/core/stuff/Suit.properties
      */
     @Ignore("Andrea to localize bundles to Italian")
     @Test
diff --git a/core/api/src/test/java/org/onosproject/ui/lion/stitch/LionConfigTest.java b/web/gui/src/test/java/org/onosproject/ui/impl/lion/LionConfigTest.java
similarity index 98%
rename from core/api/src/test/java/org/onosproject/ui/lion/stitch/LionConfigTest.java
rename to web/gui/src/test/java/org/onosproject/ui/impl/lion/LionConfigTest.java
index ec636b1..5e4f1dc 100644
--- a/core/api/src/test/java/org/onosproject/ui/lion/stitch/LionConfigTest.java
+++ b/web/gui/src/test/java/org/onosproject/ui/impl/lion/LionConfigTest.java
@@ -15,7 +15,7 @@
  *
  */
 
-package org.onosproject.ui.lion.stitch;
+package org.onosproject.ui.impl.lion;
 
 import org.junit.Test;
 import org.onosproject.ui.AbstractUiTest;
@@ -31,7 +31,7 @@
  */
 public class LionConfigTest extends AbstractUiTest {
 
-    private static final String ROOT = "/org/onosproject/ui/lion/stitchtests/";
+    private static final String ROOT = "/org/onosproject/ui/lion/";
     private static final String CMD_ROOT = ROOT + "_cmd/";
     private static final String CONFIG_ROOT = ROOT + "_config/";
 
diff --git a/core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/01-bundle.lioncfg b/web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/01-bundle.lioncfg
similarity index 100%
rename from core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/01-bundle.lioncfg
rename to web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/01-bundle.lioncfg
diff --git a/core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/02-alias.lioncfg b/web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/02-alias.lioncfg
similarity index 100%
rename from core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/02-alias.lioncfg
rename to web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/02-alias.lioncfg
diff --git a/core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/03-from.lioncfg b/web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/03-from.lioncfg
similarity index 100%
rename from core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/03-from.lioncfg
rename to web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/03-from.lioncfg
diff --git a/core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/04-from-four.lioncfg b/web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/04-from-four.lioncfg
similarity index 100%
rename from core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/04-from-four.lioncfg
rename to web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/04-from-four.lioncfg
diff --git a/core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/05-from-expand.lioncfg b/web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/05-from-expand.lioncfg
similarity index 100%
rename from core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/05-from-expand.lioncfg
rename to web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/05-from-expand.lioncfg
diff --git a/core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/06-from-star.lioncfg b/web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/06-from-star.lioncfg
similarity index 100%
rename from core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/06-from-star.lioncfg
rename to web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/06-from-star.lioncfg
diff --git a/core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/07-star-is-special.lioncfg b/web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/07-star-is-special.lioncfg
similarity index 100%
rename from core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_cmd/07-star-is-special.lioncfg
rename to web/gui/src/test/resources/org/onosproject/ui/lion/_cmd/07-star-is-special.lioncfg
diff --git a/core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_config/CardGame1.lioncfg b/web/gui/src/test/resources/org/onosproject/ui/lion/_config/CardGame1.lioncfg
similarity index 100%
rename from core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/_config/CardGame1.lioncfg
rename to web/gui/src/test/resources/org/onosproject/ui/lion/_config/CardGame1.lioncfg
diff --git a/core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/app/Cards.properties b/web/gui/src/test/resources/org/onosproject/ui/lion/app/Cards.properties
similarity index 100%
rename from core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/app/Cards.properties
rename to web/gui/src/test/resources/org/onosproject/ui/lion/app/Cards.properties
diff --git a/core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/core/stuff/Rank.properties b/web/gui/src/test/resources/org/onosproject/ui/lion/core/stuff/Rank.properties
similarity index 100%
rename from core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/core/stuff/Rank.properties
rename to web/gui/src/test/resources/org/onosproject/ui/lion/core/stuff/Rank.properties
diff --git a/core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/core/stuff/Suit.properties b/web/gui/src/test/resources/org/onosproject/ui/lion/core/stuff/Suit.properties
similarity index 100%
rename from core/api/src/test/resources/org/onosproject/ui/lion/stitchtests/core/stuff/Suit.properties
rename to web/gui/src/test/resources/org/onosproject/ui/lion/core/stuff/Suit.properties
