diff --git a/src/app/registeredMail/controllers/IssuingSiteController.php b/src/app/registeredMail/controllers/IssuingSiteController.php
index 0ae034ea367ed1944c4744213260a9164ade3b77..59a06b165d552b096409a7197047ab079f6d97d0 100644
--- a/src/app/registeredMail/controllers/IssuingSiteController.php
+++ b/src/app/registeredMail/controllers/IssuingSiteController.php
@@ -69,13 +69,13 @@ class IssuingSiteController
             'id'                 => $site['id'],
             'label'              => $site['label'],
             'postOfficeLabel'    => $site['post_office_label'] ?? null,
-            'accountNumber'      => $site['account_number'] ?? null,
-            'addressNumber'      => $site['address_number'] ?? null,
-            'addressStreet'      => $site['address_street'] ?? null,
+            'accountNumber'      => $site['account_number'],
+            'addressNumber'      => $site['address_number'],
+            'addressStreet'      => $site['address_street'],
             'addressAdditional1' => $site['address_additional1'] ?? null,
             'addressAdditional2' => $site['address_additional2'] ?? null,
-            'addressPostcode'    => $site['address_postcode'] ?? null,
-            'addressTown'        => $site['address_town'] ?? null,
+            'addressPostcode'    => $site['address_postcode'],
+            'addressTown'        => $site['address_town'],
             'addressCountry'     => $site['address_country'] ?? null
         ];
 
@@ -126,7 +126,7 @@ class IssuingSiteController
             'limit ' => 1
         ]);
         if (!empty($site)) {
-            return $response->withStatus(400)->withJson(['errors' => 'Body accountNumber is already used by another site']);
+            return $response->withStatus(400)->withJson(['errors' => 'Body accountNumber is already used by another site', 'lang' => 'accountNumberAlreadyUsed']);
         }
 
         if (!empty($body['entities']) && !Validator::arrayType()->validate($body['entities'])) {
@@ -143,12 +143,12 @@ class IssuingSiteController
             'label'              => $body['label'],
             'postOfficeLabel'    => $body['postOfficeLabel'] ?? null,
             'accountNumber'      => $body['accountNumber'],
-            'addressNumber'      => $body['addressNumber'] ?? null,
-            'addressStreet'      => $body['addressStreet'] ?? null,
+            'addressNumber'      => $body['addressNumber'],
+            'addressStreet'      => $body['addressStreet'],
             'addressAdditional1' => $body['addressAdditional1'] ?? null,
             'addressAdditional2' => $body['addressAdditional2'] ?? null,
-            'addressPostcode'    => $body['addressPostcode'] ?? null,
-            'addressTown'        => $body['addressTown'] ?? null,
+            'addressPostcode'    => $body['addressPostcode'],
+            'addressTown'        => $body['addressTown'],
             'addressCountry'     => $body['addressCountry'] ?? null
         ]);
 
@@ -209,7 +209,7 @@ class IssuingSiteController
             'limit ' => 1
         ]);
         if (!empty($site)) {
-            return $response->withStatus(400)->withJson(['errors' => 'Body accountNumber is already used by another site']);
+            return $response->withStatus(400)->withJson(['errors' => 'Body accountNumber is already used by another site', 'lang' => 'accountNumberAlreadyUsed']);
         }
 
         if (!empty($body['entities']) && !Validator::arrayType()->validate($body['entities'])) {
@@ -227,12 +227,12 @@ class IssuingSiteController
                 'label'               => $body['label'],
                 'post_office_label'   => $body['postOfficeLabel'] ?? null,
                 'account_number'      => $body['accountNumber'],
-                'address_number'      => $body['addressNumber'] ?? null,
-                'address_street'      => $body['addressStreet'] ?? null,
+                'address_number'      => $body['addressNumber'],
+                'address_street'      => $body['addressStreet'],
                 'address_additional1' => $body['addressAdditional1'] ?? null,
                 'address_additional2' => $body['addressAdditional2'] ?? null,
-                'address_postcode'    => $body['addressPostcode'] ?? null,
-                'address_town'        => $body['addressTown'] ?? null,
+                'address_postcode'    => $body['addressPostcode'],
+                'address_town'        => $body['addressTown'],
                 'address_country'     => $body['addressCountry'] ?? null
             ],
             'where' => ['id = ?'],
