diff -r -u pango1.0-1.14.8.orig/modules/indic/indic-ot.c pango1.0-1.14.8/modules/indic/indic-ot.c
--- pango1.0-1.14.8.orig/modules/indic/indic-ot.c	2007-10-16 12:21:49.000000000 +0530
+++ pango1.0-1.14.8/modules/indic/indic-ot.c	2007-10-16 12:39:25.000000000 +0530
@@ -304,6 +304,12 @@
         case CC_MODIFYING_MARK_POST:
         case CC_NUKTA:
         case CC_VIRAMA:
+            /* patch for rendering fix for Malayalam SAMVRUTHOKARA by suresh */
+            if (chars[prev - 1] == 0x0D41) {
+            writeChar(&output, chars[prev], prev, blwf_p);
+	    break;
+	    }
+            /* end patch */
         case CC_AL_LAKUNA:
             writeChar(&output, C_DOTTED_CIRCLE, prev, blwf_p);
             writeChar(&output, chars[prev], prev, blwf_p);
@@ -442,24 +448,6 @@
 		writeChar(&output, chars[i], /*i*/ prev, nukt_p);
 	    }
 
-            /* for the special conjuction of Cons+0x0d4d+0x0d31 of Malayalam */
-	    if ((baseConsonant - 2 >= 0) &&
-		(chars[baseConsonant - 1] == 0x0d4d) &&
-		(chars[baseConsonant] == 0x0d31) &&
-		((chars[baseConsonant - 2] >= 0x0d15) && 
-		 (chars[baseConsonant - 2] <= 0x0d39)))  {
-      		swapChars (&output, -1, -3);
-	    }
-
-            /* for the special conjuction of Cons+0x0d4d+0x0d30 of Malayalam */
-	    if ((baseConsonant - 2 >= 0) &&
-		(chars[baseConsonant - 1] == 0x0d4d) &&
-		(chars[baseConsonant] == 0x0d30) &&
-		((chars[baseConsonant - 2] >= 0x0d15) && 
-		 (chars[baseConsonant - 2] <= 0x0d39)))  {
-      		swapChars (&output, -1, -3);
-	    }
-
 	    if ((class_table->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
 		writeMbelow(&output);
 		writeMabove(&output);
diff -r -u pango1.0-1.14.8.orig/modules/indic/indic-ot-class-tables.c pango1.0-1.14.8/modules/indic/indic-ot-class-tables.c
--- pango1.0-1.14.8.orig/modules/indic/indic-ot-class-tables.c	2007-10-16 12:21:49.000000000 +0530
+++ pango1.0-1.14.8/modules/indic/indic-ot-class-tables.c	2007-10-16 12:29:49.000000000 +0530
@@ -214,8 +214,8 @@
 {
     _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, /* 0D00 - 0D0F */
     _iv, _xx, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, /* 0D10 - 0D1F */
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _pb, /* 0D20 - 0D2F */
-    _cn, _cn, _ct, _ct, _ct, _pb, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _dr, _dr, /* 0D30 - 0D3F */
+    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, /* 0D20 - 0D2F */
+    _ct, _cn, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _dr, _dr, /* 0D30 - 0D3F */
     _dr, _dr, _dr, _dr, _xx, _xx, _dl, _dl, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, /* 0D40 - 0D4F */
     _xx, _xx, _xx, _xx, _xx, _xx, _xx, _dr, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0D50 - 0D5F */
     _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  /* 0D60 - 0D6F */
