diff --git a/stellar_base/transaction.py b/stellar_base/transaction.py
index <HASH>..<HASH> 100644
--- a/stellar_base/transaction.py
+++ b/stellar_base/transaction.py
@@ -31,7 +31,8 @@ class Transaction(object):
         self.operations = opts.get('operations') or []
 
     def add_operation(self, operation):
-        self.operations.append(operation)
+        if operation not in self.operations:
+            self.operations.append(operation)
 
     def to_xdr_object(self):
         source_account = account_xdr_object(self.source)
diff --git a/stellar_base/transaction_envelope.py b/stellar_base/transaction_envelope.py
index <HASH>..<HASH> 100644
--- a/stellar_base/transaction_envelope.py
+++ b/stellar_base/transaction_envelope.py
@@ -21,7 +21,8 @@ class TransactionEnvelope(object):
         assert isinstance(keypair, Keypair)
         tx_hash = self.hash_meta()
         sig = keypair.sign_decorated(tx_hash)
-        self.signatures.append(sig)
+        if sig not in self.signatures:
+            self.signatures.append(sig)
         return self
 
     def hash_meta(self):
keep ops in Tx and signatures in Envelope unique