diff --git a/fe/fe0100.cpp b/fe/fe0100.cpp
index 09a19a1f5..1ba0c26bf 100755
--- a/fe/fe0100.cpp
+++ b/fe/fe0100.cpp
@@ -289,14 +289,16 @@ class TAnagrafica : public TObject
 {
   char _tipo; // F o G
   TString16 _cofi, _paiv;
-  TString _ragsoc;
+  TString80 _ragsoc;
   TString4 _com_nasc, _com_res;
-  TString _loc_res;
+  TString80 _loc_res, _ind_res;
   TDate _data_nasc;
   int _allegato, _stato_estero;
 
   TAnagrafica& operator =(const TAnagrafica&) { CHECK(false, "Can't copy TAnagrafica"); }
   TAnagrafica(const TAnagrafica&) { CHECK(false, "Can't copy TAnagrafica"); }
+protected:
+  void build_ind_res(const TRectype& rec, const char* ind, const char* civ);
 
 public:
   virtual bool ok() const { return _tipo=='F' || _tipo == 'G'; }
@@ -319,6 +321,7 @@ public:
   const TString& comune_residenza() const { return comune_di(_com_res); }
   const TString& provincia_residenza() const { return provincia_di(_com_res); }
   const TString& localita_residenza() const { return _loc_res; }
+  const TString& indirizzo_residenza() const { return _ind_res; }
 
   bool init(const TRectype& rec);
   bool init(int num, const TString& codice) { return init(cache().get(num, codice)); }
@@ -334,6 +337,20 @@ public:
   TAnagrafica(const TRectype& rec) { init(rec); }
 };
 
+void TAnagrafica::build_ind_res(const TRectype& rec, const char* ind, const char* civ)
+{
+  TString80 indirizzo = rec.get(ind);
+  if (indirizzo.full())
+  {
+    const TString& numero = rec.get(civ);
+    if (numero.full())
+      indirizzo << ", " << numero;
+    indirizzo.strip_double_spaces();
+    TParagraph_string s(indirizzo, 40);
+    _ind_res = s.get(0);
+  }
+}
+
 bool TAnagrafica::init(const TRectype& rec)
 {
   _tipo = '\0';
@@ -361,6 +378,7 @@ bool TAnagrafica::init(const TRectype& rec)
     _com_nasc = rec.get(OCC_COMNASC);
     _com_res = rec.get(OCC_COM);
     _loc_res = rec.get(OCC_LOCALITA);
+    build_ind_res(rec, OCC_INDIR, OCC_CIV); 
     _stato_estero = rec.get_int(OCC_STATO);
     _allegato = _paiv.blank() ? 6 : 2;
     break;
@@ -374,6 +392,7 @@ bool TAnagrafica::init(const TRectype& rec)
     _com_res = rec.get(ANA_COMRF);
     if (_com_res.empty())
       _com_res = rec.get(ANA_COMRES);
+    build_ind_res(rec, ANA_INDRES, ANA_CIVRES); 
     
     // Dati di nascita persone fisiche
     if (_tipo == 'F')
@@ -409,6 +428,8 @@ bool TAnagrafica::init(const TRectype& rec)
       _cofi = rec.get(CLI_COFI);
     if (rec.get(CLI_PAIV).not_empty())
       _paiv = rec.get(CLI_PAIV);
+    build_ind_res(rec, CLI_INDCF, CLI_CIVCF); 
+
     // Prevale sempre la ragione sociale del cliente: "Il cliente ha sempre ragione".
     _ragsoc = rec.get(CLI_RAGSOC); _ragsoc.upper();
     _stato_estero = rec.get_int(CLI_STATOCF);
@@ -495,8 +516,8 @@ void TDati_rilevanti_trc::create_fields(int tipo, TAS400_recordset& recset)
     add_field( 2,  2,  6, 5, "Codice identificativo fornitura", AN, "ART21", OBBLIG);
     add_field( 3,  7,  8, 2, "Codice numerico fornitura",       NU, "47",    OBBLIG);
     add_field( 4,  9,  9, 1, "Tipologia di invio",              NU, "0",     OBBLIG);
-    add_field( 5, 10, 26,17, "Protocollo da sostituire",        NU);
-    add_field( 6, 27, 32, 6, "Protocollo documento",            NU);
+    add_field( 5, 10, 26,17, "Protocollo da sostituire",        AN); // ex NU
+    add_field( 6, 27, 32, 6, "Protocollo documento",            AN); // ex NU
     
     add_field( 7, 33, 48,16, "Codice fiscale",                  CF, "",      OBBLIG);
     add_field( 8, 49, 59,11, "Partita IVA",                     PI);
@@ -518,8 +539,8 @@ void TDati_rilevanti_trc::create_fields(int tipo, TAS400_recordset& recset)
     add_field(21,266,269, 4, "Numero totale invii telematici",  NU, "1");
     
     add_field(22,270,285,16, "Codice fiscale intermediario",    CF);  
-    add_field(23,286,290, 5, "Numero iscrizione C.A.F.",        NU);
-    add_field(24,291,291, 1, "Impegno alla trasmissione",       NU, "1");
+    add_field(23,286,290, 5, "Numero iscrizione C.A.F.",        AN);  // Ex NU
+    add_field(24,291,291, 1, "Impegno alla trasmissione",       AN ); // Ex NU
     add_field(25,292,299, 8, "Data dell'impegno",               DT);
     
     add_field(26,300,1797,1498, "Filler",                       AN);
@@ -643,13 +664,11 @@ public:
   bool set(unsigned int n, int v)             { return set_val(n, long(v)); }
   bool set(unsigned int n, const real& v)     { return set_val(n, v); }
   bool set(unsigned int n, const TDate& v)    { return set_val(n, v); }
-  void add_control_rec(int zero_o_nove, int num_inv = 1, int tot_inv = 1);
+  void add_header(const TMask& msk, int num_inv = 1, int tot_inv = 1);
+  void add_footer();
   bool split(const TFilename& name, const TRecnotype maxalleg = 15000);
   int anno() const { return _anno; }
 
-  void set_ragsoc(const TString& ragsoc) { row(-1).overwrite(ragsoc, 1000); }
-  const TString& ragsoc() const { return row(-1).mid(1000, 50); }
-
   TDati_rilevanti_set(int anno);
   TDati_rilevanti_set(const TFilename& file);
 };
