diff --git a/bt5/erp5_dms/SkinTemplateItem/portal_skins/erp5_dms/ContributionTool_getPropertyDictFromFileName.xml b/bt5/erp5_dms/SkinTemplateItem/portal_skins/erp5_dms/ContributionTool_getPropertyDictFromFileName.xml
index 21be148feb263fe8702bcd5b5b8be58caf46ada3..b9eccf6edbf5691606df7872506ce691473128c3 100644
--- a/bt5/erp5_dms/SkinTemplateItem/portal_skins/erp5_dms/ContributionTool_getPropertyDictFromFileName.xml
+++ b/bt5/erp5_dms/SkinTemplateItem/portal_skins/erp5_dms/ContributionTool_getPropertyDictFromFileName.xml
@@ -72,7 +72,10 @@
   Called by portal_contributions.getPropertyDictFromFilename\n
 \n
   Receives file name and a dict of properties found in file name by\n
-  using regular expression defined in preferences.\n
+  using regular expression defined in preferences. \n
+\n
+  Uses provided arguments to generate document\'s reference, language, \n
+  title, source_project and/or source_conference.\n
 \n
   If necessary can do additional things (like mapping\n
   portal type id to portal type name).\n
@@ -80,12 +83,62 @@
   Type-based.\n
 """\n
 \n
-new_dict = {}\n
-for k, v in property_dict.items():\n
-  if v:\n
-    if k == \'language\':\n
-      v = v.lower()\n
-    new_dict[k] = v\n
+# convert language to lowercase\n
+if property_dict.has_key(\'language\'):\n
+  property_dict[\'language\'] = property_dict[\'language\'].lower()\n
+\n
+language = property_dict.get(\'language\', \'en\')\n
+version = property_dict.get(\'version\', \'001\')\n
+local_id = property_dict.get(\'local_id\', \'undefined\')\n
+group_reference_path = property_dict.get(\'group_reference_path\', None)\n
+source_conference_reference = property_dict.get(\'source_conference_reference\', None)\n
+source_project_reference = property_dict.get(\'source_project_reference\', None)\n
+\n
+new_dict = dict(language = language, \n
+                version = version)\n
+\n
+if source_project_reference:\n
+  # generate document\'s reference using project reference\n
+  reference = \'P-%s-%s\' %(source_project_reference, local_id)\n
+  project = context.portal_catalog.getResultValue(reference = source_project_reference,\n
+                                                  portal_type = \'Project\')\n
+  if project:\n
+    new_dict[\'source_project\'] = project.getRelativeUrl()\n
+elif source_conference_reference:\n
+  # generate document\'s reference using conference reference\n
+  reference = \'C-%s-%s\' % (source_conference_reference, local_id)\n
+  conference = context.portal_catalog.getResultValue(reference = source_project_reference,\n
+                                                     portal_type = \'Conference\')\n
+  if conference:\n
+    new_dict[\'source_conference\'] = conference.getRelativeUrl()\n
+elif group_reference_path:\n
+  # generate document\'s reference using conference reference\n
+  reference = \'%s-%s\' % (group_reference_path, local_id)\n
+  group_reference_list = group_reference_path.split(\'-\')\n
+  if group_reference_list:\n
+    group_id = group_reference_list[0]\n
+    category = context.portal_catalog.getResultValue(reference = group_id, \n
+                                                     portal_type = \'Category\')\n
+    if category is not None and category.getBaseCategory().getId()==\'group\':\n
+      for group_id in group_reference_list[1:]:\n
+        category = context.portal_catalog.getResultValue(reference = group_id, \n
+                                                         parent_uid = category.getUid(),\n
+                                                         portal_type = \'Category\')\n
+        if category is None: \n
+          break\n
+  if category is not None:\n
+     new_dict[\'group\'] = \'/\'.join(category.getRelativeUrl().split(\'/\')[1:])\n
+else:\n
+  # no reference could be found\n
+  # XXX: This can break DMS/KM functionality especially revision support!\n
+  reference = None\n
+\n
+if reference:\n
+  new_dict[\'reference\'] = reference\n
+\n
+# Set title to file_name by default\n
+new_dict[\'title\'] = file_name.split(\'.\')[0]\n
+\n
 return new_dict\n
 </string> </value>
         </item>
@@ -137,12 +190,26 @@ return new_dict\n
                           <tuple>
                             <string>file_name</string>
                             <string>property_dict</string>
-                            <string>new_dict</string>
-                            <string>_getiter_</string>
                             <string>_getattr_</string>
-                            <string>k</string>
-                            <string>v</string>
+                            <string>_getitem_</string>
                             <string>_write_</string>
+                            <string>language</string>
+                            <string>version</string>
+                            <string>local_id</string>
+                            <string>None</string>
+                            <string>group_reference_path</string>
+                            <string>source_conference_reference</string>
+                            <string>source_project_reference</string>
+                            <string>dict</string>
+                            <string>new_dict</string>
+                            <string>reference</string>
+                            <string>context</string>
+                            <string>project</string>
+                            <string>conference</string>
+                            <string>group_reference_list</string>
+                            <string>group_id</string>
+                            <string>category</string>
+                            <string>_getiter_</string>
                           </tuple>
                         </value>
                     </item>
diff --git a/bt5/erp5_dms/bt/revision b/bt5/erp5_dms/bt/revision
index 7383593264266047971edd4d66abb1edfbe8b204..876cce90b1079891de8d9dfd1dbbadc35641e8de 100644
--- a/bt5/erp5_dms/bt/revision
+++ b/bt5/erp5_dms/bt/revision
@@ -1 +1 @@
-652
\ No newline at end of file
+654
\ No newline at end of file