diff --git a/src/BondTransactionAccessControlHandler.php b/src/BondTransactionAccessControlHandler.php
index 6923c0e1f91285c0421fc6393246b7dd96065ef3..ef8e14f4bd1f4c39b68c294651e0dbc670380564 100644
--- a/src/BondTransactionAccessControlHandler.php
+++ b/src/BondTransactionAccessControlHandler.php
@@ -31,6 +31,9 @@ class BondTransactionAccessControlHandler extends EntityAccessControlHandler {
             'OR');
 
       case 'delete':
+        if ($entity && $entity->get('state')->value !== 'cancel') {
+          return AccessResult::forbidden();
+        }
         return AccessResult::allowedIfHasPermissions(
             $account,
             [
diff --git a/src/Entity/BondTransaction.php b/src/Entity/BondTransaction.php
index fa44f64bc76425f6640f2a24ded4d9474aada23d..496e373e87b9eab04e38db0c435e6adf9bee9667 100644
--- a/src/Entity/BondTransaction.php
+++ b/src/Entity/BondTransaction.php
@@ -13,6 +13,7 @@ use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;
 use Drupal\user\UserInterface;
 
 use Drupal\shareholder_register\Entity\ShareTransactionGroupType;
+use Drupal\shareholder_register_bonds\Exception\BondsIntegrityException;
 use Drupal\shareholder_register_bonds\BondTransactionInterface;
 
 /**
@@ -69,6 +70,20 @@ class BondTransaction extends ContentEntityBase implements BondTransactionInterf
     $values += ['uid' => \Drupal::currentUser()->id()];
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function delete() {
+    if ($this->getState() !== 'cancel') {
+      throw new BondsIntegrityException(
+        'You cannot delete a valid bond transaction.',
+        BondsIntegrityException::DELETE_VALID_TRANSACTION);
+    }
+    else {
+      return parent::delete();
+    }
+  }
+    
   /**
    * {@inheritdoc}
    */
diff --git a/src/Entity/ShareholderRegisterBond.php b/src/Entity/ShareholderRegisterBond.php
index 099b61ace769e493875df1f28a11713d255240b8..e3e18d47cf336964670538b81606ece48146b053 100644
--- a/src/Entity/ShareholderRegisterBond.php
+++ b/src/Entity/ShareholderRegisterBond.php
@@ -7,6 +7,8 @@ use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\RevisionableContentEntityBase;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
+
+use Drupal\shareholder_register_bonds\Exception\BondsIntegrityException;
 use Drupal\shareholder_register_bonds\ShareholderRegisterBondInterface;
 
 /**
@@ -64,6 +66,20 @@ class ShareholderRegisterBond extends RevisionableContentEntityBase implements S
 
   use EntityChangedTrait;
 
+  /**
+   * {@inheritdoc}
+   */
+  public function delete() {
+    if ($this->getState() !== 'draft') {
+      throw new BondsIntegrityException(
+        'You cannot delete an issued bond.',
+        BondsIntegrityException::DELETE_VALID_BOND);
+    }
+    else {
+      return parent::delete();
+    }
+  }
+    
   /**
    * {@inheritdoc}
    */
diff --git a/src/Exception/BondTransactionException.php b/src/Exception/BondTransactionException.php
index f6a1f302bb37928d483eeae5f660008ddd5f8a74..176e8fdd8062f541a040e86c85c9425beb92f051 100644
--- a/src/Exception/BondTransactionException.php
+++ b/src/Exception/BondTransactionException.php
@@ -8,4 +8,5 @@ use Drupal\shareholder_register\Exception\ShareholderRegisterException;
  * An exception class for Bond Transactions.
  */
 class BondTransactionException extends ShareholderRegisterException {
+
 }
diff --git a/src/Exception/BondsIntegrityException.php b/src/Exception/BondsIntegrityException.php
new file mode 100644
index 0000000000000000000000000000000000000000..d95f01defac679c63dabed0a1c39094609248aa1
--- /dev/null
+++ b/src/Exception/BondsIntegrityException.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\shareholder_register_bonds\Exception;
+
+use Drupal\shareholder_register\Exception\ShareholderRegisterException;
+
+/**
+ * An exception class for Bond integrity.
+ */
+class BondsIntegrityException extends ShareholderRegisterException {
+
+  const DELETE_VALID_TRANSACTION = 1;
+  const DELETE_VALID_BOND = 2;
+    
+  /**
+   * {@inheritdoc}
+   */
+  public function getUserMessage() {
+    switch ($this->getCode()) {
+      case DELETE_VALID_TRANSACTION:
+        return t('You cannot delete a valid transaction!');
+
+      case DELETE_VALID_BOND:
+        return t('You cannot delete an Issued bond!');
+        
+      default:
+        return t('Shareholder Register Bonds Integrity Exception');
+    }
+  }    
+}
diff --git a/src/ShareholderRegisterBondAccessControlHandler.php b/src/ShareholderRegisterBondAccessControlHandler.php
index 193783bd527bcc24333a9c1a2a33c18f33b6c602..086a68fa05ec7d10024ddc513c563f85b4187b68 100644
--- a/src/ShareholderRegisterBondAccessControlHandler.php
+++ b/src/ShareholderRegisterBondAccessControlHandler.php
@@ -28,6 +28,9 @@ class ShareholderRegisterBondAccessControlHandler extends EntityAccessControlHan
         ], 'OR');
 
       case 'delete':
