diff --git a/configure.in b/configure.in
index 2e03066..f97a476 100644
--- a/configure.in
+++ b/configure.in
@@ -495,12 +495,13 @@ khmer_modules="khmer-fc"
 syriac_modules="syriac-fc"
 thai_modules="thai-fc"
 tibetan_modules="tibetan-fc"
+mongolian_modules="mongolian-fc"
 
 if $have_libthai ; then
   thai_modules="$thai_modules,thai-lang"
 fi
 
-all_modules="$arabic_modules,$basic_modules,$hangul_modules,$hebrew_modules,$indic_modules,$khmer_modules,$syriac_modules,$thai_modules,$tibetan_modules"
+all_modules="$arabic_modules,$basic_modules,$hangul_modules,$hebrew_modules,$indic_modules,$khmer_modules,$syriac_modules,$thai_modules,$tibetan_modules,$mongolian_modules"
 
 #
 # Allow building some or all modules included
@@ -585,6 +586,7 @@ AM_CONDITIONAL(INCLUDE_SYRIAC_FC,	echo $included_modules | egrep '(^|,)syriac-fc
 AM_CONDITIONAL(INCLUDE_THAI_FC,		echo $included_modules | egrep '(^|,)thai-fc($|,)' 	> /dev/null)
 AM_CONDITIONAL(INCLUDE_THAI_LANG,	echo $included_modules | egrep '(^|,)thai-lang($|,)' 	> /dev/null)
 AM_CONDITIONAL(INCLUDE_TIBETAN_FC,	echo $included_modules | egrep '(^|,)tibetan-fc($|,)' 	> /dev/null)
+AM_CONDITIONAL(INCLUDE_MONGOLIAN_FC,	echo $included_modules | egrep '(^|,)mongolian-fc($|,)' 	> /dev/null)
 
 AM_CONDITIONAL(DYNAMIC_ARABIC_FC,	echo $dynamic_modules | egrep '(^|,)arabic-fc($|,)' 	> /dev/null)
 AM_CONDITIONAL(DYNAMIC_ARABIC_LANG,	echo $dynamic_modules | egrep '(^|,)arabic-lang($|,)' 	> /dev/null)
@@ -601,6 +603,7 @@ AM_CONDITIONAL(DYNAMIC_SYRIAC_FC,	echo $dynamic_modules | egrep '(^|,)syriac-fc(
 AM_CONDITIONAL(DYNAMIC_THAI_FC,		echo $dynamic_modules | egrep '(^|,)thai-fc($|,)' 	> /dev/null)
 AM_CONDITIONAL(DYNAMIC_THAI_LANG,	echo $dynamic_modules | egrep '(^|,)thai-lang($|,)' 	> /dev/null)
 AM_CONDITIONAL(DYNAMIC_TIBETAN_FC,	echo $dynamic_modules | egrep '(^|,)tibetan-fc($|,)' 	> /dev/null)
+AM_CONDITIONAL(DYNAMIC_MONGOLIAN_FC,	echo $dynamic_modules | egrep '(^|,)mongolian-fc($|,)' 	> /dev/null)
 
 #
 # We use flockfile to implement pango_getline() - should be moved to GLib
@@ -977,6 +980,7 @@ modules/khmer/Makefile
 modules/syriac/Makefile
 modules/thai/Makefile
 modules/tibetan/Makefile
+modules/mongolian/Makefile
 examples/Makefile
 docs/Makefile
 docs/version.xml
diff --git a/modules/Makefile.am b/modules/Makefile.am
index dc8a2c8..9b64c1e 100644
--- a/modules/Makefile.am
+++ b/modules/Makefile.am
@@ -7,10 +7,12 @@ SUBDIRS = 		\
 	hebrew		\
 	indic           \
 	khmer		\
+	mongolian \
 	syriac		\
 	thai		\
 	tibetan
 
+
 EXTRA_DIST =		\
 	Module.mk	\
 	module.def	\
diff --git a/modules/mongolian/Makefile.am b/modules/mongolian/Makefile.am
new file mode 100644
index 0000000..a46d041
--- /dev/null
+++ b/modules/mongolian/Makefile.am
@@ -0,0 +1,25 @@
+include $(top_srcdir)/modules/Module.mk
+
+if HAVE_FREETYPE
+INCLUDES += $(FREETYPE_CFLAGS)
+if INCLUDE_MONGOLIAN_FC
+noinst_LTLIBRARIES += libpango-mongolian-fc.la
+else
+if DYNAMIC_MONGOLIAN_FC
+module_LTLIBRARIES += pango-mongolian-fc.la
+endif
+endif
+endif
+
+fc_sources = \
+	mongolian-fc.c \
+	mongolian-ot.c \
+	mongolian-ot.h
+
+pango_mongolian_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_mongolian_fc_la_LIBADD = $(pangoft2libs)
+pango_mongolian_fc_la_SOURCES = $(fc_sources)
+libpango_mongolian_fc_la_SOURCES = $(fc_sources)
+libpango_mongolian_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_mongolian_fc
+
+-include $(top_srcdir)/git.mk
diff --git a/modules/mongolian/mongolian-fc.c b/modules/mongolian/mongolian-fc.c
new file mode 100644
index 0000000..0a30d50
--- /dev/null
+++ b/modules/mongolian/mongolian-fc.c
@@ -0,0 +1,217 @@
+/* Pango
+ * Shaper for Mongolian script
+ *
+ * Author: Erdene-Ochir Tuguldur <tugstugi@yahoo.com>
+ *
+ * Based on code from other shapers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * The license on the original Indic shaper code is as follows:
+ *
+ *  * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, and/or sell copies of the
+ * Software, and to permit persons to whom the Software is furnished
+ * to do so, provided that the above copyright notice(s) and this
+ * permission notice appear in all copies of the Software and that
+ * both the above copyright notice(s) and this permission notice
+ * appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR
+ * ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in this Software without prior written
+ * authorization of the copyright holder.
+ */
+#include <string.h>
+
+#include "pango-engine.h"
+#include "pango-utils.h"
+#include "pangofc-font.h"
+#include "pango-ot.h"
+
+#include "mongolian-ot.h"
+
+typedef PangoEngineShape MongolianEngineFc;
+typedef PangoEngineShapeClass MongolianEngineFcClass;
+
+#define SCRIPT_ENGINE_NAME "MongolianScriptEngineFc"
+#define RENDER_TYPE PANGO_RENDER_TYPE_FC
+
+static PangoEngineScriptInfo mongolian_scripts[] = {
+	{ PANGO_SCRIPT_MONGOLIAN, "*" }
+};
+
+static PangoEngineInfo script_engines[] = {
+	{
+		SCRIPT_ENGINE_NAME,
+		PANGO_ENGINE_TYPE_SHAPE,
+		RENDER_TYPE,
+		mongolian_scripts,
+		G_N_ELEMENTS(mongolian_scripts)
+	}
+};
+
+static const PangoOTFeatureMap gsub_features[] =
+{
+	{"ccmp", PANGO_OT_ALL_GLYPHS},
+	{"isol", isolated},
+	{"fina", final},
+	{"medi", medial},
+	{"init", initial},
+	{"rlig", PANGO_OT_ALL_GLYPHS},
+	{"calt", PANGO_OT_ALL_GLYPHS}
+};
+
+static const PangoOTFeatureMap gpos_features[] =
+{
+	{"kern", PANGO_OT_ALL_GLYPHS},
+	{"mark", PANGO_OT_ALL_GLYPHS}
+};
+
+static void
+mongolian_engine_shape (PangoEngineShape *engine G_GNUC_UNUSED, PangoFont *font, const char *text, gint length, const PangoAnalysis *analysis, PangoGlyphString *glyphs)
+{
+
+	PangoFcFont *fc_font;
+	FT_Face face;
+	PangoOTRulesetDescription desc;
+	const PangoOTRuleset *ruleset;
+	PangoOTBuffer *buffer;
+	gulong *properties = NULL;
+	glong n_chars;
+	gunichar *wcs;
+	const char *p;
+	int cluster = 0;
+	gboolean rtl = analysis->level % 2 != 0;
+	int i;
+
+	g_return_if_fail (font != NULL);
+	g_return_if_fail (text != NULL);
+	g_return_if_fail (length >= 0);
+	g_return_if_fail (analysis != NULL);
+
+	fc_font = PANGO_FC_FONT (font);
+	face = pango_fc_font_lock_face (fc_font);
+	if (!face)
+		return;
+
+	buffer = pango_ot_buffer_new (fc_font);
+	pango_ot_buffer_set_rtl (buffer, rtl);
+	pango_ot_buffer_set_zero_width_marks (buffer, TRUE);
+
+	wcs = g_utf8_to_ucs4_fast (text, length, &n_chars);
+	properties = g_new0 (gulong, n_chars);
+
+	Mongolian_Assign_Properties (wcs, properties, n_chars);
+
+	g_free (wcs);
+
+	p = text;
+	for (i=0; i < n_chars; i++)
+	{
+		gunichar wc;
+		PangoGlyph glyph;
+
+		wc = g_utf8_get_char (p);
+
+		if (g_unichar_type (wc) != G_UNICODE_NON_SPACING_MARK)
+			cluster = p - text;
+
+		if (pango_is_zero_width (wc))
+			glyph = PANGO_GLYPH_EMPTY;
+		else
+		{
+			gunichar c = wc;
+
+			if (analysis->level % 2)
+				g_unichar_get_mirror_char (c, &c);
+
+			glyph = pango_fc_font_get_glyph (fc_font, c);
+		}
+
+		if (!glyph)
+			glyph = PANGO_GET_UNKNOWN_GLYPH (wc);
+
+		pango_ot_buffer_add_glyph (buffer, glyph, properties[i], cluster);
+
+		p = g_utf8_next_char (p);
+	}
+
+	g_free (properties);
+
+	desc.script = analysis->script;
+	desc.language = analysis->language;
+
+	desc.n_static_gsub_features = G_N_ELEMENTS (gsub_features);
+	desc.static_gsub_features = gsub_features;
+	desc.n_static_gpos_features = G_N_ELEMENTS (gpos_features);
+	desc.static_gpos_features = gpos_features;
+
+	/* TODO populate other_features from analysis->extra_attrs */
+	desc.n_other_features = 0;
+	desc.other_features = NULL;
+
+	ruleset = pango_ot_ruleset_get_for_description (pango_ot_info_get (face), &desc);
+
+	pango_ot_ruleset_substitute (ruleset, buffer);
+	pango_ot_ruleset_position (ruleset, buffer);
+	pango_ot_buffer_output (buffer, glyphs);
+
+	pango_ot_buffer_destroy (buffer);
+
+	pango_fc_font_unlock_face (fc_font);
+}
+
+static void mongolian_engine_fc_class_init(PangoEngineShapeClass *class) {
+	class->script_shape = mongolian_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (MongolianEngineFc, mongolian_engine_fc, mongolian_engine_fc_class_init, NULL)
+
+void PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+	mongolian_engine_fc_register_type (module);
+}
+
+void PANGO_MODULE_ENTRY(exit)(void) {
+}
+
+void PANGO_MODULE_ENTRY( list)(PangoEngineInfo **engines, int *n_engines) {
+	*engines = script_engines;
+	*n_engines = G_N_ELEMENTS(script_engines);
+}
+
+PangoEngine * PANGO_MODULE_ENTRY( create) (const char *id)
+{
+	if (!strcmp (id, SCRIPT_ENGINE_NAME))
+		return g_object_new (mongolian_engine_fc_type, NULL);
+	else
+		return NULL;
+}
diff --git a/modules/mongolian/mongolian-ot.c b/modules/mongolian/mongolian-ot.c
new file mode 100644
index 0000000..6d12f94
--- /dev/null
+++ b/modules/mongolian/mongolian-ot.c
@@ -0,0 +1,142 @@
+/* Pango
+ * Shaper for Mongolian script
+ *
+ * Author: Erdene-Ochir Tuguldur <tugstugi@yahoo.com>
+ *
+ * Based on code from other shapers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * The license on the original Indic shaper code is as follows:
+ *
+ *  * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, and/or sell copies of the
+ * Software, and to permit persons to whom the Software is furnished
+ * to do so, provided that the above copyright notice(s) and this
+ * permission notice appear in all copies of the Software and that
+ * both the above copyright notice(s) and this permission notice
+ * appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR
+ * ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in this Software without prior written
+ * authorization of the copyright holder.
+ */
+#include "mongolian-ot.h"
+
+static mongolian_character_class  Get_Character_Class (gunichar* string, int pos, int length, int direction)
+{
+	if (pos == 0 && direction < 0)
+		return other;
+
+	pos += direction;
+
+	if (pos >= length)
+		return other;
+
+	if (string[pos] >= 0x180B && string[pos] < 0x180E && direction != 0) // variation selector
+		return variation_selector;
+	else if (string[pos] == 0x180E) // mongolian vowel seperator
+		return narrow_space;
+	else if (string[pos] == 0x202F) // no break narrow space
+		return narrow_space;
+	else if (string[pos] >= 0x1800 && string[pos] < 0x1820)
+		return other;
+	else if (string[pos] >= 0x1820 && string[pos] < 0x1878)
+		return letter;
+	else if (string[pos] >= 0x1880 && string[pos] < 0x18AB)
+		return letter;
+	else
+		return other;
+}
+
+
+FT_Error  Mongolian_Assign_Properties (gunichar *string, gulong *properties, int length)
+{
+	mongolian_character_class  previous, current, next, nextnext;
+	int      i;
+
+	if (!string || !properties || length == 0)
+		return FT_Err_Invalid_Argument;
+
+	for (i = 0; i < length; i++)
+	{
+		previous = Get_Character_Class (string, i, length, -1);
+		current  = Get_Character_Class (string, i, length,  0);
+		next     = Get_Character_Class (string, i, length,  1);
+		nextnext = Get_Character_Class (string, i, length,  2);
+
+		if (current == letter)
+		{
+			if (previous == other)
+			{
+				if (next == letter || next == variation_selector)
+				{
+					properties[i] |= initial_p;
+					continue;
+				}
+			}
+
+			if (previous == letter || previous == variation_selector || previous == narrow_space)
+			{
+				if (next == other || next == narrow_space) {
+					properties[i] |= final_p;
+					continue;
+				}
+				if (next == variation_selector && (nextnext == other || nextnext == narrow_space))
+				{
+					properties[i] |= final_p;
+					continue;
+				}
+			}
+
+			if (previous == letter || previous == variation_selector || previous == narrow_space)
+			{
+				if (next == letter)
+				{
+					properties[i] |= medial_p;
+					continue;
+				}
+				if (next == variation_selector && nextnext == letter)
+				{
+					properties[i] |= medial_p;
+					continue;
+				}
+			}
+		}
+
+		properties[i] |= isolated_p;
+	}
+
+	return FT_Err_Ok;
+}
+
+
+/* End */
diff --git a/modules/mongolian/mongolian-ot.h b/modules/mongolian/mongolian-ot.h
new file mode 100644
index 0000000..1c46b4a
--- /dev/null
+++ b/modules/mongolian/mongolian-ot.h
@@ -0,0 +1,92 @@
+/* Pango
+ * Shaper for Mongolian script
+ *
+ * Author: Erdene-Ochir Tuguldur <tugstugi@yahoo.com>
+ *
+ * Based on code from other shapers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * The license on the original Indic shaper code is as follows:
+ *
+ *  * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, and/or sell copies of the
+ * Software, and to permit persons to whom the Software is furnished
+ * to do so, provided that the above copyright notice(s) and this
+ * permission notice appear in all copies of the Software and that
+ * both the above copyright notice(s) and this permission notice
+ * appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR
+ * ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in this Software without prior written
+ * authorization of the copyright holder.
+ */
+#include <pango/pango-ot.h>
+
+enum  joining_type_
+{
+	isolated = 1,
+	final    = 2,
+	initial  = 4,
+	medial   = 8
+};
+
+typedef enum joining_type_  joining_type;
+
+/*
+ * A glyph's property value as needed by e.g. TT_GSUB_Apply_String()
+ * specifies which features should *not* be applied
+ */
+enum  mongolian_glyph_property_
+{
+	isolated_p = final    | initial | medial,
+	final_p    = isolated | initial | medial,
+	initial_p  = isolated | final   | medial,
+	medial_p   = isolated | final   | initial
+};
+
+typedef enum mongolian_glyph_property_  mongolian_glyph_property;
+
+enum  mongolian_character_class_
+{
+	letter,
+	narrow_space, // no break narrow space AND mongolian vowel seperator
+	variation_selector,
+	other
+};
+
+typedef enum mongolian_character_class_  mongolian_character_class;
+
+FT_Error  Mongolian_Assign_Properties (gunichar   *string,
+				    gulong     *properties,
+				    int         length);
+
+/* End */
