diff --git a/beem/transactionbuilder.py b/beem/transactionbuilder.py
index 162899a40bd90f8d38791f06cb6f7abd1621568f..1356533b9b49a78b032e6561ef6441eda3ae12e7 100644
--- a/beem/transactionbuilder.py
+++ b/beem/transactionbuilder.py
@@ -251,9 +251,17 @@ class TransactionBuilder(dict):
             ops.extend([Operation(op, appbase=appbase, prefix=self.hive.prefix)])
 
         # We no wrap everything into an actual transaction
-        expiration = formatTimeFromNow(
-            self.expiration or self.hive.expiration
-        )
+        # calculation expiration time from last block time not system time
+        # it fixes transaction expiration error when pushing transactions 
+        # when blocks are moved forward with debug_produce_block*
+        import dateutil.parser
+        from datetime import timedelta
+        now = dateutil.parser.parse(self.hive.rpc.get_dynamic_global_properties().get('time'))
+        expiration = now + timedelta(seconds = int(self.expiration or self.hive.expiration))
+        expiration = expiration.replace(microsecond = 0).isoformat()
+        #expiration = formatTimeFromNow(
+        #    self.expiration or self.hive.expiration
+        #)
         if ref_block_num is None or ref_block_prefix is None:
             ref_block_num, ref_block_prefix = transactions.getBlockParams(
                 self.hive.rpc)