diff --git a/src/psbt.js b/src/psbt.js
index 8fbb2bb..051de6e 100644
--- a/src/psbt.js
+++ b/src/psbt.js
@@ -626,8 +626,14 @@ function checkFees(psbt, cache, opts) {
 function checkInputsForPartialSig(inputs, action) {
   inputs.forEach(input => {
     let throws = false;
-    if ((input.partialSig || []).length === 0) return;
-    input.partialSig.forEach(pSig => {
+    let pSigs = [];
+    if ((input.partialSig || []).length === 0) {
+      if (!input.finalScriptSig && !input.finalScriptWitness) return;
+      pSigs = getPsigsFromInputFinalScripts(input);
+    } else {
+      pSigs = input.partialSig;
+    }
+    pSigs.forEach(pSig => {
       const { hashType } = bscript.signature.decode(pSig.signature);
       const whitelist = [];
       const isAnyoneCanPay =
@@ -899,6 +905,20 @@ function getPayment(script, scriptType, partialSig) {
   }
   return payment;
 }
+function getPsigsFromInputFinalScripts(input) {
+  const scriptItems = !input.finalScriptSig
+    ? []
+    : bscript.decompile(input.finalScriptSig) || [];
+  const witnessItems = !input.finalScriptWitness
+    ? []
+    : bscript.decompile(input.finalScriptWitness) || [];
+  return scriptItems
+    .concat(witnessItems)
+    .filter(item => {
+      return Buffer.isBuffer(item) && bscript.isCanonicalScriptSignature(item);
+    })
+    .map(sig => ({ signature: sig }));
+}
 function getScriptFromInput(inputIndex, input, cache) {
   const unsignedTx = cache.__TX;
   const res = {
diff --git a/test/psbt.js b/test/psbt.js
index b670a99..467e426 100644
--- a/test/psbt.js
+++ b/test/psbt.js
@@ -625,6 +625,9 @@ describe(`Psbt`, () => {
     }, new RegExp('Can not modify transaction, signatures exist.'))
     psbt.validateSignaturesOfInput(0)
     psbt.finalizeAllInputs()
+    assert.throws(() => {
+      psbt.setVersion(3)
+    }, new RegExp('Can not modify transaction, signatures exist.'))
     assert.strictEqual(
       psbt.extractTransaction().toHex(),
       '02000000013ebc8203037dda39d482bf41ff3be955996c50d9d4f7cfc3d2097a694a7' +
diff --git a/ts_src/psbt.ts b/ts_src/psbt.ts
index 83e9dee..eb09155 100644
--- a/ts_src/psbt.ts
+++ b/ts_src/psbt.ts
@@ -795,8 +795,14 @@ function checkFees(psbt: Psbt, cache: PsbtCache, opts: PsbtOpts): void {
 function checkInputsForPartialSig(inputs: PsbtInput[], action: string): void {
   inputs.forEach(input => {
     let throws = false;
-    if ((input.partialSig || []).length === 0) return;
-    input.partialSig!.forEach(pSig => {
+    let pSigs: PartialSig[] = [];
+    if ((input.partialSig || []).length === 0) {
+      if (!input.finalScriptSig && !input.finalScriptWitness) return;
+      pSigs = getPsigsFromInputFinalScripts(input);
+    } else {
+      pSigs = input.partialSig!;
+    }
+    pSigs.forEach(pSig => {
       const { hashType } = bscript.signature.decode(pSig.signature);
       const whitelist: string[] = [];
       const isAnyoneCanPay = hashType & Transaction.SIGHASH_ANYONECANPAY;
@@ -1121,6 +1127,21 @@ function getPayment(
   return payment!;
 }
 
+function getPsigsFromInputFinalScripts(input: PsbtInput): PartialSig[] {
+  const scriptItems = !input.finalScriptSig
+    ? []
+    : bscript.decompile(input.finalScriptSig) || [];
+  const witnessItems = !input.finalScriptWitness
+    ? []
+    : bscript.decompile(input.finalScriptWitness) || [];
+  return scriptItems
+    .concat(witnessItems)
+    .filter(item => {
+      return Buffer.isBuffer(item) && bscript.isCanonicalScriptSignature(item);
+    })
+    .map(sig => ({ signature: sig })) as PartialSig[];
+}
+
 interface GetScriptReturn {
   script: Buffer | null;
   isSegwit: boolean;