@@ -660,8 +679,13 @@ bool TDati_rilevanti_set::set_field(const TAS400_column_info& fi, const TVariant
   if (fi._type == DT && fi._width == 8) 
   {
     const TDate d = var.as_date();
-    TString8 str; str.format("%02d%02d%04d", d.day(), d.month(), d.year());
-    row().overwrite(str, fi._pos);
+    if (d.ok())
+    {
+      TFixed_string str = d.string(full, '\0', full, full, gma_date);
+      row().overwrite(str, fi._pos);
+    }
+    else
+      row().overwrite("        ", fi._pos);
     return true;
   } else
   // Salva gli importi in formato 000001234 (non possono essere negativi)
@@ -703,14 +727,11 @@ const TVariant& TDati_rilevanti_set::get_field(const TAS400_column_info& ci) con
   return TAS400_recordset::get_field(ci);
 }
 
-void TDati_rilevanti_set::add_control_rec(int zon, int num_inv, int tot_inv)
+void TDati_rilevanti_set::add_header(const TMask& msk, int num_inv, int tot_inv)
 {
-  CHECKD(zon == 0 || zon == 9, "Tipo record di testa o coda non valido ", zon);
-
   const TAnagrafica ditta(LF_NDITTE, prefix().get_codditta());
 
-  TString4 tipo; tipo << zon;
-  new_rec(tipo);
+  new_rec("0");
   set(7, ditta.codice_fiscale());
   set(8, ditta.partita_IVA());
 
@@ -736,6 +757,26 @@ void TDati_rilevanti_set::add_control_rec(int zon, int num_inv, int tot_inv)
   if (num_inv > tot_inv) num_inv = tot_inv;
   set(20, num_inv);
   set(21, tot_inv);
+
+  const TString& cofi = msk.get(F_INTER_COFI);
+  if (cofi.full())
+  {
+    set(22, cofi);
+    set(23, msk.get(F_INTER_CAF));
+    set(24, msk.get(F_INTER_COM));
+    set(25, msk.get(F_INTER_DATE));
+  }
+  else
+  {
+    set(25, TDate()); // Svuota data impegno
+  }
+}
+
+void TDati_rilevanti_set::add_footer()
+{
+  TString f = row(0);
+  f.overwrite("9");
+  new_rec(f);
 }
 
 bool TDati_rilevanti_set::split(const TFilename& name, const TRecnotype maxalleg)
