diff --git a/install/class/Class_Install.php b/install/class/Class_Install.php
index 37e61efa4d9ad985d0b06d1760b57d003bda8a5f..b3b2ef8a9cf81d623544ef5662a82b7c4a060928 100755
--- a/install/class/Class_Install.php
+++ b/install/class/Class_Install.php
@@ -47,6 +47,7 @@ class Install extends functions
         array('FULLTEXT_ATTACH', 'fulltext_attachments'),
         array('FULLTEXT_ATTACH_VERSION', 'fulltext_attachments_version'),
         array('TEMPLATES', 'templates'),
+        array('ARCHIVETRANSFER', 'archive_transfer'),
     );
 
     public function __construct()
diff --git a/sql/data_fr.sql b/sql/data_fr.sql
index d95f51688f5023631d407c1d31c27011ac05d2de..376057568a4ecdcc7380a576da73e9f19f331d01 100755
--- a/sql/data_fr.sql
+++ b/sql/data_fr.sql
@@ -80,6 +80,7 @@ INSERT INTO usergroups_services (group_id, service_id) VALUES ('COURRIER', 'file
 INSERT INTO usergroups_services (group_id, service_id) VALUES ('COURRIER', 'notes_restriction');
 INSERT INTO usergroups_services (group_id, service_id) VALUES ('COURRIER', 'delete_document_in_detail');
 INSERT INTO usergroups_services (group_id, service_id) VALUES ('COURRIER', 'edit_document_in_detail');
+INSERT INTO usergroups_services (group_id, service_id) VALUES ('COURRIER', 'save_numeric_package');
 INSERT INTO usergroups_services (group_id, service_id) VALUES ('AGENT', 'adv_search_mlb');
 INSERT INTO usergroups_services (group_id, service_id) VALUES ('AGENT', 'index_mlb');
 INSERT INTO usergroups_services (group_id, service_id) VALUES ('AGENT', 'search_contacts');
@@ -1003,6 +1004,8 @@ INSERT INTO docserver_types (docserver_type_id, docserver_type_label, enabled, i
 VALUES ('TNL', 'Thumbnails', 'Y', 'N', 0, 'N', 'NONE', 'N', 'NONE', 'N', 'NONE', 'Y', 'NONE');
 INSERT INTO docserver_types (docserver_type_id, docserver_type_label, enabled, is_container, container_max_number, is_compressed, compression_mode, is_meta, meta_template, is_logged, log_template, is_signed, fingerprint_mode) 
 VALUES ('TEMPLATES', 'TEMPLATES', 'Y', 'N', 0, 'N', 'NONE', 'N', 'NONE', 'N', 'NONE', 'N', 'NONE');
+INSERT INTO docserver_types (docserver_type_id, docserver_type_label, enabled, is_container, container_max_number, is_compressed, compression_mode, is_meta, meta_template, is_logged, log_template, is_signed, fingerprint_mode) 
+VALUES ('ARCHIVETRANSFER', 'Archive Transfer', 'Y', 'N', 0, 'N', 'NONE', 'N', 'NONE', 'N', 'NONE', 'Y', 'SHA256');
 
 TRUNCATE TABLE docservers;
 INSERT INTO docservers (docserver_id, docserver_type_id, device_label, is_readonly, enabled, size_limit_number, actual_size_number, path_template, ext_docserver_info, chain_before, chain_after, creation_date, closing_date, coll_id, priority_number, docserver_location_id, adr_priority_number) 
@@ -1033,7 +1036,8 @@ INSERT INTO docservers (docserver_id, docserver_type_id, device_label, is_readon
 VALUES ('FULLTEXT_ATTACH_VERSION', 'FULLTEXT', 'Server for attachments version documents fulltext', 'N', 'Y', 50000000000, 0, '/opt/maarch/docservers/fulltext_attachments_version/', NULL, NULL, NULL, '2015-03-16 14:47:49.197164', NULL, 'attachments_version_coll', 103, 'NANTERRE', 103);
 INSERT INTO docservers (docserver_id, docserver_type_id, device_label, is_readonly, enabled, size_limit_number, actual_size_number, path_template, ext_docserver_info, chain_before, chain_after, creation_date, closing_date, coll_id, priority_number, docserver_location_id, adr_priority_number) 
 VALUES ('TEMPLATES', 'TEMPLATES', '[system] Templates', 'N', 'Y', 50000000000, 71511, '/opt/maarch/docservers/templates/', NULL, NULL, NULL, '2012-04-01 14:49:05.095119', NULL, 'templates', 1, 'NANTERRE', 1);
-
+INSERT INTO docservers (docserver_id, docserver_type_id, device_label, is_readonly, enabled, size_limit_number, actual_size_number, path_template, ext_docserver_info, chain_before, chain_after, creation_date, closing_date, coll_id, priority_number, docserver_location_id, adr_priority_number) 
+VALUES ('ARCHIVETRANSFER', 'ARCHIVETRANSFER', 'Fast internal disc bay for archive transfer', 'N', 'Y', 50000000000, 1, '/opt/maarch/docservers/archive_transfer/', NULL, NULL, NULL, '2017-01-13 14:47:49.197164', NULL, 'archive_transfer_coll', 10, 'NANTERRE', 2);
 ------------
 --SUPERADMIN USER
 ------------
diff --git a/sql/develop.sql b/sql/develop.sql
index a8c1a71ca0b940ab06c78f84fdfdeeaceea92d9a..0301119563fc9a4127928e9bbe8f9468033a6b67 100755
--- a/sql/develop.sql
+++ b/sql/develop.sql
@@ -638,3 +638,84 @@ DO $$ BEGIN
     DROP TABLE IF EXISTS user_baskets_secondary;
   END IF;
 END$$;
+
+
+
+/****** M2M *******/
+ALTER TABLE unit_identifier DROP COLUMN IF EXISTS disposition;
+ALTER TABLE unit_identifier ADD disposition text default NULL;
+
+ALTER TABLE sendmail DROP COLUMN IF EXISTS message_exchange_id;
+ALTER TABLE sendmail ADD message_exchange_id text default NULL;
+
+ALTER TABLE IF EXISTS seda RENAME TO message_exchange;
+
+ALTER TABLE message_exchange DROP COLUMN IF EXISTS file_path;
+ALTER TABLE message_exchange ADD file_path text default NULL;
+
+ALTER TABLE message_exchange DROP COLUMN IF EXISTS res_id_master;
+ALTER TABLE message_exchange ADD res_id_master numeric default NULL;
+
+/** ADD NEW COLUMN IS TRANSFERABLE **/
+ALTER TABLE contact_addresses DROP COLUMN  IF EXISTS  external_contact_id;
+ALTER TABLE contact_addresses ADD COLUMN external_contact_id character varying(128);
+
+DROP SEQUENCE IF EXISTS contact_communication_id_seq CASCADE;
+CREATE SEQUENCE contact_communication_id_seq
+INCREMENT 1
+MINVALUE 1
+MAXVALUE 9223372036854775807
+START 1
+CACHE 1;
+
+DROP TABLE IF EXISTS contact_communication;
+CREATE TABLE contact_communication
+(
+  id bigint NOT NULL DEFAULT nextval('contact_communication_id_seq'::regclass),
+  contact_id bigint NOT NULL,
+  type character varying(255) NOT NULL,
+  value character varying(255) NOT NULL,
+  CONSTRAINT contact_communication_pkey PRIMARY KEY (id)
+) WITH (OIDS=FALSE);
+
+DROP VIEW IF EXISTS view_contacts;
+CREATE OR REPLACE VIEW view_contacts AS 
+ SELECT c.contact_id, c.contact_type, c.is_corporate_person, c.society, c.society_short, c.firstname AS contact_firstname
+, c.lastname AS contact_lastname, c.title AS contact_title, c.function AS contact_function, c.other_data AS contact_other_data
+, c.user_id AS contact_user_id, c.entity_id AS contact_entity_id, c.creation_date, c.update_date, c.enabled AS contact_enabled, ca.id AS ca_id
+, ca.contact_purpose_id, ca.departement, ca.firstname, ca.lastname, ca.title, ca.function, ca.occupancy
+, ca.address_num, ca.address_street, ca.address_complement, ca.address_town, ca.address_postal_code, ca.address_country
+, ca.phone, ca.email, ca.website, ca.salutation_header, ca.salutation_footer, ca.other_data, ca.user_id, ca.entity_id, ca.is_private, ca.enabled, ca.external_contact_id
+, cp.label as contact_purpose_label, ct.label as contact_type_label
+   FROM contacts_v2 c
+   RIGHT JOIN contact_addresses ca ON c.contact_id = ca.contact_id
+   LEFT JOIN contact_purposes cp ON ca.contact_purpose_id = cp.id
+   LEFT JOIN contact_types ct ON c.contact_type = ct.id;
+ 
+ALTER TABLE sendmail DROP COLUMN IF EXISTS res_version_att_id_list; 
+ALTER TABLE sendmail ADD COLUMN res_version_att_id_list character varying(255); 
+
+ALTER TABLE message_exchange DROP COLUMN IF EXISTS docserver_id;
+ALTER TABLE message_exchange ADD docserver_id character varying(32) DEFAULT NULL;
+
+ALTER TABLE message_exchange DROP COLUMN IF EXISTS path;
+ALTER TABLE message_exchange ADD path character varying(255) DEFAULT NULL;
+
+ALTER TABLE message_exchange DROP COLUMN IF EXISTS filename;
+ALTER TABLE message_exchange ADD filename character varying(255) DEFAULT NULL;
+
+ALTER TABLE message_exchange DROP COLUMN IF EXISTS fingerprint;
+ALTER TABLE message_exchange ADD fingerprint character varying(255) DEFAULT NULL;
+
+ALTER TABLE message_exchange DROP COLUMN IF EXISTS filesize;
+ALTER TABLE message_exchange ADD filesize bigint;
+
+DELETE FROM docservers WHERE docserver_id = 'ARCHIVETRANSFER';
+INSERT INTO docservers (docserver_id, docserver_type_id, device_label, is_readonly, enabled, size_limit_number, actual_size_number, path_template, ext_docserver_info, chain_before, chain_after, creation_date, closing_date, coll_id, priority_number, docserver_location_id, adr_priority_number) 
+VALUES ('ARCHIVETRANSFER', 'ARCHIVETRANSFER', 'Fast internal disc bay for archive transfer', 'N', 'Y', 50000000000, 1, '/opt/maarch/docservers/archive_transfer/', NULL, NULL, NULL, '2017-01-13 14:47:49.197164', NULL, 'archive_transfer_coll', 10, 'NANTERRE', 2);
+
+DELETE FROM docserver_types WHERE docserver_type_id = 'ARCHIVETRANSFER';
+INSERT INTO docserver_types (docserver_type_id, docserver_type_label, enabled, is_container, container_max_number, is_compressed, compression_mode, is_meta, meta_template, is_logged, log_template, is_signed, fingerprint_mode) 
+VALUES ('ARCHIVETRANSFER', 'Archive Transfer', 'Y', 'N', 0, 'N', 'NONE', 'N', 'NONE', 'N', 'NONE', 'Y', 'SHA256');
+
+ALTER TABLE sendmail ALTER COLUMN res_id DROP NOT NULL;
diff --git a/sql/structure.sql b/sql/structure.sql
index 65bbe4f157e26c5341c3fc48c58390783752ad63..c4ab512a0b24c842fc8b60e4d73f3685f92ee653 100755
--- a/sql/structure.sql
+++ b/sql/structure.sql
@@ -1253,6 +1253,7 @@ CREATE TABLE contact_addresses
   entity_id character varying(32) NOT NULL,
   is_private character(1) NOT NULL DEFAULT 'N'::bpchar,
   enabled character varying(1) NOT NULL DEFAULT 'Y'::bpchar,
+  external_contact_id character varying(128),
   CONSTRAINT contact_addresses_pkey PRIMARY KEY  (id)
 ) WITH (OIDS=FALSE);
 
@@ -1268,6 +1269,25 @@ CREATE TABLE saved_queries (
   CONSTRAINT saved_queries_pkey PRIMARY KEY  (query_id)
 ) WITH (OIDS=FALSE);
 
+DROP SEQUENCE IF EXISTS contact_communication_id_seq CASCADE;
+CREATE SEQUENCE contact_communication_id_seq
+INCREMENT 1
+MINVALUE 1
+MAXVALUE 9223372036854775807
+START 1
+CACHE 1;
+
+DROP TABLE IF EXISTS contact_communication;
+CREATE TABLE contact_communication
+(
+  id bigint NOT NULL DEFAULT nextval('contact_communication_id_seq'::regclass),
+  contact_id bigint NOT NULL,
+  type character varying(255) NOT NULL,
+  value character varying(255) NOT NULL,
+  CONSTRAINT contact_communication_pkey PRIMARY KEY (id)
+) WITH (OIDS=FALSE);
+
+
 CREATE SEQUENCE doctypes_first_level_id_seq
   INCREMENT 1
   MINVALUE 1
@@ -1969,7 +1989,7 @@ CREATE TABLE sendmail
 (
   email_id serial NOT NULL,
   coll_id character varying(32) NOT NULL,
-  res_id bigint NOT NULL,
+  res_id bigint,
   user_id character varying(128) NOT NULL,
   to_list text DEFAULT NULL,
   cc_list text DEFAULT NULL,
@@ -1986,6 +2006,7 @@ CREATE TABLE sendmail
   creation_date timestamp without time zone NOT NULL,
   send_date timestamp without time zone DEFAULT NULL,
   sender_email character varying(255) DEFAULT NULL,
+  message_exchange_id text DEFAULT NULL,
   CONSTRAINT sendmail_pkey PRIMARY KEY (email_id )
  );
 
@@ -2379,7 +2400,7 @@ CREATE OR REPLACE VIEW view_contacts AS
 , c.user_id AS contact_user_id, c.entity_id AS contact_entity_id, c.creation_date, c.update_date, c.enabled AS contact_enabled, ca.id AS ca_id
 , ca.contact_purpose_id, ca.departement, ca.firstname, ca.lastname, ca.title, ca.function, ca.occupancy
 , ca.address_num, ca.address_street, ca.address_complement, ca.address_town, ca.address_postal_code, ca.address_country
-, ca.phone, ca.email, ca.website, ca.salutation_header, ca.salutation_footer, ca.other_data, ca.user_id, ca.entity_id, ca.is_private, ca.enabled
+, ca.phone, ca.email, ca.website, ca.salutation_header, ca.salutation_footer, ca.other_data, ca.user_id, ca.entity_id, ca.is_private, ca.enabled, ca.external_contact_id
 , cp.label as contact_purpose_label, ct.label as contact_type_label
    FROM contacts_v2 c
    RIGHT JOIN contact_addresses ca ON c.contact_id = ca.contact_id
@@ -2593,39 +2614,48 @@ CREATE FUNCTION order_alphanum(text) RETURNS text AS $$
 $$ LANGUAGE SQL;
 
 
-CREATE TABLE seda
+CREATE TABLE message_exchange
 (
-  "message_id" character varying(255) NOT NULL,
-  "schema" character varying(16),
-  "type" character varying(128) NOT NULL,
-  "status" character varying(128) NOT NULL,
+  "message_id" text NOT NULL,
+  "schema" text,
+  "type" text NOT NULL,
+  "status" text NOT NULL,
   
   "date" timestamp NOT NULL,
-  "reference" character varying(255) NOT NULL,
+  "reference" text NOT NULL,
   
-  "account_id" character varying(128),
-  "sender_org_identifier" character varying(255) NOT NULL,
-  "sender_org_name" character varying(255),
-  "recipient_org_identifier" character varying(255) NOT NULL,
-  "recipient_org_name" character varying(255),
-
-  "archival_agreement_reference" character varying(255),
-  "reply_code" character varying(255),
+  "account_id" text,
+  "sender_org_identifier" text NOT NULL,
+  "sender_org_name" text,
+  "recipient_org_identifier" text NOT NULL,
+  "recipient_org_name" text,
+
+  "archival_agreement_reference" text,
+  "reply_code" text,
   "operation_date" timestamp,
   "reception_date" timestamp,
   
-  "related_reference" character varying(255),
-  "request_reference" character varying(255),
-  "reply_reference" character varying(255),
-  "derogation" character(1),
+  "related_reference" text,
+  "request_reference" text,
+  "reply_reference" text,
+  "derogation" boolean,
   
   "data_object_count" integer,
   "size" numeric,
   
   "data" text,
   
-  "active" character(1),
-  "archived" character(1),
+  "active" boolean,
+  "archived" boolean,
+  
+  "res_id_master" numeric default NULL,
+
+  "docserver_id" character varying(32) NOT NULL,
+  "path" character varying(255) DEFAULT NULL,
+  "filename" character varying(255) DEFAULT NULL,
+  "fingerprint" character varying(255) DEFAULT NULL,
+  "filesize" bigint,
+  "file_path" text default NULL,
 
   PRIMARY KEY ("message_id")
 )
@@ -2635,9 +2665,10 @@ WITH (
 
 CREATE TABLE unit_identifier
 (
-  "message_id" character varying(255) NOT NULL,
-  "tablename" character varying(255) NOT NULL,
-  "res_id" character varying(255) NOT NULL
+  "message_id" text NOT NULL,
+  "tablename" text NOT NULL,
+  "res_id" text NOT NULL,
+  "disposition" text default NULL
 );
 
 DROP TABLE IF EXISTS users_baskets;