--- C:\DOCUME~1\EB\LOKALA~1\Temp\packet-gsm_sms-0.c	2008-01-07 20:07:47.765625000 +0100
+++ c:\Wireshark\epan\dissectors\packet-gsm_sms.c	2008-01-07 20:05:00.000000000 +0100
@@ -672,7 +672,9 @@
 	case 0x00: str = "GSM 7 bit default alphabet";
 	    *seven_bit = TRUE;
 	    break;
-	case 0x01: str = "8 bit data"; break;
+	case 0x01: str = "8 bit data"; 
+		*eight_bit = TRUE;
+		break;
 	case 0x02: str = "UCS2 (16 bit)";
 	    *ucs2 = TRUE;
 	    break;
@@ -1828,6 +1830,9 @@
     guint32	out_len;
     char	*ustr;
     char        messagebuf[160];
+	gchar *utf8_text = NULL;
+	GIConv cd;	
+	GError *l_conv_error = NULL;	
 
     fill_bits = 0;
 
@@ -1910,11 +1915,26 @@
 		}
 		else if (ucs2)
 			{
+			if ((cd = g_iconv_open("UTF-8","UCS-2BE")) != (GIConv)-1)			
+			{
+				utf8_text = g_convert_with_iconv(tvb->real_data +  offset, length , cd , NULL , NULL , &l_conv_error);
+				if(!l_conv_error){
+					proto_tree_add_text(subtree, tvb, offset, length, "%s", utf8_text);
+				}else{
+					proto_tree_add_text(subtree, tvb, offset, length, "%s", "Failed on UCS2 contact wireshark");
+				}
+				if(utf8_text)
+					g_free(utf8_text);
+				g_iconv_close(cd);				
+			}
+			else
+			{
 			/* tvb_get_ephemeral_faked_unicode takes the lengt in number of guint16's */
 			ustr = tvb_get_ephemeral_faked_unicode(tvb, offset, (length>>1), FALSE);
 			proto_tree_add_text(subtree, tvb, offset, length, "%s", ustr);
 		}
     }
+    }
 }
 
 /* 9.2.3.25 */
