diff --git a/maca_common/src/char16.c b/maca_common/src/char16.c
new file mode 100644
index 0000000000000000000000000000000000000000..74fbd94fe5d69055cfbccd54f65df3f8c0a6f59b
--- /dev/null
+++ b/maca_common/src/char16.c
@@ -0,0 +1,94 @@
+#include<stdio.h>
+#include<stdlib.h>
+#include<string.h>
+
+typedef short char16;
+
+#define char_bit1(c) ((c) & 1)
+#define char_bit2(c) (((c) & 2) >> 1)
+#define char_bit3(c) (((c) & 4) >> 2)
+#define char_bit4(c) (((c) & 8) >> 3)
+#define char_bit5(c) (((c) & 16) >> 4)
+#define char_bit6(c) (((c) & 32) >> 5)
+#define char_bit7(c) (((c) & 64) >> 6)
+#define char_bit8(c) (((c) & 128) >> 7)
+#define length(c) ((!char_bit8((c)) || (char_bit8(c) && !char_bit7(c)))? 1 : 2)
+/*
+int length(char c)
+{
+  if(!char_bit8(c)) return 1;
+  if(char_bit8(c) && !char_bit7(c)) return 1;
+  if(char_bit7(c)) return 2;
+  if(char_bit6(c)) return 3;
+  if(char_bit5(4)) return 4;
+  
+}
+*/
+int utf8_strlen(char *utf8_string)
+{
+  int l = 0;
+  while(*utf8_string){
+    l += (length(*utf8_string) == 1) ? 1 : 0;
+    utf8_string++;
+  }
+  return l;
+}
+
+char *char16toutf8(char16 *char16_string)
+{
+  
+}
+
+
+int char16_strlen(char16 *string)
+{
+  int i=0;
+  while(string[i]) i++;
+  return i;
+}
+
+char16 *utf8tochar16(char *utf8_string)
+{
+  char16 c16;
+  int i,j;
+  int utf8_length = strlen(utf8_string);
+  int char16_length = 0;
+  char16 *char16_string;
+  for(i=0; i < utf8_length; i++)
+    char16_length += length(utf8_string[i]);
+  
+  char16_string = malloc((char16_length + 1)* sizeof(char));
+  for(i=0, j=0; i < utf8_length; i++, j++){
+    if(length(utf8_string[i]) == 1){
+      char16_string[j] = (char16)utf8_string[i];
+    }
+    if(length(utf8_string[i]) == 2){
+      char16_string[j] = utf8_string[i];
+      char16_string[j] << 8;
+      char16_string[j] += utf8_string[++i];
+    }
+  }
+  char16_string[j] = 0;
+  return char16_string;
+}
+
+int main(void)
+{
+  int i;
+  char string[200];
+  char16 *char16_string;
+  strcpy(string, "élémentaire");
+  /* strcpy(string, "konjunktúra-időszaknál"); */
+
+  printf("string = %s\n", string);
+  printf("length = %d\n", (int)strlen(string));
+  printf("utf8 length = %d\n", (int)utf8_strlen(string));
+  for(i=0; i < strlen(string); i++){
+    printf("%d\t%c\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\tl=%d\n", i, string[i], (int)string[i], char_bit1(string[i]), char_bit2(string[i]), char_bit3(string[i]), char_bit4(string[i]), char_bit5(string[i]), char_bit6(string[i]), char_bit7(string[i]), char_bit8(string[i]), length(string[i])); 
+  }
+
+
+  char16_string = utf8tochar16(string);
+  printf("char16_strlen = %d\n", char16_strlen(char16_string));
+  
+}