diff --git a/src/mami.js/flashii.js b/src/mami.js/flashii.js
index 0577cd8..f4bef6f 100644
--- a/src/mami.js/flashii.js
+++ b/src/mami.js/flashii.js
@@ -49,7 +49,7 @@ const Flashii = function(baseUrl) {
         const url = createUrl(path, fields);
         if(params)
             for(const name in params) {
-                if(name === 'fields')
+                if(name === 'fields' || params[name] === null || params[name] === undefined)
                     continue;
 
                 url.searchParams.set(name, params[name]);
@@ -146,5 +146,38 @@ const Flashii = function(baseUrl) {
         return body;
     };
 
+    const verifyKaomojiId = id => {
+        if(typeof id === 'number')
+            id = id.toString();
+        if(/^([^0-9]+)$/gu.test(id))
+            throw new Error('id argument is not an acceptable kaomoji id.');
+        return id;
+    };
+
+    fii.v1.kaomoji = async function({ as=null, fields=null, fresh=false }) {
+        const { status, body } = await send({ method: 'GET', path: '/v1/kaomoji', params: { as }, fields, fresh });
+
+        if(status === 400)
+            throw new Error('As or fields argument contains unsupported value.');
+        if(status > 299)
+            throw new Error(`Failed to fetch kaomoji with error code ${status}.`);
+
+        return body;
+    };
+    fii.v1.kaomoji.kaomoji = async function({ id, fields=null, fresh=false }) {
+        id = verifyKaomojiId(id);
+
+        const { status, body } = await send({ method: 'GET', path: `/v1/kaomoji/${id}`, fields, fresh });
+
+        if(status === 400)
+            throw new Error('Fields argument contains unsupported value.');
+        if(status === 404)
+            throw new Error('Requested kaomoji does not exist.');
+        if(status > 299)
+            throw new Error(`Failed to fetch kaomoji "${id}" with error code ${status}.`);
+
+        return body;
+    };
+
     return fii;
 };
diff --git a/src/mami.js/main.js b/src/mami.js/main.js
index 64b8d2e..78c73fe 100644
--- a/src/mami.js/main.js
+++ b/src/mami.js/main.js
@@ -378,7 +378,7 @@ const MamiInit = async args => {
     });
 
     settings.watch('weeaboo', ev => {
-        if(ev.detail.value) Weeaboo.init();
+        if(ev.detail.value) Weeaboo.init(ctx.flashii);
     });
 
     settings.watch('osuKeysV2', ev => {
diff --git a/src/mami.js/weeb.js b/src/mami.js/weeb.js
index 0379aa5..5ae0bcf 100644
--- a/src/mami.js/weeb.js
+++ b/src/mami.js/weeb.js
@@ -11,12 +11,12 @@ const Weeaboo = (function() {
     const userSfx = new Map;
     const pub = {};
 
-    pub.init = function() {
+    pub.init = function(flashii) {
         if(kaomoji.length > 0)
             return;
 
-        $xhr.get(futami.get('kaomoji'))
-            .then(resp => kaomoji = resp.text.split("\n"));
+        flashii.v1.kaomoji({ as: 'array' })
+            .then(list => kaomoji = list);
     };
 
     pub.getRandomKaomoji = function(allowEmpty, message) {