@@ -273,6 +273,14 @@ class IssuingSiteController
             return $response->withStatus(204);
         }
 
+        $ranges = RegisteredNumberRangeModel::get([
+            'where' => ['site_id = ?', 'status = ?'],
+            'data'  => [$args['id'], 'OK']
+        ]);
+        if (!empty($ranges)) {
+            return $response->withStatus(400)->withJson(['errors' => 'Cannot delete site : site is used by an active range', 'lang' => 'siteIsUsedByActiveRange']);
+        }
+
         IssuingSiteEntitiesModel::delete([
             'where' => ['site_id = ?'],
             'data'  => [$args['id']]
diff --git a/src/app/registeredMail/controllers/RegisteredNumberRangeController.php b/src/app/registeredMail/controllers/RegisteredNumberRangeController.php
index b701aeea76bd183015dcc555961ccde7df1fd479..369f1407b2c52337dc21acc56bb04c88d56b9d4f 100644
--- a/src/app/registeredMail/controllers/RegisteredNumberRangeController.php
+++ b/src/app/registeredMail/controllers/RegisteredNumberRangeController.php
@@ -129,7 +129,7 @@ class RegisteredNumberRangeController
             return $response->withStatus(400)->withJson(['errors' => 'Body siteId is empty or not an integer']);
         }
         if ($body['rangeStart'] >= $body['rangeEnd']) {
-            return $response->withStatus(400)->withJson(['errors' => 'Body rangeStart cannot be larger or equal than rangeEnd']);
+            return $response->withStatus(400)->withJson(['errors' => 'Body rangeStart cannot be larger or equal than rangeEnd', 'lang' => 'rangeStartLargerThanRangeEnd']);
         }
 
         $site = IssuingSiteModel::getById(['id' => $body['siteId']]);
@@ -143,7 +143,7 @@ class RegisteredNumberRangeController
             'data'   => [$body['trackerNumber']]
         ]);
         if (!empty($ranges)) {
-            return $response->withStatus(400)->withJson(['errors' => 'Body trackerNumber is already used by another range']);
+            return $response->withStatus(400)->withJson(['errors' => 'Body trackerNumber is already used by another range', 'lang' => 'trackingNumberAlreadyUsed']);
         }
 
         $ranges = RegisteredNumberRangeModel::get([
@@ -156,7 +156,7 @@ class RegisteredNumberRangeController
         foreach ($ranges as $range) {
             if ($body['rangeStart'] <= $range['range_start'] && $range['range_start'] <= $body['rangeEnd']
                 || $body['rangeStart'] <= $range['range_end'] && $range['range_end'] <= $body['rangeEnd']) {
-                return $response->withStatus(400)->withJson(['errors' => 'Range overlaps another range']);
+                return $response->withStatus(400)->withJson(['errors' => 'Range overlaps another range', 'lang' => 'rangeOverlaps']);
             }
         }
 
@@ -212,7 +212,7 @@ class RegisteredNumberRangeController
             return $response->withStatus(400)->withJson(['errors' => 'Body siteId is empty or not an integer']);
         }
         if ($body['rangeStart'] >= $body['rangeEnd']) {
-            return $response->withStatus(400)->withJson(['errors' => 'Body rangeStart cannot be larger or equal  than rangeEnd']);
+            return $response->withStatus(400)->withJson(['errors' => 'Body rangeStart cannot be larger or equal  than rangeEnd', 'lang' => 'rangeStartLargerThanRangeEnd']);
         }
 
         $site = IssuingSiteModel::getById(['id' => $body['siteId']]);
@@ -226,7 +226,7 @@ class RegisteredNumberRangeController
             'data'   => [$body['trackerNumber'], $args['id']]
         ]);
         if (!empty($ranges)) {
-            return $response->withStatus(400)->withJson(['errors' => 'Body trackerNumber is already used by another range']);
+            return $response->withStatus(400)->withJson(['errors' => 'Body trackerNumber is already used by another range', 'lang' => 'trackingNumberAlreadyUsed']);
         }
 
         $ranges = RegisteredNumberRangeModel::get([
@@ -239,7 +239,7 @@ class RegisteredNumberRangeController
         foreach ($ranges as $item) {
             if ($body['rangeStart'] <= $item['range_start'] && $item['range_start'] <= $body['rangeEnd']
                 || $body['rangeStart'] <= $item['range_end'] && $item['range_end'] <= $body['rangeEnd']) {
-                return $response->withStatus(400)->withJson(['errors' => 'Range overlaps another range']);
+                return $response->withStatus(400)->withJson(['errors' => 'Range overlaps another range', 'lang' => 'rangeOverlaps']);
             }
         }
 
diff --git a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.html b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.html
index 849483c19423dbe3200a37312c0292bf47de82b4..81f43d07fb66ded95479edb3512854dc3ab137aa 100644
--- a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.html
+++ b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.html
@@ -26,7 +26,7 @@
                             </mat-form-field>
                             <mat-form-field>
                                 <mat-label>{{'lang.coclicoNumber' | translate}}</mat-label>
-                                <input type="text" pattern="[0-9]+" maxlength="10" matInput formControlName="accountNumber">
+                                <input type="number" pattern="[0-9]+" maxlength="10" matInput formControlName="accountNumber">
                             </mat-form-field>
                             <mat-form-field>
                                 <mat-label>{{'lang.postOffice' | translate}}</mat-label>
@@ -73,7 +73,7 @@
                                 </mat-form-field>
                                 <mat-form-field>
                                     <mat-label>{{'lang.contactsParameters_addressNumber' | translate}}</mat-label>
-                                    <input matInput formControlName="addressNumber">
+                                    <input type="number" matInput formControlName="addressNumber">
                                 </mat-form-field>
                                 <mat-form-field>
                                     <mat-label>{{'lang.contactsParameters_addressStreet' | translate}}</mat-label>
diff --git a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.ts b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.ts
index 2f25c77604637ede430c3e96ab351d6ac606a46e..e3afd52652e787b2ae096fa743716d8339258f86 100644
--- a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.ts
+++ b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.ts
@@ -257,7 +257,7 @@ export class IssuingSiteComponent implements OnInit {
                     this.notify.success(this.translate.instant('lang.issuingSiteAdded'));
                     this.router.navigate(['/administration/issuingSites']);
                 }, (err) => {
-                    this.notify.error(err.error.errors);
+                    this.notify.handleSoftErrors(err);
                 });
         } else {
             this.http.put('../rest/registeredMail/sites/' + this.id, objToSubmit)
@@ -265,7 +265,7 @@ export class IssuingSiteComponent implements OnInit {
                     this.notify.success(this.translate.instant('lang.issuingSiteUpdated'));
                     this.router.navigate(['/administration/issuingSites']);
                 }, (err) => {
-                    this.notify.error(err.error.errors);
+                    this.notify.handleSoftErrors(err);
                 });
         }
     }