+        if ($entity && $entity->get('state')->value !== 'cancel') {
+          return AccessResult::forbidden();
+        }
         return AccessResult::allowedIfHasPermissions($account, [
           'delete bond',
           'administer bond',
diff --git a/tests/src/Kernel/BondEntityCrudTest.php b/tests/src/Kernel/BondEntityCrudTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d31d4229bf477bd6fe735f45208f0ffc791da24c
--- /dev/null
+++ b/tests/src/Kernel/BondEntityCrudTest.php
@@ -0,0 +1,95 @@
+<?php
+
+namespace Drupal\Tests\shareholder_register\Kernel;
+
+use Drupal\shareholder_register_bonds\Entity\ShareholderRegisterBond;
+use Drupal\shareholder_register_bonds\Entity\ShareholderRegisterBondType;
+use Drupal\shareholder_register_bonds\Entity\BondTransaction;
+
+use Drupal\shareholder_register_bonds\Exception\BondsIntegrityException;
+
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\Tests\shareholder_register\Traits\LoadRegisterTrait;
+
+/**
+ * Tests share transaction group.
+ *
+ * @group shareholder_register
+ */
+class BondEntityCrudTest extends KernelTestBase {
+
+  use LoadRegisterTrait;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  protected static $modules = [
+    'system',
+    'user',
+    'file',
+    'text',
+    'datetime',
+    'datetime_range',
+    'simple_workflows',
+    'shareholder_register',
+    'shareholder_register_bonds',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+    $this->traitSetUp();
+    $this->installEntitySchema('shareholder_register_bond');
+    $this->installEntitySchema('bond_transaction');
+
+    $this->type = ShareholderRegisterBondType::create(
+      [
+        'id' => 'default',
+        'label' => 'Default',
+      ]
+    );
+    $this->type->save();
+  }
+
+  /**
+   * Test bond validation.
+   */
+  public function testDeleteValidBondAndTransaction() {
+    $register = $this->loadBasicRegister(
+      [
+        'shareholders' => [
+          [
+            'number' => 1,
+          ],
+        ],
+        'transactions' => [],
+      ]);
+
+    $transaction = BondTransaction::create(
+      [
+        'shareholder_id' => $register['shareholder'],
+        'par_value' => 100,
+        'indenture' => 'yearly',
+      ]
+    );
+
+    $transaction->transitionValidate('2022-01-01');
+    $bond_ids = $transaction->getBondIds();
+    $bond_id = reset($bond_ids);
+    $bond = ShareholderRegisterBond::load($bond_id);
+          
+    $this->expectException(BondsIntegrityException::class);
+    $transaction->delete();
+    $this->assertNotNull(BondTransaction::load($transaction->id()));
+
+    $this->expectException(BondsIntegrityException::class);
+    $bond->delete();
+    $this->assertNotNull(ShareholderRegisterBond::load($bond->id()));
+    
+  }
+
+}