As far as your declaration for gcamount, I think you would be OK putting it right after the for statement. You then need to remove the multiple declarations in the if statements and just have the assignment: `gcamount = o.Amount;`, etc. Also, in the first if statement, check the logical operators in your code; they should be doubled up - `&&` and `||`. Here is my modification on your for loop- `for (Opportunity o : trigger.new){ decimal gcamount; //consider setting a default value here //Is the opportunity in question have a gift certificate as one of the payment methods? //remember to double up logical operators if ((o.Pay_Method__c == 'Gift Certificate') || (o.Pay_Method__c == 'Multiple Methods' && (o.Multiple_Methods_1__c == 'Gift Certificate' || o.Multiple_Methods_2__c == 'Gift Certificate' )) && o.CreatedById !== '**********' ){ //Does the gift certifiacte code refer to a gift certificate with a if(mymap.contains(o.Gift_Certificate__c)){ //Depending on the payment method, set the gcamount //double check the logic here to make sure one of these will always be true //or add a final else statement to set value, if a default was not set in declaration if (o.Pay_Method__c == 'Gift Certificate'){ gcamount = o.Amount; } else if (o.Multiple_Methods_1__c == 'Gift Certificate'){ gcamount = o.Multiple_Methods_Amount_1__c ; } else if (o.Multiple_Methods_2__c == 'Gift Certificate'){ gcamount = o.Multiple_Methods_Amount_2__c ; } //Create New Gift Card Usage Gift_Card_Usage__c gcu = new Gift_Card_Usage__c(); gcu.Journal_Gift_Card_Usage__c = mymap.get(o.Gift_Certificate__c) ; gcu.Amount_Used__c = gcamount; //add to list lstgcusToInsert.add(gcu); *****LINE 38 - WHERE THE ERROR EXISTS***** } } }` Hope this helps