@@ -757,7 +798,7 @@ bool TDati_rilevanti_set::split(const TFilename& name, const TRecnotype maxalleg
       outset.new_rec(row(r));
       if (outset.items() >= maxalleg || r == totrec-1)
       {
-        // Costruisce il nome del file di invio parziale, es: datiril_2.txt
+        // Costruisce il nome del file di invio parziale, es: Spesometro00001_2.txt
         TFilename outname = name;
         const TString8 saved_ext = outname.ext();
         outname.ext(""); outname << '_' << (++f); 
@@ -875,10 +916,13 @@ TExclusion_mode TDati_rilevanti_array::add(const TRectype& alleg, bool send_all,
     {
       sum->add(ALL_IMPORTO, importo);
       sum->add(ALL_IMPOSTA, imposta);
-      const TDate sum_data = sum->get(ALL_DATAREG);
-      const TDate all_data = alleg.get(ALL_DATAREG);
-      if (all_data > sum_data)
-        sum->put(ALL_DATAREG, all_data);
+      // Le istruzioni dicono di mettere la data dell'ultima rettifica
+      // ma la procedura di controllo non accetta anni successivi! 
+      // Per cui ... comment :-)
+      // const TDate sum_data = sum->get(ALL_DATAREG);
+      // const TDate all_data = alleg.get(ALL_DATAREG);
+      // if (all_data > sum_data) 
+      //  sum->put(ALL_DATAREG, all_data);
 
       const int old_mode = sum->get_int(ALL_IGNORA);
       if (old_mode <= 1)
@@ -939,13 +983,113 @@ void TDati_rilevanti_array::add(const TArray& note, bool send_all, TLog_report&
   }
 }
 
+///////////////////////////////////////////////////////////
+// TCofi_cache
+///////////////////////////////////////////////////////////
+
+class TCofi_cache : public TCache
+{
+  TLocalisamfile _clifo, _occas;
+
+protected:
+  virtual TObject* key2obj(const char* key);
+
+public:
+  const TString& cofi2ragsoc(char tipocf, const TString& cofi);
+  const TString& paiv2ragsoc(char tipocf, const TString& paiv);
+  TCofi_cache() : _clifo(LF_CLIFO), _occas(LF_OCCAS) { }
+};
+
+TObject* TCofi_cache::key2obj(const char* key)
+{
+  TToken_string chiave(key);
+  const int fkey = chiave.get_char(0)=='C' ? 4 : 5;
+  const TString4 tipocf = chiave.get();
+  const TString16 code= chiave.get();
+
+  _clifo.setkey(fkey);
+  _clifo.zero();
+  _clifo.put(CLI_TIPOCF, tipocf);
+  if (fkey == 5)
+    _clifo.put(CLI_PAIV, code);
+  else
+    _clifo.put(CLI_COFI, code);
+  
+  int err = _clifo.read();
+  if (err != NOERR && fkey == 5 && pi_check("IT", code))
+  {
+    _clifo.put(CLI_TIPOCF, tipocf);
+    _clifo.put(CLI_STATOPAIV, "IT");
+    _clifo.put(CLI_PAIV, code);
+    err = _clifo.read();
+  }
+
+  if (err == NOERR)
+    return new TString80(_clifo.get(CLI_RAGSOC));
+
+  if (fkey == 5 && !pi_check("IT", code)) // cerco partite IVA estere
+  {
+    TString query;
+    query << "USE CLIFO SELECT PAIV=\"" << code << '"'
+          << "\nFROM TIPOCF=" << tipocf
+          << "\nTO TIPOCF=" << tipocf;
+    TISAM_recordset clifo(query);
+    if (clifo.move_first())
+      return new TString80(clifo.get(CLI_RAGSOC).as_string());
+  }
+
+  _occas.put(OCC_CFPI, code);
+  if (_occas.read() == NOERR)
+  {
+    const TString& cfpi = _occas.get(fkey == 4 ? OCC_COFI : OCC_PAIV);
+    if (code == cfpi || cfpi.empty())
+      return new TString80(_occas.get(OCC_RAGSOC));
+  }
+
+  TString query;
+  query << "USE OCCAS SELECT ";
+  if (fkey == 4)
+    query << "COFI=\"" << code << '"';
+  else
+    query << "PAIV=\"" << code << '"';
+  TISAM_recordset occas(query);
+  if (occas.move_first())
+    return new TString80(occas.get(OCC_RAGSOC).as_string());
+
+  return NULL;
+}
+
+const TString& TCofi_cache::cofi2ragsoc(char tipocf, const TString& cofi) 
+{ 
+  TString80 key;
+  key.format("CF|%c|%s", tipocf, (const char*)cofi);
+  const TString* ragsoc = (const TString*)objptr(key); 
+  return ragsoc != NULL ? *ragsoc : EMPTY_STRING;
+}
+
+const TString& TCofi_cache::paiv2ragsoc(char tipocf, const TString& paiv) 
+{ 
+  TString80 key;
+  key.format("PI|%c|%s", tipocf, (const char*)paiv);
+  const TString* ragsoc = (const TString*)objptr(key); 
+  return ragsoc != NULL ? *ragsoc : EMPTY_STRING;
+}
+
 ///////////////////////////////////////////////////////////
 // TDati_rilevanti_rep
 ///////////////////////////////////////////////////////////
 
 class TDati_rilevanti_rep : public TReport
 {
+  TCofi_cache _cofi;
+
 protected:
+  const TString& cofi2ragsoc(char tipocf, const TString& cofi) const 
+  { return ((TDati_rilevanti_rep*)this)->_cofi.cofi2ragsoc(tipocf, cofi); }
+  
+  const TString& paiv2ragsoc(char tipocf, const TString& cofi) const 
+  { return ((TDati_rilevanti_rep*)this)->_cofi.paiv2ragsoc(tipocf, cofi); }
+  
   virtual bool get_usr_val(const TString& name, TVariant& var) const;
 
 public:
@@ -989,7 +1133,54 @@ bool TDati_rilevanti_rep::get_usr_val(const TString& name, TVariant& var) const
   }
   if (name == "RAGSOC")
   {
-    var.set(set.ragsoc());
+    char tipocf = 'C';
+    switch (tipo)
+    {
+    case  2: if (set.get("2.8").as_int() == 2) tipocf = 'F'; break;
+    default: break;
+    };
+    switch (tipo)
+    {
+    case  1: var = cofi2ragsoc(tipocf, set.get("1.2").as_string()); break;
+    case  2: var = paiv2ragsoc(tipocf, set.get("2.2").as_string()); break;
+    case  3: 
+      var = set.get("3.8");
+      if (var.is_empty())
+      {
+        TString80 rs;
+        rs << set.get("3.2") << ' ' << set.get("3.3");
+        var = rs.trim();
+      }
+      break;
+    case  4: 
+      {
+        const TString16 paiv = set.get("4.2").as_string();
+        if (paiv.full())
+        {
+          var = paiv2ragsoc('C', paiv);
+          if (var.is_empty())
+            var = paiv2ragsoc('F', paiv);
+        }
+        else
+        {
+          const TString16 cofi = set.get("4.3").as_string();
+          var = cofi2ragsoc('C', cofi);
+          if (var.is_empty())
+            var = paiv2ragsoc('F', cofi);
+        }
+      }
+      break;
+    case  5: 
+      var = set.get("5.8");
+      if (var.is_empty())
+      {
+        TString80 rs;
+        rs << set.get("5.2") << ' ' << set.get("5.3");
+        var = rs.trim();
+      }
+      break;
+    default: var.set_null();       break;
+    }
     return true;
   }
   if (name == "DATAREG")
@@ -1143,6 +1334,7 @@ protected:
 
   bool send_nota_variazione(const TRectype& alleg, TDati_rilevanti_set& operaz);
   bool send_fatt(const TRectype& alleg, TDati_rilevanti_set& operaz);
+  void build_outname(TFilename& n) const;
 
 protected:
   TRecnotype last_user_progr() const;
@@ -1633,7 +1825,7 @@ void TDati_rilevanti_msk::collega_variazioni() const
   query << "\nFROM ANNO=" << anno << "\nTO ANNO=" << anno;
   TISAM_recordset fatture(query);
 
-  TProgind pi(fatture.items(), TR("Collegamente note di variazione"), false, true);
+  TProgind pi(fatture.items(), TR("Collegamento note di variazione"), false, true);
   TRelation& rel = *fatture.cursor()->relation();
 
   for (bool ok = fatture.move_first(); ok; ok = fatture.move_next())
@@ -1708,7 +1900,7 @@ bool TDati_rilevanti_msk::send_nota_variazione(const TRectype& alleg, TDati_rile
       operaz.set(8, anag.ragione_sociale());
       operaz.set(9, anag.comune_residenza());
       operaz.set(10, anag.stato_estero());
-      operaz.set(11, EMPTY_STRING); // TBI?  Indirizzo estero
+      operaz.set(11, anag.indirizzo_residenza());
     }
     operaz.set(12, alleg.get(ALL_DATAREG));
     operaz.set(13, alleg.get(ALL_NUMDOC));
@@ -1736,7 +1928,6 @@ bool TDati_rilevanti_msk::send_nota_variazione(const TRectype& alleg, TDati_rile
     operaz.set(10, segno_imponibile);
     operaz.set(11, segno_imposta);
   }    
-  operaz.set_ragsoc(anag.ragione_sociale());
 
   return true;
 }
@@ -1774,7 +1965,7 @@ bool TDati_rilevanti_msk::send_fatt(const TRectype& alleg, TDati_rilevanti_set&
       else
         operaz.set(9, anag.comune_residenza());
       operaz.set(10, anag.stato_estero());
-      operaz.set(11, EMPTY_STRING); // TBI?  Indirizzo estero
+      operaz.set(11, anag.indirizzo_residenza());
     }
     operaz.set(12, alleg.get(ALL_DATAREG));
     operaz.set(13, alleg.get(ALL_NUMDOC));
@@ -1805,7 +1996,6 @@ bool TDati_rilevanti_msk::send_fatt(const TRectype& alleg, TDati_rilevanti_set&
       operaz.set(8, alleg.get(ALL_TIPOPE));
     }
   }    
-  operaz.set_ragsoc(anag.ragione_sociale());
 
   return true;
 }
