diff --git a/docs/Installation_fr.md b/docs/Installation_fr.md
index bdd054b6c456380b8d91c5e7c32536b1b9bdafb0..9c178c061cd905a1e3380d362128c35fcb9ed372 100644
--- a/docs/Installation_fr.md
+++ b/docs/Installation_fr.md
@@ -18,23 +18,26 @@ Suivez les instructions que vous trouverez sur Internet, par exemple [ici](https
  2. Placez-vous dans ce répertoire et tapez la commande: npm install  
  Cette commande installe tous les paquets React-Admin nécessaires ainsi que les paquets dont ils dépendent.
  3. Pour construire la version de production, 
-    1. modifiez dans le fichier .env le paramètre VITE_BACKEND_URL pour lui indiquer l'URL du serveur qui implémente l'**API AROLIOS**. Exemple: https://my_arolios_server
-    2. tapez la commande: npm build  
+    1. copiez le fichier .env_template dans le fichier .env et modifiez le paramètre VITE_BACKEND_URL pour lui indiquer l'URL du serveur qui implémente l'**API AROLIOS**. Exemple: https://my_arolios_server
+    2. tapez la commande: npm run build  
     Un répertoire dist est créé avec les fichiers nécessaires à l'exécution
 
 ### Déploiement
 
-1. Copiez le répertoire dist créé dans l'emplacement adéquat pour le serveur web (par exemple Apache) qui servira aux utilisateurs **AROLIOS WebUI**. Exemple /var/www/arolios_webui
-2. Vérifiez la présence du fichier .htaccess fourni pour le serveur Apache. Si vous l'utilisez, il faut configurer Apache avec, par exemple sur Linux,  les commandes suivantes:
+1. Copiez le répertoire dist créé dans le répertoire adéquat pour le serveur web (par exemple Apache) qui servira aux utilisateurs **AROLIOS WebUI**. Exemple /var/www/arolios_webui
+2. Si vous utilisez le serveur Apache (recommandé), copiez dans ce répertoire le fichier .htaccess fourni avec les sources. Dans ce cas, il faut configurer Apache avec, par exemple sur Linux,  les commandes suivantes:
     1. sudo a2enmode rewrite
     2. sudo systemctl apache2 restart
 3. Configurez votre serveur web (Apache par exemple) pour servir **AROLIOS WebUI**. Par exemple avec Apache sur Linux:
-    1. Placez vous dans le repertoire /etc/apache2/sites-available
-    2. Copiez le fichier 000-default.conf (par exemple arolios.conf)
-    3. Dans cette copie, renseignez les paramètres ServerName (l'URL pour adresser **AROLIOS WebUI**, par exemple www.my-arolios.example.com)  et DocumentRoot (l'emplacement du fichier index.html, par exemple /var/www/arolios_webui)
-    4. Passez la commande: sudo a2ensite /etc/apache/sites-available/arolios.conf
-    5. Redémarrez le serveur Apache: sudo systemctl restart apache2
-4. Si le serveur de l'API AROLIOS que vous avez renseigné dans le paramètre VITE_BACKEND_URL est lancé ainsi que votre serveur web servant **AROLIOS WebUI**  (Apache par exemple), vous pouvez démarrer **AROLIOS WebUI** depuis votre navigateur web en l'adressant avec l'URL renseigné dans la configuration de votre serveur Web ( par exemple www.my-arolios.example.com)
+    1. Placez-vous dans le repertoire /etc/apache2/sites-available
+    2. Copiez le fichier 000-default.conf ou default-ssl.conf si vous voulez fonctionner en HTTPS (par exemple arolios.conf)
+    3. Dans cette copie, renseignez les paramètres ServerName (l'URL pour adresser **AROLIOS WebUI**, par exemple www.my-arolios.example.com)  et DocumentRoot (l'emplacement du fichier index.html, par exemple /var/www/arolios_webui). 
+    4. Si vous fonctionnez en mode HTTPS, renseignez dans votre fichier de configuration les lignes SSLCertificateFile  et SSLCertificateKeyFile et après enregistrement passez la commande: sudo a2enmod ssl
+    5. Enregistrez votre site en passant la commande suivante (par exemple pour arolios.conf): sudo a2ensite arolios.conf 
+    6. Redémarrez le serveur Apache: sudo systemctl restart apache2
+4. Le serveur de l'API AROLIOS fonctionnant en mode HTTPS, chaque utilisateur potentiel doit installer dans son navigateur le certificat racine créé lors de l'installation du serveur (voir la documentation dans le dépôt **arolios-doc** ). Dans le paramétrage du navigateur, voir la rubrique des certificats, et importer votre certificat dans les autorités.
+5. Si le serveur de l'API AROLIOS que vous avez renseigné dans le paramètre VITE_BACKEND_URL est lancé ainsi que votre serveur web servant **AROLIOS WebUI**  (Apache par exemple), vous pouvez démarrer **AROLIOS WebUI** depuis votre navigateur web en l'adressant avec l'URL renseigné dans la configuration de votre serveur Web ( par exemple www.my-arolios.example.com).
+ en mode HTTPS éventuellement
 En cas de difficulté, référez-vous à la documentation de votre serveur web ou aux articles disponibles sur Internet pour y déployer une application React.
 
 
diff --git a/src/pages/about/index.jsx b/src/pages/about/index.jsx
index 8e524b51b302d8ffb8ab1b2166621fb7f7d4478c..1593a0e0656003f53fc375a2fdad5b0eaddd4414 100644
--- a/src/pages/about/index.jsx
+++ b/src/pages/about/index.jsx
@@ -38,13 +38,13 @@ const About = () => {
 
     return (
         <div>
-            <p>AROLIOS WebUI &nbsp;{translate('arolios.WebUI_purpose')}.</p>
+            <p>AROLIOS WebUI &nbsp;{translate('arolios.webui_purpose')}.</p>
             <p>AROLIOS &nbsp;{translate('arolios.trademark_registered')}.</p>
             <p>AROLIOS WebUI &nbsp; &copy; 2024 Philippe Coicadan. {translate('arolios.all_rights_reserved')}.</p>
             <p>AROLIOS WebUI &nbsp;{translate('arolios.license_intro')}</p>
 
             <LicenseText/>
-            <p>{translate('arolios.source_link')}&nbsp; http://my_  repository/arolios-webui</p>
+            <p>{translate('arolios.source_link')}&nbsp; https://lab.frogg.it/philcoicadan/arolios-webui</p>
         
         </div>
     )
diff --git a/src/pages/dashboard/index.jsx b/src/pages/dashboard/index.jsx
index 380f280f607889aa48d330a31572c7974cb7cd19..901e4dda2499d2537d223e2edc7e4a2da4c2db9f 100644
--- a/src/pages/dashboard/index.jsx
+++ b/src/pages/dashboard/index.jsx
@@ -1,25 +1,29 @@
 import { useCreatePath} from 'react-admin';
 import {useNavigate } from 'react-router-dom';
-import { useContext } from "react";
+import { useContext , useEffect} from "react";
 import { ClassifierContext} from '../../utils/contexts'
 
 const CustomDashboard = () => {
     const createPath = useCreatePath();
     const navigate = useNavigate();
     const {mapDomainNameResource} = useContext(ClassifierContext);
+    const def_dom = sessionStorage.getItem('arolios_model_default_domain') ;
 
+    useEffect(() => {
+
+        if (def_dom) {
+            const { name, _tname } = JSON.parse(sessionStorage.getItem('arolios_model_default_domain'));
+            const path = createPath({ resource: `${name}/classes`, type: 'list' });
+            mapDomainNameResource(name, _tname);
+
+            return navigate(path);
 
-    const def_dom = sessionStorage.getItem('arolios_model_default_domain') ;
-    if ( def_dom ) {
-        const { name, _tname} = JSON.parse(sessionStorage.getItem('arolios_model_default_domain'));
-        mapDomainNameResource (name, _tname);
-        return navigate(createPath( { resource: `${name}/classes`, type: 'list'}));
 
- 
-    } else {
-       
-        return navigate(createPath( { resource: 'domains', type: 'list' }));
-    }
+        } else {
+            const path = createPath({ resource: 'domains', type: 'list' });
+            return navigate(path);
+        }
+    }, []);
 }
 
 export default CustomDashboard;
\ No newline at end of file
diff --git a/src/resources/instances/index.jsx b/src/resources/instances/index.jsx
index 4b27f9154e43a5467a36202f4866ba037072296b..d8e59ce92ebd53d57d85a1ad428cc8f2a9464c83 100644
--- a/src/resources/instances/index.jsx
+++ b/src/resources/instances/index.jsx
@@ -1,15 +1,15 @@
-import {List, Datagrid,
+import {TextField, List, Datagrid,
     ShowButton, EditButton, Loading, Show, Edit, SimpleShowLayout, SimpleForm,
      Create, TopToolbar, ExportButton, CreateButton, SaveButton, Toolbar, DeleteWithConfirmButton, SearchInput, useTranslate, EmptyClasses} from 'react-admin';
 import { useContext} from "react";
-import { AssociationMemberEndContext, ClassifierContext, ClassSelectContext, ClassSelectProvider } from "../../utils/contexts";
+import { AssociationMemberEndContext, ClassifierContext } from "../../utils/contexts";
 import { useProperties } from "../../utils/properties";
 import { InsertShowField , InsertListField, InsertEditField, concatenateIdFields} from "../../utils/fields" ;
 import { useResourceContext, useResourceDefinition,  useRecordContext, useCreatePath, usePermissions} from "react-admin";
 import {  idFromURL, extractResourceFromPathName} from "../../utils/utils";
 import {useParams, useLocation} from "react-router-dom";
 
-import {Box, Drawer, Typography} from '@mui/material';
+import {Typography} from '@mui/material';
 import Inbox from '@mui/icons-material/Inbox';
 import { styled } from '@mui/material/styles';
 import authProvider from '../../utils/authProvider';
@@ -342,9 +342,9 @@ export const ClassInstanceList = () => {
         >
 
             {
-            classFunctions.unfoldProperties(properties).map ( ( prop ) => {
-                return InsertListField ( prop );
-    
+            classFunctions.unfoldProperties(properties).map ( ( {property, prefix} ) => {
+                return InsertListField  ( property, prefix);
+                
             } ) }
 
             <ClassInstanceListShowButton/>     
@@ -358,57 +358,6 @@ export const ClassInstanceList = () => {
 }
 
 
-const SelectActions = () => (
-    <TopToolbar></TopToolbar>
-);
-
-export const ClassInstanceSelect = () => {
-
-    const {resource, source, open, setOpen, setSourceSelect } = useContext(ClassSelectContext);
-
-    const {properties, loading} = useProperties (resource,'classes', 'list');
-
-    return (
-        <Drawer 
-        open={open}
-        anchor='right' 
-        onClose= { () => setOpen(false)}
-        sx={{ maxWidth: 1/2}}
-         >   
-
-    <List disableSyncWithLocation resource={resource} actions={<SelectActions />} filters={classFilters(properties, loading)} exporter={false} sort={{ field: 'id', order:"DESC"}} queryOptions={{ meta:{ prefix: 'classes', suffix: 'instances', properties: 'list'}}}>
-   {loading ? (
-        <Loading />
-    ) : (
-        <Datagrid 
-            bulkActionButtons={false}
-
-            rowClick= {(id, resource, record) => {
-                setSourceSelect(source, { id: record.id, display: concatenateIdFields(record)});
-                setOpen(false);
-
-              }
-
-         }
-        
-            >
-
-            {
-            classFunctions.unfoldPropertiesNoLink(properties).map ( ( prop ) => {
-                return InsertListField ( prop );
-    
-            } ) }
-
-        </Datagrid>
-           )
-        }
-    </List>
-    </Drawer>)
-}
-
-
-
-
 export const AssociationInstanceList = () => {
 
     const resource = useResourceContext ();
@@ -433,9 +382,8 @@ export const AssociationInstanceList = () => {
             >
 
             {
-            assocFunctions.unfoldProperties(properties).map ( ( prop ) => {
-                return InsertListField ( prop );
-    
+            assocFunctions.unfoldProperties(properties).map ( ( {property, prefix} ) => {
+                return InsertListField  ( property, prefix);
             } ) }
 
             <ShowButton/>
@@ -455,8 +403,8 @@ return (
        
 
             {
-            classFunctions.unfoldProperties(properties).map ( ( prop ) => {
-                    return InsertShowField (prop);
+            classFunctions.unfoldProperties(properties).map ( ( {property, prefix} ) => {
+                    return InsertShowField  ( property, prefix);
             } ) }
             
  
@@ -514,8 +462,8 @@ export const AssocInstanceShow = () => {
                     <SimpleShowLayout>
 
                         {
-                            assocFunctions.unfoldProperties(properties).map((prop) => {
-                                return InsertShowField(prop);
+                            assocFunctions.unfoldProperties(properties).map(({property, prefix}) => {
+                                return InsertShowField  ( property, prefix);
                             })}
 
 
@@ -527,11 +475,10 @@ export const AssocInstanceShow = () => {
 }
 
 const EditToolbar = () => {
-    const { saveEnable } = useContext(ClassSelectContext);
     const translate = useTranslate();
     return (
         <Toolbar>
-            <SaveButton alwaysEnable={saveEnable} />
+            <SaveButton  />
             <DeleteWithConfirmButton
                 resource='instances'
                 confirmContent={translate('arolios.delete_confirm_msg')}
@@ -544,150 +491,134 @@ const EditToolbar = () => {
 
 export const ClassInstanceEdit = () => {
 
-    const resource = useResourceContext ();
+    const resource = useResourceContext();
     const createPath = useCreatePath();
+    const { classifierNames } = useContext(ClassifierContext);
+    const csf_name = classifierNames[resource];
+    const translate = useTranslate();
 
-    const {properties, loading} = useProperties (resource, 'classes', 'update');
+    const { properties, loading } = useProperties(resource, 'classes', 'update');
     return (
-        <Box display="flex">
-        <ClassSelectProvider>
-            <Edit resource='instances' queryOptions={{ meta:{ context: 'rfu'}}} redirect={createPath( {resource: resource, type: 'list'})}>
+
+        <Edit title={translate('arolios.instance_of', { type: csf_name })} resource='instances' queryOptions={{ meta: { context: 'rfu' } }} redirect={createPath({ resource: resource, type: 'list' })}>
 
             {loading ? (
                 <Loading />
             ) : (
                 <div>
-                <SimpleForm toolbar= {<EditToolbar />}>
+                    <SimpleForm toolbar={<EditToolbar />}>
 
-                    {
-                    
-                    classFunctions.unfoldAllProperties(properties).map ( ( prop ) => {
-                        return InsertEditField ( prop );
-                    } ) }  
+                        {
 
-                </SimpleForm>
-                </div>
-            ) }
-        
-            </Edit>
+                            classFunctions.unfoldAllProperties(properties).map(({ property, prefix }) => {
+                                return InsertEditField(property, prefix);
+                            })}
 
-            <ClassInstanceSelect />
+                    </SimpleForm>
+                </div>
+            )}
 
-    
-    </ClassSelectProvider>
-    </Box>)
+        </Edit>
+    )
 }
 
 
 export const AssocInstanceEdit = () => {
-    const resource = useResourceContext ();
+    const resource = useResourceContext();
     const createPath = useCreatePath();
 
-    const {properties, loading} = useProperties (resource, 'associations', 'update');
+    const { properties, loading } = useProperties(resource, 'associations', 'update');
+
+    const { classifierNames } = useContext(ClassifierContext);
+    const csf_name = classifierNames[resource];
+    const translate = useTranslate();
+
     return (
-    
-    <Box display="flex">
-    <ClassSelectProvider>
-    <Edit  resource='instances' queryOptions={{ meta:{ context: 'rfu'}}} redirect={createPath( {resource: resource, type: 'list'})}>
- 
-    {loading ? (
-        <Loading />
-    ) : (
-    <SimpleForm toolbar= {<EditToolbar />}>
 
-        {
-        assocFunctions.unfoldNotRefProperties(properties).map ( ( prop ) => {
-                return InsertEditField ( prop );
-        } ) }
-          
+        <Edit title={translate('arolios.instance_of', { type: csf_name })} resource='instances' queryOptions={{ meta: { context: 'rfu' } }} redirect={createPath({ resource: resource, type: 'list' })}>
 
-    </SimpleForm>
-    ) }
-   
-    </Edit>
-    <ClassInstanceSelect />
+            {loading ? (
+                <Loading />
+            ) : (
+                <SimpleForm toolbar={<EditToolbar />}>
 
-    
-    </ClassSelectProvider>
-    </Box>)
-    
-    
-}
+                    {
+                        assocFunctions.unfoldNotRefProperties(properties).map(({ property, prefix }) => {
+                            return InsertEditField(property, prefix);
+                        })}
 
 
-const CreateToolbar = () => {
-    const { saveEnable } = useContext(ClassSelectContext);
-    return (
-        <Toolbar>
-            <SaveButton alwaysEnable={saveEnable} />
-        </Toolbar>
+                </SimpleForm>
+            )}
+
+        </Edit>
     )
+
+
 }
 
 export const ClassInstanceCreate = () => {
-    const resource = useResourceContext ();
+    const resource = useResourceContext();
+
+    const { properties, loading } = useProperties(resource, 'classes', 'create');
+    const { classifierNames } = useContext(ClassifierContext);
+    const csf_name = classifierNames[resource];
+    const translate = useTranslate();
 
-    const {properties, loading} = useProperties (resource, 'classes', 'create');
     return (
-        <Box display="flex">
-        <ClassSelectProvider>
-            <Create  redirect='show' mutationOptions={{ meta:{ prefix: 'classes', suffix: 'instances'}} }>
+
+        <Create title={translate('arolios.instance_of', { type: csf_name })} redirect='show' mutationOptions={{ meta: { prefix: 'classes', suffix: 'instances' } }}>
             {loading ? (
                 <Loading />
             ) : (
                 <div>
-                <SimpleForm toolbar= {<CreateToolbar />}>
-                    
-                    {
-                    
-                    classFunctions.unfoldAllProperties(properties).map ( ( prop ) => {
-                        return InsertEditField ( prop );
-                    } ) }  
+                    <SimpleForm>
 
-                </SimpleForm>
+                        {
+
+                            classFunctions.unfoldAllProperties(properties).map(({ property, prefix }) => {
+                                return InsertEditField(property, prefix);
+                            })}
+
+                    </SimpleForm>
                 </div>
-            ) }
-        
-            </Create>
+            )}
 
-            <ClassInstanceSelect />
+        </Create>
 
-    
-    </ClassSelectProvider>
-    </Box>)
+    )
 }
 
 export const AssocInstanceCreate = () => {
-    const resource = useResourceContext ();
+    const resource = useResourceContext();
+
+    const { properties, loading } = useProperties(resource, 'associations', 'create');
+
+    const { classifierNames } = useContext(ClassifierContext);
+    const csf_name = classifierNames[resource];
+    const translate = useTranslate();
 
-    const {properties, loading} = useProperties (resource, 'associations', 'create');
     return (
-        <Box display="flex">
-        <ClassSelectProvider>
-            <Create redirect='show' mutationOptions={{ meta:{ prefix: 'associations', suffix: 'instances' }} }>
+
+        <Create title={translate('arolios.instance_of', { type: csf_name })} redirect='show' mutationOptions={{ meta: { prefix: 'associations', suffix: 'instances' } }}>
             {loading ? (
                 <Loading />
             ) : (
                 <div>
-                <SimpleForm toolbar= {<CreateToolbar />}>
-                    
-                    {
-                    
-                    assocFunctions.unfoldAllProperties(properties).map ( ( prop ) => {
-                        return InsertEditField ( prop );
-                    } ) }  
+                    <SimpleForm>
 
-                </SimpleForm>
-                </div>
-            ) }
-        
-            </Create>
+                        {
 
-            <ClassInstanceSelect />
+                            assocFunctions.unfoldAllProperties(properties).map(({ property, prefix }) => {
+                                return InsertEditField(property, prefix);
+                            })}
 
-    
-    </ClassSelectProvider>
-    </Box>)
+                    </SimpleForm>
+                </div>
+            )}
+
+        </Create>
+    )
 }
 
 
@@ -720,8 +651,8 @@ export const InstanceAssocList = () => {
 
         { 
      
-            assocFunctions.unfoldProperties(properties).map ( ( prop ) => {
-                return InsertListField ( prop );
+            assocFunctions.unfoldProperties(properties).map ( ( {property,prefix }) => {
+                return InsertListField  ( property, prefix);
             
         } ) } 
         <ShowButton resource={assocResource}/>
diff --git a/src/utils/contexts/index.jsx b/src/utils/contexts/index.jsx
index d94d8b1740238c6be175fa3707f90df5afdaa715..7a9f8d8749c17653049f33f99d3c8055db50b9fe 100644
--- a/src/utils/contexts/index.jsx
+++ b/src/utils/contexts/index.jsx
@@ -33,30 +33,6 @@ export const ClassifierProvider = ({ children }) => {
   )
 } 
 
-export const ClassSelectContext = createContext();
-
-export const ClassSelectProvider = ({ children }) => {
-  const [resource, setResource] = useState('');
-  const [source, setSource] = useState('');
-  const [select, setSelect] =useState ({}) ;
-  const [open, setOpen] = useState (false);
-  const [saveEnable, setSaveEnable] = useState(false);
-
-  
-
-  const setSourceSelect = ( key, value) => {
-    let newPair = {};
-    newPair[key] = value;
-    setSelect (selections => ({ ...selections, ...newPair}));
-  }
-
-  return (
-    <ClassSelectContext.Provider value={{ resource, setResource, source, setSource, open, setOpen, select, setSourceSelect, saveEnable , setSaveEnable }}>
-      {children}
-    </ClassSelectContext.Provider>
-  )
-} 
-
 export const AssociationMemberEndContext = createContext();
 
 export const AssociationMemberEndProvider = ( {children}) => {
diff --git a/src/utils/dataProvider/index.jsx b/src/utils/dataProvider/index.jsx
index 828e8e9b25d7cfea9f823917abf9c09df2c06aa5..4d33df713ff5291f57684e28516a4d846f502d9b 100644
--- a/src/utils/dataProvider/index.jsx
+++ b/src/utils/dataProvider/index.jsx
@@ -205,11 +205,43 @@ const CustomDataProvider = {
                 }
                 url += `${resource}/${instid}`;
                 return httpClient(url).then(({ headers, json }) => ({
-                    data: json.map(record => ( {id:record.url, ...record})),
+                    data: json.map(record => ( {id:idFromURL(record.url), ...record})),
                     total: 1,
                 }));
             }
-        } else { // no case implemented
+        } else if (getmany_context === "references" ) {
+            const ids = params.ids;
+            const instid =ids[0] ;
+            // variant of getOne
+            const lang = localStorage.getItem ("arolios_model_language") || sessionStorage.getItem ("arolios_model_default_language");
+            let query = `?lang=${lang}`;
+            const querySep = '&';
+            const {prefix, suffix ,context } = params.meta || {};
+            
+            let url = `${apiUrl}/`;
+
+            // suffix of the list query is the resource
+
+            if (suffix) {
+                url += `${suffix}`;
+            }
+    
+            url += `/${instid}`;
+            if (context) {
+                query += `${querySep}c=${context}`;
+            }
+            
+            if (query.length >0) {
+                url += `${query}`;
+            }
+    
+            
+            return httpClient(url).then(({ json }) => ({
+                    data: [ json ],
+                    total: 1
+                }));
+             
+        } else  { // no case implemented
             const query = {
                 filter: JSON.stringify({ ids: params.ids }),
             };
diff --git a/src/utils/fields/index.jsx b/src/utils/fields/index.jsx
index cc86057343201821d39e6792f0c160e3cb24d363..b76ccf719a5bd582d90054638213ee5292723bd2 100644
--- a/src/utils/fields/index.jsx
+++ b/src/utils/fields/index.jsx
@@ -1,5 +1,5 @@
 import  * as React from "react";
-import { DateField, NumberField, RichTextField, BooleanField, EmailField, UrlField, TextField, WrapperField, Loading, NumberInput, BooleanInput, DateInput, TextInput, PasswordInput, ReferenceInput, SelectInput, useRecordContext, useShowContext, useEditContext, DateTimeInput } from "react-admin";
+import { DateField, NumberField, RichTextField, BooleanField, EmailField, UrlField, TextField, WrapperField, Loading, NumberInput, BooleanInput, DateInput, TextInput, PasswordInput, ReferenceInput, SelectInput, useRecordContext, useShowContext, useEditContext, DateTimeInput, AutocompleteInput } from "react-admin";
 import { RichTextInput } from "ra-input-rich-text";
 import { email, required } from "react-admin";
 import {Typography} from '@mui/material';
@@ -62,13 +62,14 @@ const MemberEndShowButton = ( {resource, resourceDisplay, prefix, field, sx }) =
 
     return <MUI.Link  component="button"  variant="body2" onClick={handleClick} sx={sx}><IconLink/></MUI.Link> ;
 }
-export const concatenateIdFields = ( record ) => {
+
+export const concatenateIdFieldValues = ( record ) => {
     let allIdFields = "" ;
     for (const [key, value] of Object.entries(record.properties)) {
         if (key[0] !== '_') {
             if (value instanceof Object) {
                 if (value.hasOwnProperty("properties")) { // linked prop
-                    allIdFields= allIdFields.concat(" ", concatenateIdFields(record['properties'][key]));
+                    allIdFields= allIdFields.concat(" ", concatenateIdFieldValues(record['properties'][key]));
                 } else { // composite prop  
                     for (const [key2, value2] of Object.entries(record['properties'][key])) {
                         if (key2 !== 'url' && !(value2 instanceof Object)) {
@@ -85,87 +86,20 @@ export const concatenateIdFields = ( record ) => {
     return allIdFields;
 }
 
-const DisplayLink = ( {display, record, resource, resourceDisplay, prefix, field, sx} ) => {
-    if (display) {
-        if ( record == null) {
-            return <CheckIcon/>
-        } else {
-            return <MemberEndShowButton resource={resource} resourceDisplay={resourceDisplay} prefix={prefix} field={field} sx={ {paddingTop: 2}} /> 
-
-        }
-    } else {
-        return <p></p>
-    }
-}
-
-const MemberEndEditButton = ( {property, prefix, field  }) => {
-    const {record} = useEditContext();
-    const source = `${prefix}.${field}`;
-    const resource = property['type']['id_name']
-    const resourceDisplay = property['type']['_tid_name']
-    const {setResource, setSource, setOpen, select , setSaveEnable} = useContext(ClassSelectContext);
-    const {setValue} = useFormContext();
-    const [displayLink, setDisplayLink] = useState (false);
-    const {mapClassifierNameResource} = useContext(ClassifierContext);
-
-
-    const handleClick = () => {
-        mapClassifierNameResource (
-            resource,
-            resourceDisplay
-        )
-        setResource(resource);
-        setSource(source);
-        setOpen(true);
-    };
 
-    const displayValue = ( value) => {
-        if (value == null || value === '') {
-            setDisplayLink(false);
-            return '';
-        } else {
-            setDisplayLink(true);
+const MemberEndEditField = ( {property, prefix, field  }) => {
+    const resource = property['type']['id_name'];
+    const filterToQuery = searchText => ({ _s: `%${searchText}%`});
 
-            if (select == null ) {
-                return '';
-            } else {
-                if ( select[source]== null) {
-                    return '';
-                } else {
-                    return select[source]["display"];
-                }
-            }
-        }
-        ;
-    }
-
-    useEffect ( () => {
-    if (select.hasOwnProperty(source)) {
-        setValue(`${source}.id`, select[source]["id"]);
-        setSaveEnable(true);
-    }
-}, [select]) ;
-        return (
-            <Grid container spacing={2}> 
-                <Grid item xs={12} sm={8}>
-                    <TextInput label={property._tpathname} source={`${source}.id`} format={displayValue} disabled={true} validate={validateRequired(property.required)}/>
-                </Grid>
-                <Grid item xs={12} sm={2}>
-                   <DisplayLink display={displayLink} record={record} resource={resource} resourceDisplay={resourceDisplay} prefix={prefix} field={field} sx={ {paddingTop: 2}} />
-                </Grid>
-                <Grid item xs={12} sm={2}>
-                    <IconButton  type="button"  variant="outlined" onClick={handleClick} sx={ {paddingTop: 2}}>
-                        <SearchIcon/>
-                    </IconButton>
-                </Grid>
-            </Grid>
-        );
-   
+    return (
+        <ReferenceInput reference={resource}  source={`${prefix}.${field}.id`} sort={{ field: 'id', order:"DESC"}} queryOptions={{ meta:{ getmany_context: 'references', prefix: 'classes', suffix: 'instances', properties: 'list'}}}>
+            <AutocompleteInput  label={property._tpathname} optionText={concatenateIdFieldValues} filterToQuery={filterToQuery} validate={validateRequired(property.required)} />
+        </ReferenceInput>
+    )
+    
 }
 
 
-
-
 const MemberEndListField = ({ label, prefix, field, classifier, classifierDisplay }) => (
     <WrapperField label={label} sortable={false}>
         <MemberEndShowButton resource={classifier} resourceDisplay={classifierDisplay} prefix={prefix} field={field} />
@@ -204,6 +138,16 @@ export const InsertOutputClassMemberEnd = ({ property, prefix, field }) => {
             property['memberEnd']['association']['_tid_name']
         );
     }
+
+
+    const handleClick1 = () => {
+        mapClassifierNameResource(assocResource, property['memberEnd']['association']['_tid_name'])
+    }
+
+    const handleClick2 = () => {
+        mapClassifierNameResource(property['type']['id_name'], property['type']['_tid_name']);
+    }
+
     if (isLoading) return (<Loading />);
 
     if (record[prefix][field] == null) {
@@ -212,12 +156,12 @@ export const InsertOutputClassMemberEnd = ({ property, prefix, field }) => {
     if (record[prefix][field].hasOwnProperty('association')) {
         if (record[prefix][field]['association'].hasOwnProperty('instance_url')) {
             const id = idFromURL (record[prefix][field]['association']['instance_url']) // memberEnd  with association info => association to be shown
-            return <Link to={createPath({ resource: assocResource, type: 'show', id: id })} onClick={mapClassifierNameResource(assocResource, property['memberEnd']['association']['_tid_name'])}>{property._tpathname}</Link>
+            return <Link to={createPath({ resource: assocResource, type: 'show', id: id })} onClick={handleClick1}>{property._tpathname}</Link>
         }
     }
     if (record[prefix][field].hasOwnProperty('url')) { // memberEnd with ONE instance value => show instance
         const id = idFromURL (record[prefix][field]['url']);
-        return <Link to={createPath({ resource: property['type']['id_name'], type: 'show', id: id })}  onClick={mapClassifierNameResource(property['type']['id_name'], property['type']['_tid_name'])}>{property._tpathname}</Link>
+        return <Link to={createPath({ resource: property['type']['id_name'], type: 'show', id: id })}  onClick={handleClick2}>{property._tpathname}</Link>
     } else { // no instance => query of associations from a class and a memberEnd 
        
         return <Link to={`/${classifierResource}/${record['id']}/association_ends/${property.id_name}`}  onClick={mapAssocProp}>{property._tpathname}</Link>;
@@ -225,11 +169,13 @@ export const InsertOutputClassMemberEnd = ({ property, prefix, field }) => {
 
 }
 
-export const InsertListField = ({property, prefix}) => {
+
+
+export const InsertListField = ( property, prefix) => {
 
     const source = `${prefix}.${property.id_name}`;
-    const typeResource = property.type.id_name
-    const typeResourceDisplay = property.type._tid_name
+    const typeResource = property.type.id_name;
+    const typeResourceDisplay = property.type._tid_name;
     switch (property.metatype) {
         case "_primitive": {
             const { classifier } = extractDomainClassifier (typeResource);
@@ -240,37 +186,40 @@ export const InsertListField = ({property, prefix}) => {
                 case "decimal":
                 case "real":
                 case "doubleprecision":
-                    return (<NumberField label={property._tpathname} source={source} />);
+                    return (<NumberField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
                 case "boolean":
-                    return (<BooleanField label={property._tpathname} source={source} valueLabelTrue="arolios.true" valueLabelFalse="arolios.false"/>);
+                    return (<BooleanField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} valueLabelTrue="arolios.true" valueLabelFalse="arolios.false"/>);
                 case "text":
-                    return (<RichTextField label={property._tpathname} source={source} />);
+                    return (<RichTextField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
                 case "date":
-                    return (<DateField label={property._tpathname} source={source} />);
+                    return (<DateField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
                 case "email": //future use
-                    return (<EmailField label={property._tpathname} source={source} />);
+                    return (<EmailField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
                 case "url": //future use
-                    return (<UrlField label={property._tpathname} source={source} />);
+                    return (<UrlField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
                 default:
                     // charstring time timestamp timetz timestamptz
-                    return (<TextField label={property._tpathname} source={source} />);
+                    return (
+                        <TextField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />
+                    );
+                
 
             };
             }
         case "_enumeration":
-            return (<TextField label={property._tpathname} source={source} />);
+            return (<TextField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
 
         case "_composite_type":
             break;
         case "_class":
-            return (<MemberEndListField label={property._tpathname} prefix={prefix} field={property.id_name} classifier={typeResource} classifierDisplay={typeResourceDisplay} />)
+            return (<MemberEndListField key={`${prefix}.${property.id_name}`} label={property._tpathname} prefix={prefix} field={property.id_name} classifier={typeResource} classifierDisplay={typeResourceDisplay} />)
         
 
         default:
-            return (<TextField label={property._tpathname} source={source} />);
+            return (<TextField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
     }
 };
-export const InsertShowField = ({property, prefix}) => {
+export const InsertShowField = (property, prefix) => {
     const source = `${prefix}.${property.id_name}`;
     
     switch (property.metatype) {
@@ -283,38 +232,41 @@ export const InsertShowField = ({property, prefix}) => {
                 case "decimal":
                 case "real":
                 case "doubleprecision":
-                    return (<NumberField label={property._tpathname} source={source} />);
+                    return (<NumberField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
                 case "boolean":
-                    return (<BooleanField label={property._tpathname} source={source} valueLabelTrue="arolios.true" valueLabelFalse="arolios.false"/>);
+                    return (<BooleanField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} valueLabelTrue="arolios.true" valueLabelFalse="arolios.false"/>);
                 case "text":
-                    return (<RichTextField label={property._tpathname} source={source} />);
+                    return (<RichTextField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
                 case "date":
-                    return (<DateField label={property._tpathname} source={source} />);
+                    return (<DateField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
                 case "email": //future use
-                    return (<EmailField label={property._tpathname} source={source} />);
+                    return (<EmailField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
                 case "url": //future use
-                    return (<UrlField label={property._tpathname} source={source} />);
+                    return (<UrlField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
                 default:
                     // charstring time timestamp timetz timestamptz
-                    return (<TextField label={property._tpathname} source={source} />);
-
+                    return (
+                                <TextField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />
+                           );
             };
             }
         case "_enumeration":
-            return (<TextField label={property._tpathname} source={source} />);
+            return (<TextField key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
 
         case "_composite_type":
 
             break;
         case "_class":
-            return (<InsertOutputClassMemberEnd property={property} prefix={prefix} field={property.id_name} />)
+            return (<InsertOutputClassMemberEnd key={`${prefix}.${property.id_name}`} property={property} prefix={prefix} field={property.id_name} />)
 
         default:
-            return (<TextField label={property._tpathname} source={source} />);
+            return (
+                <TextField  key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />
+           );
     }
 };
 
-export const InsertEditField = ({property, prefix}) => {
+export const InsertEditField = (property, prefix) => {
     const source = `${prefix}.${property.id_name}`;
     switch (property.metatype) {
         case "_primitive": {
@@ -322,39 +274,39 @@ export const InsertEditField = ({property, prefix}) => {
             switch (classifier) {
                 case "charstring":
 
-                return (<TextInput label={property._tpathname} source={source} multiline fullWidth resettable validate={validateText(property.required)} />);
+                return (<TextInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} multiline fullWidth resettable validate={validateText(property.required)} />);
                 case "integer":
                 case "smallint":
                 case "bigint":
                 case "real":
                 case "doubleprecision":
-                    return (<NumberInput label={property._tpathname} source={source} validate={validateNumber(property.required)} />);
+                    return (<NumberInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} validate={validateNumber(property.required)} />);
                 case "decimal": // decimal : display as number, capture as text for keeping exact value in server
-                    return (<TextInput label={property._tpathname} source={source} resettable  validate={validateDecimal(property.required)} />);
+                    return (<TextInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} resettable  validate={validateDecimal(property.required)} />);
                 case "boolean":
-                    return (<BooleanInput label={property._tpathname} source={source} validate={validateBoolean(property.required)} />);
+                    return (<BooleanInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} validate={validateBoolean(property.required)} />);
                 case "text":
-                    return (<RichTextInput label={property._tpathname} source={source} validate={validateRichText(property.required)} />);
+                    return (<RichTextInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} validate={validateRichText(property.required)} />);
                 case "date":
-                    return (<DateInput label={property._tpathname} source={source} validate={validateDate(property.required)} />);
+                    return (<DateInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} validate={validateDate(property.required)} />);
                 case "time":
-                    return (<TextInput label={property._tpathname} source={source} validate={validateTime(property.required)} />);
+                    return (<TextInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} validate={validateTime(property.required)} />);
                 case "timetz":
-                    return (<TextInput label={property._tpathname} source={source} validate={validateTimetz(property.required)} />);
+                    return (<TextInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} validate={validateTimetz(property.required)} />);
                 case "timestamp":
-                    return (<DateTimeInput label={property._tpathname} source={source} validate={validateTimestamp(property.required)} />);
+                    return (<DateTimeInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} validate={validateTimestamp(property.required)} />);
                 case "timestamptz":
-                    return (<DateTimeInput label={property._tpathname} source={source} validate={validateTimestamptz(property.required)} />);
+                    return (<DateTimeInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} validate={validateTimestamptz(property.required)} />);
                 case "email": //future use
                     return (<TextInput label={property._tpathname} source={source} type="email" multiline fullWidth resettable validate={validateEmail(property.required)} />);
                 case "url": //future use
-                    return (<TextInput label={property._tpathname} source={source} type="url" multiline fullWidth resettable validate={validateUrl(property.required)} />);
+                    return (<TextInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} type="url" multiline fullWidth resettable validate={validateUrl(property.required)} />);
                 case "password": //future use
-                    return (<PasswordInput label={property._tpathname} source={source} multiline fullWidth resettable validate={validatePassword(property.required)} />);
+                    return (<PasswordInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} multiline fullWidth resettable validate={validatePassword(property.required)} />);
 
                 default:
                     // charstring 
-                    return (<TextInput label={property._tpathname} source={source} multiline fullWidth resettable />);
+                    return (<TextInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} multiline fullWidth resettable />);
 
             };
          }
@@ -362,7 +314,7 @@ export const InsertEditField = ({property, prefix}) => {
             const typeResource=property.type.id_name;
 
             return (
-            <ReferenceInput source={source} reference={typeResource} sort={{field: 'name', order: 'ASC'}} queryOptions={{ meta:{ prefix: 'enumerations', suffix: 'values', getmany_context:'values'}} }  >
+            <ReferenceInput key={`${prefix}.${property.id_name}`} source={source} reference={typeResource} sort={{field: 'name', order: 'ASC'}} queryOptions={{ meta:{ prefix: 'enumerations', suffix: 'values', getmany_context:'values'}} }  >
                 <SelectInput label={property._tpathname} optionText="_tname" optionValue="name" validate={validateEnum(property.required)}/>
             </ReferenceInput>
             ) 
@@ -372,12 +324,12 @@ export const InsertEditField = ({property, prefix}) => {
 
         case "_class": 
         
-                return (<MemberEndEditButton property={property} prefix={prefix} field={property.id_name}  />);
+                return (<MemberEndEditField key={`${prefix}.${property.id_name}`} property={property} prefix={prefix} field={property.id_name}  />);
             
                 
 
         default:
             //TODO error to be returned
-            return (<TextInput label={property._tpathname} source={source} />);
+            return (<TextInput key={`${prefix}.${property.id_name}`} label={property._tpathname} source={source} />);
     }
 };
diff --git a/src/utils/i18nProvider/en.js b/src/utils/i18nProvider/en.js
index cada29ceaae8dd6c651f2449a7deaaeee013abbc..90bbcb2eef685892bc47fe03bba4db35753682f4 100644
--- a/src/utils/i18nProvider/en.js
+++ b/src/utils/i18nProvider/en.js
@@ -100,7 +100,7 @@ export const en = {
             user_roles: {
                 no: 'No role',
                 reader: 'Reader',
-                author: 'Author',
+                producer: 'Producer',
                 admin: 'Administrator'
             },
             password_not_identical: 'The passwords are not identical',
diff --git a/src/utils/i18nProvider/fr.js b/src/utils/i18nProvider/fr.js
index cf6f8a02bad8c15563faf970dfc799cf1844cbb9..6330f91f116c7da545279238e9c66a635b3c9f11 100644
--- a/src/utils/i18nProvider/fr.js
+++ b/src/utils/i18nProvider/fr.js
@@ -101,7 +101,7 @@ export const fr = {
             user_roles: {
                 no: 'Aucun rôle',
                 reader: 'Lecteur',
-                author: 'Auteur',
+                producer: 'Producteur',
                 admin: 'Administrateur'
             },
             password_not_identical: 'Les mots de passe ne sont pas identiques',
diff --git a/src/utils/users/index.jsx b/src/utils/users/index.jsx
index f7585aa93981732fbb0f8de1866419556751a16b..d6fef7a924d9f94c63b44fc2e0be694bd5e505dc 100644
--- a/src/utils/users/index.jsx
+++ b/src/utils/users/index.jsx
@@ -5,7 +5,7 @@ export const roleChoices = () => {
     return  [
     { id: 'no', name: 'arolios.user_roles.no'},
     { id: 'reader', name: 'arolios.user_roles.reader'},
-    { id: 'author', name: 'arolios.user_roles.author'},
+    { id: 'producer', name: 'arolios.user_roles.producer'},
     { id: 'admin', name: 'arolios.user_roles.admin'}
  ]
     
@@ -19,7 +19,7 @@ export const RenderRole = ( (record)  => {
       
         no: translate('arolios.user_roles.no'),
         reader: translate('arolios.user_roles.reader'),
-        author: translate('arolios.user_roles.author'),
+        producer: translate('arolios.user_roles.producer'),
         admin: translate('arolios.user_roles.admin')
     }
      return roles[record.role];