diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_Testcases.ttcn b/regression_test/XML/XmlWorkflow/src/xmlTest_Testcases.ttcn
index 5e58d36723131fb8a7269dbb3a52d5ccfef46407..cf904d69e507f4da4a69c39f42f42deb359786a1 100644
--- a/regression_test/XML/XmlWorkflow/src/xmlTest_Testcases.ttcn
+++ b/regression_test/XML/XmlWorkflow/src/xmlTest_Testcases.ttcn
@@ -231,6 +231,15 @@ testcase tc_options_f() runs on xmlTest_CT
   }
 }
 
+//         -J file:        the XSD files are taken from file instead of the command line
+testcase tc_options_J() runs on xmlTest_CT
+{
+  f_shellCommandWithVerdict(xsd2ttcn_command & " -J XmlTest_files1.txt","",c_shell_successWithWarning );
+  if(getverdict==pass) {
+    f_compareFiles("www_XmlTest_org_annotation2_e.ttcn","www_XmlTest_org_annotation.ttcn", c_numOfDiff_ModName);
+  }
+}
+
 testcase tc_options_g() runs on xmlTest_CT
 {
   f_shellCommandWithVerdict(xsd2ttcn_command & " -g dont_generate_element_substitution.xsd","",c_shell_successWithoutWarningAndError );
@@ -2511,6 +2520,7 @@ control {
   execute(tc_options_c());
   execute(tc_options_e());
   execute(tc_options_f());
+  execute(tc_options_J());
   execute(tc_options_g());
   execute(tc_options_p());
   execute(tc_options_s());
diff --git a/usrguide/referenceguide.doc b/usrguide/referenceguide.doc
index b1b6454e40c3fb035f6aead98d17ac4818572a06..bcc45dba3bec8710cc977b1a0f89f11f560850f0 100644
Binary files a/usrguide/referenceguide.doc and b/usrguide/referenceguide.doc differ
diff --git a/xsdconvert/converter.cc b/xsdconvert/converter.cc
index c46aa7572e37f2df22020d82c56784328634b83b..fbd69f099ca4907309f7a4badd7363cf0487bb79 100644
--- a/xsdconvert/converter.cc
+++ b/xsdconvert/converter.cc
@@ -31,7 +31,7 @@
 bool c_flag_used = false;
 int  d_flag_used = 0;
 bool e_flag_used = false;
-bool f_flag_used = false;
+bool f_flag_used = false; // also J flag
 bool g_flag_used = true;
 bool h_flag_used = false;
 bool m_flag_used = false;
@@ -72,7 +72,7 @@ int main(int argc, char **argv) {
   char c;
   opterr = 0;
 
-  while ((c = getopt(argc, argv, "cdef:ghmnpqstvwxz")) != -1) {
+  while ((c = getopt(argc, argv, "cdef:ghJ:mnpqstvwxz")) != -1) {
     switch (c) {
       case 'c':
         c_flag_used = true;
@@ -84,6 +84,7 @@ int main(int argc, char **argv) {
         e_flag_used = true;
         break;
       case 'f':
+      case 'J':
         f_flag_used = true;
         from_file = optarg;
         break;
@@ -241,13 +242,13 @@ static void printProductinfo() {
 
 static void printUsage(const char * argv0) {
   fprintf(stderr, "\n"
-    "usage: %s [-ceghmpstVwx] [-f file] schema.xsd ...\n"
+    "usage: %s [-ceghmpstVwx] [-f file] [-J file] schema.xsd ...\n"
     "	or %s -v\n"
     "\n"
     "OPTIONS:\n"
     "	-c:		disable the generation of comments in TTCN-3 modules\n"
     "	-e:		disable the generation of encoding instructions in TTCN-3 modules\n"
-    "	-f file:	the names of XSD files are taken from file instead of the command line\n"
+    "	-f|J file:	the names of XSD files are taken from file instead of the command line\n"
     "	-g:		generate TTCN-3 code disallowing element substitution\n"
     "	-h:		generate TTCN-3 code allowing type substitution\n"
     "	-m:		generate only the UsefulTtcn3Types and XSD predefined modules"