diff --git a/src/mod/applications/mod_conference/.gitignore b/src/mod/applications/mod_conference/.gitignore
new file mode 100644
index 0000000000..dcc5b25a2b
--- /dev/null
+++ b/src/mod/applications/mod_conference/.gitignore
@@ -0,0 +1,5 @@
+conf/freeswitch.xml.fsxml
+test/images/logo-*.png
+test/images/signalwire-scaled-*.png
+test/test_image
+test/test_member
diff --git a/src/mod/applications/mod_conference/Makefile.am b/src/mod/applications/mod_conference/Makefile.am
index 79bb550408..581228e743 100644
--- a/src/mod/applications/mod_conference/Makefile.am
+++ b/src/mod/applications/mod_conference/Makefile.am
@@ -15,3 +15,22 @@ mod_conference_la_LDFLAGS += -lopenal -lm
 mod_conference_la_CFLAGS += -DOPENAL_POSITIONING
 endif
 
+
+noinst_LTLIBRARIES = libmodconference.la
+
+libmodconference_la_SOURCES  = $(mod_conference_la_SOURCES)
+libmodconference_la_CFLAGS   = $(AM_CFLAGS) -I.
+
+noinst_PROGRAMS = test/test_image test/test_member
+
+test_test_image_SOURCES = test/test_image.c
+test_test_image_CFLAGS = $(AM_CFLAGS) -I.
+test_test_image_LDFLAGS = $(AM_LDFLAGS) -avoid-version -no-undefined $(freeswitch_LDFLAGS) $(switch_builddir)/libfreeswitch.la $(CORE_LIBS) $(APR_LIBS)
+test_test_image_LDADD = libmodconference.la
+
+test_test_member_SOURCES = test/test_member.c
+test_test_member_CFLAGS = $(AM_CFLAGS) -I.
+test_test_member_LDFLAGS = $(AM_LDFLAGS) -avoid-version -no-undefined $(freeswitch_LDFLAGS) $(switch_builddir)/libfreeswitch.la $(CORE_LIBS) $(APR_LIBS)
+test_test_member_LDADD = libmodconference.la
+
+TESTS = $(noinst_PROGRAMS)
diff --git a/src/mod/applications/mod_conference/test/conf/font/AEH.ttf b/src/mod/applications/mod_conference/test/conf/font/AEH.ttf
new file mode 100644
index 0000000000..5a4f54472c
Binary files /dev/null and b/src/mod/applications/mod_conference/test/conf/font/AEH.ttf differ
diff --git a/src/mod/applications/mod_conference/test/conf/freeswitch.xml b/src/mod/applications/mod_conference/test/conf/freeswitch.xml
new file mode 100644
index 0000000000..ce76dc66f5
--- /dev/null
+++ b/src/mod/applications/mod_conference/test/conf/freeswitch.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<document type="freeswitch/xml">
+
+  <section name="configuration" description="Various Configuration">
+    <configuration name="modules.conf" description="Modules">
+      <modules>
+        <load module="mod_sndfile"/>
+        <load module="mod_loopback"/>
+        <load module="mod_dptools"/>
+        <load module="mod_ssml"/>
+        <load module="mod_tone_stream"/>
+        <load module="mod_conference"/>
+        <load module="mod_commands"/>
+        <load module="mod_console"/>
+      </modules>
+    </configuration>
+
+    <configuration name="console.conf" description="Console Logger">
+      <mappings>
+        <map name="all" value="console,debug,info,notice,warning,err,crit,alert"/>
+      </mappings>
+      <settings>
+        <param name="colorize" value="true"/>
+        <param name="loglevel" value="debug"/>
+      </settings>
+    </configuration>
+
+    <configuration name="conference.conf" description="Audio Conference">
+      <profiles>
+        <profile name="default">
+        </profile>
+      </profiles>
+    </configuration>
+  </section>
+
+  <section name="dialplan" description="Regex/XML Dialplan">
+    <context name="default">
+      <extension name="sample">
+        <condition field="destination_number" expression="^3500$">
+          <action application="answer"/>
+          <action application="echo"/>
+        </condition>
+      </extension>
+
+      <extension name="sample">
+        <condition>
+          <action application="info"/>
+        </condition>
+      </extension>
+    </context>
+  </section>
+</document>
diff --git a/src/mod/applications/mod_conference/test/images/signalwire.png b/src/mod/applications/mod_conference/test/images/signalwire.png
new file mode 100644
index 0000000000..8e40bf1203
Binary files /dev/null and b/src/mod/applications/mod_conference/test/images/signalwire.png differ
diff --git a/src/mod/applications/mod_conference/test/test_image.c b/src/mod/applications/mod_conference/test/test_image.c
new file mode 100644
index 0000000000..7e7810a1cf
--- /dev/null
+++ b/src/mod/applications/mod_conference/test/test_image.c
@@ -0,0 +1,113 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2018, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Rienzo <chris@signalwire.com>
+ * Seven Du <seven@signalwire.com>
+ *
+ *
+ * test_image.c -- test images
+ *
+ */
+#include <switch.h>
+#include <stdlib.h>
+
+#include <test/switch_test.h>
+
+FST_CORE_BEGIN("./conf")
+{
+	FST_SUITE_BEGIN(switch_ivr_originate)
+	{
+		FST_SETUP_BEGIN()
+		{
+		}
+		FST_SETUP_END()
+
+		FST_TEARDOWN_BEGIN()
+		{
+		}
+		FST_TEARDOWN_END()
+
+		FST_TEST_BEGIN(scale_test)
+		{
+			switch_image_t *img = switch_img_read_png("images/signalwire.png", SWITCH_IMG_FMT_I420);
+			int i;
+
+			for(i = 2; i <= 10; i += 2) {
+				switch_image_t *scaled_img = NULL;
+				char name[1024];
+
+				switch_snprintf(name, sizeof(name), "images/signalwire-scaled-I420-%d.png", i);
+				switch_img_scale(img, &scaled_img, img->d_w / i, img->d_h / i);
+				fst_requires(scaled_img);
+				switch_img_write_png(scaled_img, name);
+				switch_img_free(&scaled_img);
+			}
+
+			switch_img_free(&img);
+
+			img = switch_img_read_png("images/signalwire.png", SWITCH_IMG_FMT_ARGB);
+
+			for(i = 2; i <= 10; i += 2) {
+				switch_image_t *scaled_img = NULL;
+				char name[1024];
+
+				switch_snprintf(name, sizeof(name), "images/signalwire-scaled-ARGB-%d.png", i);
+				switch_img_scale(img, &scaled_img, img->d_w / i, img->d_h / i);
+				fst_requires(scaled_img);
+				switch_img_write_png(scaled_img, name);
+				switch_img_free(&scaled_img);
+			}
+
+			switch_img_free(&img);
+
+		}
+		FST_TEST_END()
+
+		FST_TEST_BEGIN(scale_test)
+		{
+			switch_image_t *img = switch_img_read_png("images/signalwire-scaled-ARGB-8.png", SWITCH_IMG_FMT_ARGB);
+			char *font_face = "font/AEH.ttf";
+			char *fg = "#000000";
+			char *altfg = "#FFFFFF";
+			char *bg = NULL;
+			int font_size = 6;
+			switch_img_txt_handle_t *txthandle = NULL;
+			const char *txt = "FEESWITCH ROCKS";
+			const char *alttxt = "freeswitch";
+
+			switch_img_txt_handle_create(&txthandle, font_face, fg, bg, font_size, 0, NULL);
+			switch_img_txt_handle_render(txthandle, img, 50, 3, txt, NULL, fg, bg, font_size, 0);
+			switch_img_txt_handle_render(txthandle, img, 60, 15, alttxt, NULL, altfg, "#000000", font_size, 0);
+			switch_img_write_png(img, "images/signalwire-scaled-ARGB-8-txt.png");
+
+			switch_img_free(&img);
+		}
+		FST_TEST_END()
+
+
+
+	}
+	FST_SUITE_END()
+}
+FST_CORE_END()
diff --git a/src/mod/applications/mod_conference/test/test_member.c b/src/mod/applications/mod_conference/test/test_member.c
new file mode 100644
index 0000000000..45e37ea85d
--- /dev/null
+++ b/src/mod/applications/mod_conference/test/test_member.c
@@ -0,0 +1,94 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2019, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Rienzo <chris@signalwire.com>
+ * Seven Du <seven@signalwire.com>
+ *
+ *
+ * test_member.c -- tests member functions
+ *
+ */
+#include <switch.h>
+#include <stdlib.h>
+#include <mod_conference.h>
+#include <conference_member.c>
+
+#include <test/switch_test.h>
+
+FST_CORE_BEGIN("./conf")
+{
+	FST_SUITE_BEGIN(switch_ivr_originate)
+	{
+		FST_SETUP_BEGIN()
+		{
+		}
+		FST_SETUP_END()
+
+		FST_TEARDOWN_BEGIN()
+		{
+		}
+		FST_TEARDOWN_END()
+
+		FST_TEST_BEGIN(member_test)
+		{
+			const char *logo = "{position=left-bot,text_x=center,"
+				"center_offset=190,text=#000000:transparent:font/AEH.ttf:50:"
+				"'FREESWITCH ROCKS',alt_text_x=center,alt_center_offset=190,"
+				"alt_text_y=88,alt_text=#ffffff:transparent:font/AEH.ttf:40:"
+				"'freeswitch'}images/signalwire.png";
+			conference_member_t smember = { 0 };
+			conference_member_t *member = &smember;
+			switch_image_t *img;
+			int i;
+
+			switch_mutex_init(&member->write_mutex, SWITCH_MUTEX_NESTED, fst_pool);
+			switch_mutex_init(&member->flag_mutex, SWITCH_MUTEX_NESTED, fst_pool);
+			switch_mutex_init(&member->fnode_mutex, SWITCH_MUTEX_NESTED, fst_pool);
+			switch_mutex_init(&member->audio_in_mutex, SWITCH_MUTEX_NESTED, fst_pool);
+			switch_mutex_init(&member->audio_out_mutex, SWITCH_MUTEX_NESTED, fst_pool);
+			switch_mutex_init(&member->read_mutex, SWITCH_MUTEX_NESTED, fst_pool);
+			switch_thread_rwlock_create(&member->rwlock, fst_pool);
+
+			conference_member_set_logo(member, logo);
+			img = member->video_logo;
+
+			for(i = 2; i <= 10; i += 2) {
+				switch_image_t *scaled_img = NULL;
+				char name[1024];
+
+				switch_snprintf(name, sizeof(name), "images/logo-signalwire-scaled-%d.png", i);
+				switch_img_scale(img, &scaled_img, img->d_w / i, img->d_h / i);
+				fst_requires(scaled_img);
+				switch_img_write_png(scaled_img, name);
+				switch_img_free(&scaled_img);
+			}
+
+			switch_img_free(&img);
+		}
+		FST_TEST_END()
+
+	}
+	FST_SUITE_END()
+}
+FST_CORE_END()