diff --git a/src/frontend/app/administration/registered-mail/registered-mail.component.ts b/src/frontend/app/administration/registered-mail/registered-mail.component.ts
index 6c5c09278c86382310606f7ef82d621e751d0930..858ace1026a920802952f5d7a0fd3101df11db22 100644
--- a/src/frontend/app/administration/registered-mail/registered-mail.component.ts
+++ b/src/frontend/app/administration/registered-mail/registered-mail.component.ts
@@ -1,4 +1,4 @@
-import {Component, OnInit, ViewChild} from '@angular/core';
+import {Component, OnInit} from '@angular/core';
 import { FormGroup, FormBuilder, Validators } from '@angular/forms';
 import { TranslateService } from '@ngx-translate/core';
 import { HttpClient } from '@angular/common/http';
@@ -8,7 +8,6 @@ import { HeaderService } from '../../../service/header.service';
 import { AppService } from '../../../service/app.service';
 import { tap, catchError } from 'rxjs/operators';
 import { of } from 'rxjs/internal/observable/of';
-import {MaarchFlatTreeComponent} from '../../../plugins/tree/maarch-flat-tree.component';
 
 @Component({
     selector: 'app-registered-mail',
@@ -195,7 +194,7 @@ export class RegisteredMailComponent implements OnInit {
                     this.notify.success(this.translate.instant('lang.registeredMailNumberRangesAdded'));
                     this.router.navigate(['/administration/registeredMails']);
                 }, (err) => {
-                    this.notify.error(err.error.errors);
+                    this.notify.handleSoftErrors(err);
                 });
         } else {
             this.http.put('../rest/registeredMail/ranges/' + this.id, objToSubmit)
@@ -203,7 +202,7 @@ export class RegisteredMailComponent implements OnInit {
                     this.notify.success(this.translate.instant('lang.registeredMailNumberRangesUpdated'));
                     this.router.navigate(['/administration/registeredMails']);
                 }, (err) => {
-                    this.notify.error(err.error.errors);
+                    this.notify.handleSoftErrors(err);
                 });
         }
     }
