diff --git a/src/modules/_Image_FreeType/freetype.c b/src/modules/_Image_FreeType/freetype.c
index 872e2438c61e0d0032b3abc2522d0641e4c204b1..f3b849907e97bacfb9a7fc9baf1b6456c6485fec 100644
--- a/src/modules/_Image_FreeType/freetype.c
+++ b/src/modules/_Image_FreeType/freetype.c
@@ -339,7 +339,7 @@ static void image_ft_face_info( INT32 args )
   f_aggregate_mapping( element_count );
 }
 
-/*! @decl void create(string font, int|void face_number)
+/*! @decl void create(string(8bit) font, int(0..)|void face_number)
  *! @param font
  *!   The path of the font file to use
  *! @param face_number
@@ -349,20 +349,22 @@ static void image_ft_face_info( INT32 args )
 static void image_ft_face_create( INT32 args )
 {
   int er;
+  char *font;
   int face_number = 0;
   FT_Encoding best_enc = ft_encoding_none;
   int enc_no, enc_score, best_enc_score = -2;
-  if( !args || TYPEOF(sp[-args]) != T_STRING )
-    Pike_error("Illegal argument 1 to FreeType.Face. Expected string.\n");
-  if(args == 2 && TYPEOF(sp[-args+1]) != T_INT)
-    Pike_error("Illegal argument 2 to FreeType.Face. Expected integer.\n");
-  if(args == 2)
-    face_number = sp[-args+1].u.integer;
-  er = FT_New_Face( library, sp[-args].u.string->str, face_number, &TFACE );
+
+  get_all_args("FreeType.Face", args, "%s.%d", &font, &face_number);
+
+  if (face_number < 0) {
+    SIMPLE_BAD_ARG_ERROR("FreeType.Face", 2, "int(0..)");
+  }
+
+  er = FT_New_Face( library, font, face_number, &TFACE );
   if( er == FT_Err_Unknown_File_Format )
-    Pike_error("Failed to parse the font file %S\n", sp[-args].u.string);
+    Pike_error("Failed to parse the font file %s\n", font);
   else if( er )
-    Pike_error("Failed to open the font file %S\n", sp[-args].u.string);
+    Pike_error("Failed to open the font file %s\n", font);
   for(enc_no=0; enc_no<TFACE->num_charmaps; enc_no++) {
     switch(TFACE->charmaps[enc_no]->encoding) {
     case ft_encoding_symbol: enc_score = -1; break;
@@ -443,7 +445,7 @@ PIKE_MODULE_INIT
     start_new_program( );
     ADD_STORAGE( struct face );
 
-    ADD_FUNCTION("create",image_ft_face_create, tFunc(tStr tOr(tInt,tVoid),tVoid), 0 );
+    ADD_FUNCTION("create",image_ft_face_create, tFunc(tStr8 tOr(tIntPos,tVoid),tVoid), 0 );
     ADD_FUNCTION("set_size",image_ft_face_set_size,tFunc(tInt tInt,tObj),0);
     ADD_FUNCTION("attach_file",image_ft_face_attach_file,tFunc(tString,tVoid),0);
     ADD_FUNCTION("list_encodings",image_ft_face_list_encodings,tFunc(tNone,tArr(tString)),0);