diff --git a/lib/durt.dart b/lib/durt.dart
index 077f0373e5fba5ebbdbbcdf9774262584f5c14b2..6f30a411f84ad53438ecc839c12c52a6a495de3a 100644
--- a/lib/durt.dart
+++ b/lib/durt.dart
@@ -21,3 +21,4 @@ export 'src/crypto/dewif.dart'
     show Dewif, randomSecretCode, ChecksumException, NewWallet;
 export 'src/crypto/cesium_wallet.dart' show CesiumWallet;
 export 'src/gva/gva.dart' show Gva;
+export 'src/gva/transaction.dart' show GraphQLException;
diff --git a/lib/src/gva/gva.dart b/lib/src/gva/gva.dart
index e60c37f1acbf4714d8bb2bfe84d588f23cf5b322..96fc5e6fcd5f457ae062a374c713ac0b10bd03ba 100644
--- a/lib/src/gva/gva.dart
+++ b/lib/src/gva/gva.dart
@@ -96,7 +96,7 @@ class Gva {
       int? derivation,
       String comment = '',
       bool ud = false,
-      bool useMempool = false}) async {
+      bool useMempool = false, bool raiseException = false}) async {
     Transaction transaction;
 
     if (ud) {
@@ -120,7 +120,7 @@ class Gva {
         client: _client);
 
     // Execute transaction
-    return await transaction.process();
+    return await transaction.process(raiseException);
   }
 
   Future<Map<String,dynamic>?> history(String pubkey,[ int? pageSize, String? cursor]) async {
@@ -140,6 +140,7 @@ class Gva {
     } else if (result.data != null) {
       return result.data;
     }
+    return null;
   }
 }
 
diff --git a/lib/src/gva/transaction.dart b/lib/src/gva/transaction.dart
index 49bead61904562923da12f4231c95fe921b28445..11fafbbea7292fc9d8d26cd0974fd8f2f549589c 100644
--- a/lib/src/gva/transaction.dart
+++ b/lib/src/gva/transaction.dart
@@ -193,7 +193,7 @@ class Transaction {
     return false;
   }
 
-  Future<String> process() async {
+  Future<String> process([bool raiseException = false]) async {
     try {
       final List transDocs = await _generateTransactionDocument();
       if (_checkTransactionDocument(transDocs)) {
@@ -204,6 +204,9 @@ class Transaction {
         return 'Transaction document is not valid.';
       }
     } on GraphQLException catch (e) {
+      if (raiseException) {
+        rethrow;
+      }
       List<String> eCause = e.cause.split('message: ');
       return eCause.isNotEmpty? eCause[eCause.length>1? 1:0].split(',')[0]:'Transaction failed for unknown reason';
     } on MySelfException catch (e) {