diff --git a/src/lang/lang-en.json b/src/lang/lang-en.json
index 3ff06723dcc9d0251b1df1a0b6aee3f7ff1be88e..0431ab7b47bcbe187540dbbed73e49837b95301a 100644
--- a/src/lang/lang-en.json
+++ b/src/lang/lang-en.json
@@ -1913,5 +1913,10 @@
     "authorizedRoutesInformations": "One route per row. Routes documentation",
     "canNotDisabledField": "This field can not be disabled because it is empty and mandatory",
     "registeredMailsIncluded": "Number of registered mails included",
-    "cannotGenerateDepositListForMails": "Imposible to generate for the following registered mails :"
+    "cannotGenerateDepositListForMails": "Imposible to generate for the following registered mails :",
+    "accountNumberAlreadyUsed": "Account number is already used by another issuing site",
+    "rangeStartLargerThanRangeEnd": "Range start cannot be larger than range end",
+    "trackingNumberAlreadyUsed": "Tracking number is already used",
+    "rangeOverlaps": "Range overlaps another range",
+    "siteIsUsedByActiveRange": "Cannot delete issuing site : site is used by an active range"
 }
diff --git a/src/lang/lang-fr.json b/src/lang/lang-fr.json
index 57d012b5687fba5101a9a1075cdf886954130a4b..8a1b1e4266d2aaaa57f2c99d3ebc4a9d251ec1e2 100644
--- a/src/lang/lang-fr.json
+++ b/src/lang/lang-fr.json
@@ -1945,5 +1945,10 @@
     "authorizedRoutesInformations": "Une route par ligne. Documentation des routes",
     "canNotDisabledField": "Le champ ne peut pas être désactivé car il est vide et obligatoire",
     "registeredMailsIncluded": "Nombre de recommandés inclus :",
-    "cannotGenerateDepositListForMails": "Génération impossible pour les recommandés suivants :"
+    "cannotGenerateDepositListForMails": "Génération impossible pour les recommandés suivants :",
+    "accountNumberAlreadyUsed": "Le N° COCLICO est déjà utilisé par un autre site émetteur",
+    "rangeStartLargerThanRangeEnd": "Le début de la plage ne peut pas être plus grand que la fin de la plage",
+    "trackingNumberAlreadyUsed": "Le numéro de suivi est déjà utilisé",
+    "rangeOverlaps": "La plage chevauche une autre plage",
+    "siteIsUsedByActiveRange": "Impossible de supprimer le site émetteur : le site est utilisé par une plage active"
 }