diff --git a/web/gui/src/main/webapp/app/fw/util/ee.js b/web/gui/src/main/webapp/app/fw/util/ee.js
index dfa7cce..a0d2dc4 100644
--- a/web/gui/src/main/webapp/app/fw/util/ee.js
+++ b/web/gui/src/main/webapp/app/fw/util/ee.js
@@ -34,7 +34,9 @@
         'xcjvte',
         'bgvest',
         'sevlr',
-        'ias'
+        'ias',
+        'jweeidkpizn'
+        // Add more beans...
     ];
 
     function pickBean() {
diff --git a/web/gui/src/main/webapp/onos.js b/web/gui/src/main/webapp/onos.js
index 042a9ac..fc4683d 100644
--- a/web/gui/src/main/webapp/onos.js
+++ b/web/gui/src/main/webapp/onos.js
@@ -55,7 +55,9 @@
         '7:667186698384',
         '1:857780888778876787',
         '20:70717066',
-        '24:886774868469'
+        '24:886774868469',
+        '17:7487696973687580739078'
+        // Add more sauce...
     ];
 
     var defaultView = 'topo',
diff --git a/web/gui/src/main/webapp/raw/jweeidkpizn.foo b/web/gui/src/main/webapp/raw/jweeidkpizn.foo
new file mode 100644
index 0000000..aa599ae
--- /dev/null
+++ b/web/gui/src/main/webapp/raw/jweeidkpizn.foo
Binary files differ
diff --git a/web/gui/src/test/java/org/onosproject/ui/impl/birds/BirdEncoderTest.java b/web/gui/src/test/java/org/onosproject/ui/impl/birds/BirdEncoderTest.java
new file mode 100644
index 0000000..ea0e401
--- /dev/null
+++ b/web/gui/src/test/java/org/onosproject/ui/impl/birds/BirdEncoderTest.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright 2016-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.birds;
+
+import com.google.common.io.Files;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Encrypt png images to .foo format.
+ */
+public class BirdEncoderTest {
+
+    private static final String ORIG = "  original> ";
+    private static final String DATA = "  data> ";
+    private static final String BEAN = "  bean> ";
+    private static final String SAUCE = "  sauce> ";
+    private static final String NONE = "(none)";
+
+    private static final String PNG = ".png";
+    private static final String FOO = ".foo";
+
+    private static class Encoding {
+        private final String name;
+        private String bean = NONE;
+        private String sauce = NONE;
+
+        Encoding(String name) {
+            this.name = name;
+        }
+
+        @Override
+        public String toString() {
+            return ORIG + name + PNG +
+                    DATA + bean + FOO +
+                    BEAN + bean +
+                    SAUCE + sauce;
+        }
+
+        private Encoding encode() {
+            String u = name.toUpperCase();
+            int x = u.codePointAt(1) - 64;
+            int r = (x * 7) % 26;
+
+            String uc = doTransform(r, u);
+            bean = uc.toLowerCase();
+
+            StringBuilder sauceSb = new StringBuilder();
+            sauceSb.append(r).append(":");
+            for (String q : uc.split("")) {
+                sauceSb.append(q.codePointAt(0));
+            }
+            sauce = sauceSb.toString();
+            return this;
+        }
+
+        private String doTransform(int r, String u) {
+            final int m = 65;
+            final int x = 90;
+
+            int d = x - m + 1;
+            int s = x + m;
+            String[] letters = u.split("");
+            StringBuilder sb = new StringBuilder();
+
+            for (String j : letters) {
+                int k = j.codePointAt(0);
+                int e = s - k + r;
+                e = e > x ? e - d : e;
+                sb.append(Character.toChars(e));
+            }
+
+            return sb.toString();
+        }
+
+        String dataName() {
+            return bean + FOO;
+        }
+
+        String pngName() {
+            return name + PNG;
+        }
+    }
+
+
+    private static final FilenameFilter FOO_FILTER =
+            (dir, name) -> name.endsWith(FOO);
+    private static final FilenameFilter PNG_FILTER =
+            (dir, name) -> name.endsWith(PNG);
+
+    private static final Comparator<File> FILE_COMPARATOR =
+            (o1, o2) -> o1.getName().compareTo(o2.getName());
+
+    private static final File DIR =
+            new File("src/test/java/org/onosproject/ui/impl/birds");
+
+    private static final File FOO_DIR = new File(DIR, "foo");
+    private static final File ORIG_DIR = new File(DIR, "orig");
+
+
+    private static final byte UPPER = (byte) 0xf0;
+    private static final byte LOWER = (byte) 0x0f;
+
+
+    private static void print(String fmt, Object... params) {
+        System.out.println(String.format(fmt, params));
+    }
+
+    private List<File> filesIn(File dir, FilenameFilter filter) {
+        File[] files = dir.listFiles(filter);
+        if (files == null) {
+            return Collections.emptyList();
+        }
+        Arrays.sort(files, FILE_COMPARATOR);
+        return Arrays.asList(files);
+    }
+
+    private String basename(File f) {
+        String name = f.getName();
+        int i = name.indexOf(PNG);
+        return name.substring(0, i);
+    }
+
+    private boolean dataRequired(Encoding encoding, List<String> dataFiles) {
+        return !dataFiles.contains(encoding.dataName());
+    }
+
+    private List<String> makeFileNames(List<File> dataFiles) {
+        List<String> names = new ArrayList<>(dataFiles.size());
+        for (File f : dataFiles) {
+            names.add(f.getName());
+        }
+        return names;
+    }
+
+    private final Random random = new Random(new Date().getTime());
+    private final byte[] rbytes = new byte[2];
+
+    private int r1;
+    private int r2;
+
+    private void randomBytes() {
+        random.nextBytes(rbytes);
+        r1 = rbytes[0];
+        r2 = rbytes[1];
+    }
+
+    private void addNoise(ByteBuffer bb, byte b) {
+        randomBytes();
+
+        int upper = b & UPPER;
+        int lower = b & LOWER;
+
+        int uNoise = r1 & LOWER;
+        int lNoise = r2 & UPPER;
+
+        int uEnc = upper | uNoise;
+        int lEnc = lower | lNoise;
+
+        bb.put((byte) uEnc);
+        bb.put((byte) lEnc);
+    }
+
+    private ByteBuffer encodePng(File file) throws IOException {
+        byte[] bytes = Files.toByteArray(file);
+        int size = bytes.length;
+        ByteBuffer bb = ByteBuffer.allocate(size * 2);
+        for (int i = 0; i < size; i++) {
+            addNoise(bb, bytes[i]);
+        }
+        return bb;
+    }
+
+    private void generateDataFile(Encoding encoding) {
+        File png = new File(ORIG_DIR, encoding.pngName());
+        File foo = new File(FOO_DIR, encoding.dataName());
+        ByteBuffer bb;
+        try {
+            bb = encodePng(png);
+            writeBufferToFile(bb, foo);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void writeBufferToFile(ByteBuffer bb, File file)
+            throws IOException {
+        bb.flip();
+        FileChannel chan = new FileOutputStream(file, false).getChannel();
+        chan.write(bb);
+        chan.close();
+        print("    Wrote file: %s  (%d bytes)", file, bb.capacity());
+    }
+
+    @Test @Ignore
+    public void encodeThings() {
+        print("Encoding things...");
+        List<File> originals = filesIn(ORIG_DIR, PNG_FILTER);
+        List<File> dataFiles = filesIn(FOO_DIR, FOO_FILTER);
+        List<String> fileNames = makeFileNames(dataFiles);
+
+        int count = 0;
+        for (File f : originals) {
+            Encoding encoding = new Encoding(basename(f)).encode();
+            print("%n%s", encoding);
+            if (dataRequired(encoding, fileNames)) {
+                generateDataFile(encoding);
+                count++;
+            }
+        }
+
+        print("%nFoo files generated: %d", count);
+    }
+
+}
diff --git a/web/gui/src/test/java/org/onosproject/ui/impl/birds/foo/README.txt b/web/gui/src/test/java/org/onosproject/ui/impl/birds/foo/README.txt
new file mode 100644
index 0000000..dd91308
--- /dev/null
+++ b/web/gui/src/test/java/org/onosproject/ui/impl/birds/foo/README.txt
@@ -0,0 +1 @@
+Foo files will be generated in this directory.
diff --git a/web/gui/src/test/java/org/onosproject/ui/impl/birds/orig/README.txt b/web/gui/src/test/java/org/onosproject/ui/impl/birds/orig/README.txt
new file mode 100644
index 0000000..e414f5c
--- /dev/null
+++ b/web/gui/src/test/java/org/onosproject/ui/impl/birds/orig/README.txt
@@ -0,0 +1 @@
+Place original image in this directory.