@@ -1846,17 +2036,24 @@ bool TDati_rilevanti_msk::recall_alleg() const
   return true;
 }
 
+void TDati_rilevanti_msk::build_outname(TFilename& n) const
+{
+  n = get(F_OUTFOLDER);
+  if (n.blank())  
+    n.tempdir(); 
+
+  TString16 f; f.format("Spesometro%05d", prefix().get_codditta());
+  n.add(f);
+  n.ext("txt");
+}
+
 // Genera file per invio telematico
 bool TDati_rilevanti_msk::send_alleg()
 {
   const int anno = get_int(F_ANNO);
   const bool send_all = get_int(F_SENDALL) != 1;
 
-
-  TFilename temp = get(F_OUTFOLDER);
-  if (temp.blank())  
-    temp.tempdir(); 
-  temp.add("datiril.txt");
+  TFilename temp; build_outname(temp);
 
   TDati_rilevanti_array data;
 
@@ -1870,9 +2067,7 @@ bool TDati_rilevanti_msk::send_alleg()
 
   if (tot_alleg > 0)
   {
-    TString str_pi;
-    str_pi << TR("Generazione file ") << temp;
-    _log = new TLog_report(str_pi);
+    _log = new TLog_report(temp);
 
     const TRectype& rec = alleg.cursor()->curr();
 
@@ -1909,7 +2104,7 @@ bool TDati_rilevanti_msk::send_alleg()
   }
 
   TDati_rilevanti_set recset(anno);
-  recset.add_control_rec(0);
+  recset.add_header(*this);
 
   const int tot = data.items();
   if (tot > 0)
@@ -1924,7 +2119,7 @@ bool TDati_rilevanti_msk::send_alleg()
     }
   }
 
