diff --git a/SMPFunction.cpp b/SMPFunction.cpp
index d876acd48aa785d1b54f459e51f5a7cbc2b645ac..699b4d88e557558a8e4adfe0746060f6a98b0986 100644
--- a/SMPFunction.cpp
+++ b/SMPFunction.cpp
@@ -89,7 +89,7 @@ using namespace std;
 #define SMP_DECLARE_INDIRECT_TARGETS_UNSAFE 1
 #define SMP_AUDIT_STACK_POINTER_DELTAS 0
 #define SMP_COMPARE_IDA_STARS_STACK_POINTER_DELTAS 1
-#define STARS_AGGRESSIVE_SIGNEDNESS_PROPAGATION 0
+#define STARS_AGGRESSIVE_SIGNEDNESS_PROPAGATION 1
 
 // Compute LVA/SSA or not? Turn it off for NICECAP demo on 31-JAN-2008
 #define SMP_COMPUTE_LVA_SSA 1
diff --git a/SMPInstr.cpp b/SMPInstr.cpp
index c3b905f04db14c8c86e21764eeb10fe831a1f118..6019786115f8674c25eb6305f609cd1174007647 100644
--- a/SMPInstr.cpp
+++ b/SMPInstr.cpp
@@ -5370,6 +5370,13 @@ bool SMPInstr::UpdateDefOpFGInfo(op_t DefOp, struct FineGrainedInfo NewFG) {
 		// Get old FG info from function level.
 		OldFG = this->BasicBlock->GetFunc()->GetDefFGInfo(DefHashValue);
 	}
+
+	// Get rid of stack access bits being passed around in InferOperatorFGInfo()
+	//  for register operands in RTLs.
+	if (o_reg == DefOp.type) {
+		NewFG.SignMiscInfo &= FG_MASK_SIGNEDNESS_BITS;
+	}
+
 	UnionFG.SignMiscInfo = OldFG.SignMiscInfo | NewFG.SignMiscInfo;
 	UnionFG.SizeInfo = OldFG.SizeInfo | NewFG.SizeInfo;
 	if ((OldFG.SignMiscInfo != UnionFG.SignMiscInfo) || (OldFG.SizeInfo != UnionFG.SizeInfo)) {
@@ -5403,6 +5410,13 @@ bool SMPInstr::UpdateUseOpFGInfo(op_t UseOp, struct FineGrainedInfo NewFG) {
 		// Get old FG info from function level.
 		OldFG = this->BasicBlock->GetFunc()->GetUseFGInfo(UseHashValue);
 	}
+
+	// Get rid of stack access bits being passed around in InferOperatorFGInfo()
+	//  for register operands in RTLs.
+	if (o_reg == UseOp.type) {
+		NewFG.SignMiscInfo &= FG_MASK_SIGNEDNESS_BITS;
+	}
+
 	UnionFG.SignMiscInfo = OldFG.SignMiscInfo | NewFG.SignMiscInfo;
 	UnionFG.SizeInfo = OldFG.SizeInfo | NewFG.SizeInfo;
 	if ((OldFG.SignMiscInfo != UnionFG.SignMiscInfo) || (OldFG.SizeInfo != UnionFG.SizeInfo)) {