-  recset.add_control_rec(9);
+  recset.add_footer();
   recset.sort();
   bool done = recset.save_as(temp);
 
@@ -2234,9 +2429,7 @@ void TDati_rilevanti_msk::enable_buttons()
   enable(F_DEFINITIVO, !def);
   if (def) reset(F_DEFINITIVO);
 
-  TFilename temp = get(F_OUTFOLDER);
-  if (temp.blank()) temp.tempdir(); 
-  temp.add("datiril.txt");
+  TFilename temp; build_outname(temp);
   enable(DLG_PREVIEW, temp.exist());
 }
 
@@ -2300,9 +2493,7 @@ bool TDati_rilevanti_msk::on_field_event(TOperable_field& o, TField_event e, lon
   case DLG_PREVIEW:
     if (e == fe_button)
     {
-      TFilename temp = get(F_OUTFOLDER);
-      if (temp.blank()) temp.tempdir(); 
-      temp.add("datiril.txt");
+      TFilename temp; build_outname(temp);
       if (temp.exist())
       {
         TDati_rilevanti_rep rep(temp);
diff --git a/fe/fe0100.rep b/fe/fe0100.rep
index 4212c7135..6469755a7 100644
--- a/fe/fe0100.rep
+++ b/fe/fe0100.rep
@@ -2,34 +2,34 @@
 <report name="fe0100" lpi="6">
  <font face="Courier New" size="8" />
  <section type="Head" pattern="1">
-  <field x="1" type="Stringa" valign="center" align="center" width="112" height="3" pattern="1">
+  <field x="8" type="Stringa" valign="center" align="center" width="112" height="3" pattern="1">
    <font face="Courier New" bold="1" size="24" />
    <source>"Dati rilevanti " + ANNO + " tipo " + TIPO</source>
   </field>
-  <field border="3" x="1" y="3" type="Linea" width="112" height="0" pattern="1" />
-  <field border="2" x="1" y="3" type="Linea" height="3" pattern="1" />
-  <field border="2" x="19" y="3" type="Linea" height="3" pattern="1" />
-  <field border="2" x="46" y="3" type="Linea" height="3" pattern="1" />
-  <field border="2" x="58" y="3" type="Linea" height="3" pattern="1" />
-  <field border="2" x="76" y="3" type="Linea" height="3" pattern="1" />
-  <field border="2" x="90" y="3" type="Linea" height="3" pattern="1" />
-  <field border="2" x="101" y="3" type="Linea" height="3" pattern="1" />
-  <field border="2" x="113" y="3" type="Linea" height="3" pattern="1" />
-  <field border="3" x="1" y="6" type="Linea" width="112" height="0" pattern="1" />
-  <field x="2" y="3.5" type="Testo" width="16" id="101" pattern="1" text="Codice Fiscale">
+  <field border="3" y="3" type="Linea" width="120" height="0" pattern="1" />
+  <field border="2" x="8" y="3" type="Linea" height="3" pattern="1" />
+  <field border="2" x="26" y="3" type="Linea" height="3" pattern="1" />
+  <field border="2" x="53" y="3" type="Linea" height="3" pattern="1" />
+  <field border="2" x="65" y="3" type="Linea" height="3" pattern="1" />
+  <field border="2" x="83" y="3" type="Linea" height="3" pattern="1" />
+  <field border="2" x="97" y="3" type="Linea" height="3" pattern="1" />
+  <field border="2" x="108" y="3" type="Linea" height="3" pattern="1" />
+  <field x="1" y="4" type="Testo" width="6" pattern="1" text="Riga" />
+  <field border="3" y="6" type="Linea" width="120" height="0" pattern="1" />
+  <field x="9" y="3.5" type="Testo" width="16" id="101" pattern="1" text="Codice Fiscale">
    <source>COFI</source>
   </field>
-  <field x="2" y="4.5" type="Testo" width="16" id="102" pattern="1" text="Partita IVA" />
-  <field x="20" y="3.5" type="Testo" width="25" height="2" id="201" pattern="1" text="Ragione Sociale" />
-  <field x="47" y="3.5" type="Testo" width="10" id="301" pattern="1" text="Data Reg." />
-  <field x="47" y="4.5" type="Testo" width="10" id="302" pattern="1" text="Num. Doc." />
-  <field x="59" y="3.5" type="Testo" width="16" id="401" pattern="1" text="Mod. Pagamento" />
-  <field x="59" y="4.5" type="Testo" width="16" id="402" pattern="1" text="Tipo Operazione" />
-  <field x="77" y="3.5" type="Testo" align="right" width="12" id="501" pattern="1" text="Importo" />
-  <field x="77" y="4.5" type="Testo" align="right" width="12" id="502" pattern="1" text="Imposta" />
-  <field x="93" y="3.5" type="Testo" width="10" height="2" id="601" pattern="1" text="Segno" />
-  <field x="102" y="3.5" type="Testo" width="10" id="601" pattern="1" text="Data rett." />
-  <field x="102" y="4.5" type="Testo" width="10" id="602" pattern="1" text="Num. Rett." />
+  <field x="9" y="4.5" type="Testo" width="16" id="102" pattern="1" text="Partita IVA" />
+  <field x="27" y="3.5" type="Testo" width="25" height="2" id="201" pattern="1" text="Ragione Sociale" />
+  <field x="54" y="3.5" type="Testo" width="10" id="301" pattern="1" text="Data Reg." />
+  <field x="54" y="4.5" type="Testo" width="10" id="302" pattern="1" text="Num. Doc." />
+  <field x="66" y="3.5" type="Testo" width="16" id="401" pattern="1" text="Mod. Pagamento" />
+  <field x="66" y="4.5" type="Testo" width="16" id="402" pattern="1" text="Tipo Operazione" />
+  <field x="84" y="3.5" type="Testo" align="right" width="12" id="501" pattern="1" text="Importo" />
+  <field x="84" y="4.5" type="Testo" align="right" width="12" id="502" pattern="1" text="Imposta" />
+  <field x="100" y="3.5" type="Testo" width="10" height="2" id="601" pattern="1" text="Segno" />
+  <field x="109" y="3.5" type="Testo" width="10" id="601" pattern="1" text="Data rett." />
+  <field x="109" y="4.5" type="Testo" width="10" id="602" pattern="1" text="Num. Rett." />
  </section>
  <section type="Head" level="1" pattern="1" />
  <section type="Head" level="2" height="1" page_break="1" pattern="1">
@@ -38,60 +38,62 @@
  </section>
  <section type="Body" pattern="1" />
  <section type="Body" level="1" pattern="1">
-  <field border="2" x="1" type="Linea" height="3" pattern="1" />
-  <field border="2" x="19" type="Linea" height="3" pattern="1" />
-  <field border="2" x="46" type="Linea" height="3" pattern="1" />
-  <field border="2" x="58" type="Linea" height="3" pattern="1" />
-  <field border="2" x="76" type="Linea" height="3" pattern="1" />
-  <field border="2" x="90" type="Linea" height="3" pattern="1" />
-  <field border="2" x="101" type="Linea" height="3" pattern="1" />
-  <field border="2" x="113" type="Linea" height="3" pattern="1" />
-  <field border="2" x="1" y="3" type="Linea" width="112" height="0" pattern="1" />
-  <field x="2" y="0.5" type="Stringa" width="16" id="101" pattern="1">
+  <field border="2" x="8" type="Linea" height="3" pattern="1" />
+  <field border="2" x="26" type="Linea" height="3" pattern="1" />
+  <field border="2" x="53" type="Linea" height="3" pattern="1" />
+  <field border="2" x="65" type="Linea" height="3" pattern="1" />
+  <field border="2" x="83" type="Linea" height="3" pattern="1" />
+  <field border="2" x="97" type="Linea" height="3" pattern="1" />
+  <field border="2" x="108" type="Linea" height="3" pattern="1" />
+  <field border="2" y="3" type="Linea" width="120" height="0" pattern="1" />
+  <field y="1" type="Numero" align="right" width="7" id="100" pattern="1" text="@@@@@@@">
+   <source>#RECORD.NUMBER</source>
+  </field>
+  <field x="9" y="0.5" type="Stringa" width="16" id="101" pattern="1">
    <source>COFI</source>
   </field>
-  <field x="2" y="1.5" type="Stringa" width="16" id="102" pattern="1">
+  <field x="9" y="1.5" type="Stringa" width="16" id="102" pattern="1">
    <source>PAIV</source>
   </field>
-  <field x="20" y="0.5" type="Stringa" width="25" height="2" id="201" pattern="1">
+  <field x="27" y="0.5" type="Stringa" width="25" height="2" id="201" pattern="1">
    <source>RAGSOC</source>
   </field>
-  <field x="47" y="0.5" type="Data" width="11" id="301" pattern="1">
+  <field x="54" y="0.5" type="Data" width="11" id="301" pattern="1">
    <source>DATAREG</source>
   </field>
-  <field x="47" y="1.5" type="Stringa" width="10" id="302" pattern="1">
+  <field x="54" y="1.5" type="Stringa" width="10" id="302" pattern="1">
    <source>NUMDOC</source>
   </field>
-  <field x="59" y="0.5" type="Array" width="16" id="401" pattern="1">
+  <field x="66" y="0.5" type="Array" width="16" id="401" pattern="1">
    <source>MODPAG</source>
    <list>
-    <li Value="" Code="" />
+    <li />
     <li Value="Non Frazionato" Code="1" />
     <li Value="Frazionato" Code="2" />
     <li Value="Periodico" Code="3" />
    </list>
   </field>
-  <field x="59" y="1.5" type="Array" width="16" id="402" pattern="1">
+  <field x="66" y="1.5" type="Array" width="16" id="402" pattern="1">
    <source>TIPOPE</source>
    <list>
-    <li Value="" Code="" />
+    <li />
     <li Value="Vendita" Code="1" />
     <li Value="Acquisto" Code="2" />
    </list>
   </field>
-  <field x="77" y="0.5" type="Numero" align="right" width="12" id="501" pattern="1" text="############">
+  <field x="84" y="0.5" type="Numero" align="right" width="12" id="501" pattern="1" text="############">
    <source>IMPORTO</source>
   </field>
-  <field x="77" y="1.5" type="Numero" align="right" width="12" id="502" pattern="1" text="############">
+  <field x="84" y="1.5" type="Numero" align="right" width="12" id="502" pattern="1" text="############">
    <source>IMPOSTA</source>
   </field>
-  <field x="102" y="0.5" type="Data" width="10" id="601" pattern="1">
+  <field x="109" y="0.5" type="Data" width="10" id="601" pattern="1">
    <source>DATARETT</source>
   </field>
-  <field x="102" y="1.5" type="Stringa" width="10" id="602" pattern="1">
+  <field x="109" y="1.5" type="Stringa" width="10" id="602" pattern="1">
    <source>NUMRETT</source>
   </field>
-  <field x="91" y="0.5" type="Array" align="right" width="7" id="701" pattern="1">
+  <field x="98" y="0.5" type="Array" width="8" id="701" pattern="1">
    <source>SIMPORTO</source>
    <list>
     <li />
@@ -99,7 +101,7 @@
     <li Value="Debito" Code="D" />
    </list>
   </field>
-  <field x="91" y="1.5" type="Array" align="right" width="7" id="702" pattern="1">
+  <field x="98" y="1.5" type="Array" width="8" id="702" pattern="1">
    <source>SIMPOSTA</source>
    <list>
     <li />
diff --git a/fe/fe0100a.h b/fe/fe0100a.h
index 5b2f6a0f9..17d4ba484 100755
--- a/fe/fe0100a.h
+++ b/fe/fe0100a.h
@@ -13,6 +13,11 @@
 #define F_RAGSOC     314
 #define F_RAGOCC     315
 
+#define F_INTER_COM  320
+#define F_INTER_DATE 321
+#define F_INTER_COFI 322
+#define F_INTER_CAF  323
+
 #define F_RIGHE      300
 
 #define A_RIGA       101
@@ -33,4 +38,4 @@
 #define A_PAIV       116
 #define A_COFI       117
 
-#define A_OCCAS     155
+#define A_OCCAS       155
diff --git a/fe/fe0100a.uml b/fe/fe0100a.uml
index 07c0245a1..280dadc87 100755
--- a/fe/fe0100a.uml
+++ b/fe/fe0100a.uml
@@ -178,7 +178,7 @@ ENDPAGE
        
 PAGE "Opzioni" 0 2 0 0
 
-GROUPBOX DLG_NULL 78 6
+GROUPBOX DLG_NULL 78 5
 BEGIN
   PROMPT 1 1 "@bOpzioni per invio"
 END
@@ -212,6 +212,36 @@ BEGIN
   WARNING "Specificare una valore compreso tra 100 e 15000"
 END
 
+GROUPBOX DLG_NULL 78 6
+BEGIN
+  PROMPT 1 6 "@bDati del soggetto che assume l'impegno alla presentazione telematica"
+END
+
+LIST F_INTER_COM 1 20
+BEGIN
+  PROMPT 2 7 "Comunicazione predisposta da "
+  ITEM "|"
+  ITEM "1|contribuente"
+  ITEM "2|chi effettua l'invio"
+END
+
+STRING F_INTER_COFI 16
+BEGIN
+  PROMPT 2 8 "Codice fiscale dell'intermediario   "
+  FLAGS "U"
+  VALIDATE CF_FUNC 1 F_INTER_COFI
+END
+
+NUMBER F_INTER_CAF 5
+BEGIN
+  PROMPT 2 9 "Numero iscrizione all'albo C.A.F.   "
+END
+
+DATE F_INTER_DATE 
+BEGIN
+  PROMPT 2 10 "Data dell'impegno alla trasmissione "
+END
+
 ENDPAGE
 
 ENDMASK