Key takeaways
HCPCS code J3395 described injection, verteporfin, 15 mg, which was one full Visudyne vial per unit. It was deleted effective January 1, 2005.
J3396, injection, verteporfin, 0.1 mg, replaced it one-for-one on the same date and is still the active, payable code today.
The crosswalk is confirmed, not uncertain. CMS names J3396 in the Medicare Claims Processing Manual, chapter 32, section 300.1.
Do not fall back to J3490 for verteporfin. An unclassified-drug code is for drugs with no specific J-code, and verteporfin has one.
The unit changed from 15 mg to 0.1 mg. A 1.7 m² patient dosed at 6 mg/m² takes 102 units of J3396, plus 48 discarded units on a JW line.
Pabau’s claims management software pre-fills each claim from the patient record and tracks its status after submission. A rejected drug line then surfaces in days.
HCPCS code J3395 covered injection, verteporfin, 15 mg, and it has not been payable since January 1, 2005. J3396, injection, verteporfin, 0.1 mg, replaced it on the same date and remains the active code. That single swap is the whole crosswalk.
The unit is what trips billers up. J3395 counted whole 15 mg vials, so the quantity field usually read 1. J3396 counts tenths of a milligram, so the same treatment now reads in the hundreds.
Fix both fields together and the line pays. What follows works through the crosswalk, the unit math, the wastage modifiers, and the diagnosis Medicare requires.
What HCPCS code J3395 described before CMS deleted it
HCPCS code J3395 was a Level II drug J-code for injection, verteporfin, 15 mg. Verteporfin is sold as Visudyne, a photosensitizing agent given intravenously before laser activation in photodynamic therapy (PDT).
One unit of J3395 equalled one 15 mg vial, which made the code a per-vial charge rather than a per-milligram one.
Submit J3395 today and the line comes back with claim adjustment reason code 181, procedure code was invalid on the date of service. That is not a medical necessity problem, so appealing it wastes a cycle.
The fix is a corrected claim carrying J3396 and a corrected unit count. Both fields have to move together, which is where the next two sections go.
J3396 replaced J3395 on January 1, 2005
The crosswalk is a straight one-for-one swap, and it is documented rather than inferred. CMS retired J3395 and added J3396 in the same annual HCPCS update, effective January 1, 2005.
Payers published the pairing at the time. North Carolina Medicaid’s February 2005 provider bulletin lists the old code, the new code, and both units side by side.
CMS still names J3396 in its own billing instructions, which settles the question for anyone weighing up coding sources. Chapter 32, section 300.1 of the Medicare Claims Processing Manual lists the applicable codes for ocular photodynamic therapy with verteporfin.
The drug code it gives is J3396. That language was last set by Transmittal 2728 and has not been superseded.
Pro Tip
Do not route verteporfin to J3490, unclassified drugs. J3490 exists for drugs that have no specific J-code, and verteporfin has had one since 2005. Billing J3490 here invites an invoice request, a manual price review, and a slower payment than J3396 would have produced on its own.
The 15 mg to 0.1 mg unit change is where old claims break
Swapping J3395 for J3396 is the easy half of the job. The unit is the half that costs money, because the quantity field means something different under each code. One unit of J3396 is 0.1 mg of drug, so the figure on the line is the dose in milligrams multiplied by ten.
Visudyne is dosed at 6 mg/m² of body surface area, per the FDA prescribing information. For a patient with a BSA of 1.7 m², that is 10.2 mg. At 0.1 mg per unit, the administered quantity is 102 units of J3396.
Carry over the old quantity of 1 and you bill 0.1 mg for a 10.2 mg infusion.
The last column is where the unclaimed money sits. Visudyne ships as a single-dose vial holding 15 mg of lyophilized drug, which is 150 units of J3396.
No standard adult dose uses the whole vial, so every session produces a discarded remainder.
Under J3395 that remainder was invisible, because the billable unit was the vial itself. Under J3396 it is reportable.
Since January 1, 2017, Medicare requires the JW modifier on a separate line for the discarded amount from a single-dose container. Since July 1, 2023, the JZ modifier attests that nothing was discarded, and contractors began editing for both in October 2023.
For the 1.7 m² example, the claim carries two drug lines. J3396 takes 102 units, and J3396 with JW takes the 48 discarded units. A single 102-unit line with neither modifier reads as an incomplete claim.
The split below shows how much of each vial goes down the JW line.

Pro Tip
Never put JW and JZ on the same drug for the same date of service. JW reports a discarded amount, JZ attests there was none, so one of the two is always wrong. Reconstituted Visudyne must be used within four hours, which means the remainder is genuine waste and JW is the modifier you want.
Verteporfin stays inert until the laser reaches it
Verteporfin is a benzoporphyrin derivative that absorbs light at 689 nm. It is inert until a laser reaches it. Once activated inside abnormal choroidal vessels, it produces a localized cytotoxic effect that closes those vessels while sparing the retina around them.
Knowing the sequence matters for billing, because the drug and the light are two separate charges on the same claim. The FDA label sets out the steps precisely.
- Reconstitution: Each 15 mg vial takes 7 mL of sterile water, yielding 7.5 mL at 2 mg/mL
- Dilution: The calculated dose is diluted with 5% dextrose to a total volume of 30 mL
- Infusion: Given intravenously over 10 minutes at 3 mL per minute, through a syringe pump and in-line filter
- Light delivery: 689 nm laser, 50 J/cm² at 600 mW/cm², over 83 seconds, starting 15 minutes after the infusion begins
- Stability: Reconstituted drug must be protected from light and used within four hours
- Retreatment: Re-evaluate at three months and repeat if fluorescein angiography still shows leakage
The FDA label covers predominantly classic subfoveal CNV from age-related macular degeneration, pathologic myopia, or presumed ocular histoplasmosis. Medicare does not follow that list exactly, and the difference decides whether the claim pays.
Medicare coverage sits in NCD 80.3.1, not in the FDA label
Two national coverage determinations govern this service. NCD 80.2.1 covers ocular photodynamic therapy as a procedure, and NCD 80.3.1 covers verteporfin as a drug.
The current version of NCD 80.3.1 took effect April 3, 2013. Verteporfin is covered only alongside OPT and only when given intravenously incident to a physician’s service.
National coverage is broader than the classic-lesion rule many billers still work from. It is also narrower than the FDA label. Two of the three label indications are not nationally covered at all.
Read the middle two rows carefully before you write off an occult or minimally classic lesion. Both are nationally covered, but only when the lesion is small and progressing.
Check the current text of NCD 80.3.1 and your MAC’s LCD before each course of treatment, since coverage policy changes independently of the code set.
Payment for the drug itself runs off the Average Sales Price plus a 6% add-on, which CMS republishes quarterly. Pull the current rate from the quarterly ASP drug pricing file rather than quoting a figure from last year’s fee schedule.
Coverage criteria billers should document
- Lesion type, recorded as predominantly classic, minimally classic, or occult with no classic component
- Fundus fluorescein angiography at the initial visit, establishing lesion type and location
- Greatest linear dimension of the lesion, and disk-area size for occult or minimally classic lesions
- Evidence of progression in the prior three months, where the lesion is occult or minimally classic
- Baseline best-corrected visual acuity
- Physician attestation that the indication matches national or local coverage policy
ICD-10 codes that carry medical necessity for J3396
Exudative age-related macular degeneration, coded H35.32-, is the diagnosis CMS names as covered. Chapter 32, section 300.2 is unusually blunt about the rest, listing the codes that defeat coverage as well as the one that supports it.
Get this field wrong and the payer returns a diagnosis-based denial, which follows a different appeal path from a coding error.
Two mechanical points about that table are worth a second look. First, H35.32 and H35.31 are categories rather than billable codes, so the claim needs a full six-character version with laterality and stage.
Expand it against the current ICD-10-CM code set before the claim goes out. Second, a diagnosis mismatch returns claim adjustment reason code B22, an adjustment based on the diagnosis, rather than an invalid-code rejection.
The code on the claim has to match the angiogram in the chart.
CPT 67221 pays for the light, J3396 pays for the drug
A verteporfin session generates two charges, and the pairing rule is stricter than most drug claims. CMS requires the OPT procedure and the drug on the same claim for the same date of service.
Split them across two claims and both halves stall.
The 67221 descriptor includes the intravenous infusion, so a separate infusion administration code on top of it is a duplicate charge. The imaging rule is more forgiving than billers expect.
From April 3, 2013, CMS accepts either an FA or an OCT before a follow-up treatment. Neither study has to be attached to the claim, and both stay in the patient’s file for audit.
What the chart and the claim need before you submit
Billing verteporfin correctly comes down to unit arithmetic, a matching diagnosis, and a chart that shows the lesion.
Getting all three right the first time avoids a resubmission cycle that can run two months or more. Start with the chart, since the claim is built from it.
- Body surface area calculation and the resulting dose in milligrams
- Units administered, and units discarded on a separate JW line
- NDC and lot number for the vial used, with NDC 24208-560 covering the 15 mg Visudyne vial
- Date and time the infusion started, and the time the laser was applied
- Laser parameters, at 689 nm and 50 J/cm² over 83 seconds
- Pre-treatment FA images with interpretation, plus lesion type and greatest linear dimension
- Signed physician order naming the covered indication
- Prior authorization number, where the payer requires one
A charge slip that already carries the lot number, NDC, calculated dose and unit count keeps the coder from rebuilding the session from memory. Put those fields in the PDT template rather than filling them in afterwards.
How the claim goes out for a 1.7 m² patient
The session produces one claim with three lines, all on the same date of service. Line one is 67221 for the photodynamic therapy, pointed at the H35.3211 diagnosis. Line two is J3396 with 102 units for the 10.2 mg given. Line three repeats J3396 with the JW modifier and 48 units for the remainder left in the vial.
If the second eye was treated in the same session, +67225 joins line one instead of a second drug line. One infusion covers both eyes, so the drug units do not change.
From there the whole session travels to the payer as one claim. Splitting the drug onto its own claim breaks the pairing rule and stalls both halves.
The last check before you submit
- Code field: J3396, with J3395 removed from the charge template so nobody picks it again
- Quantity field: the dose in tenths of a milligram, so 102 rather than 1
- Modifier field: JW on the wastage line, or JZ on the drug line when the vial was fully used
- Diagnosis pointer: a six-character H35.32- code that matches the angiogram
- Claim level: 67221 and both J3396 lines on one claim, one date of service
What to do if J3395 is still in your charge master
A code deleted in 2005 survives in a charge master because nobody has had a reason to look. Verteporfin PDT is a low-volume service now that anti-VEGF injections dominate wet AMD care, so the dead line can sit untouched for years.
Six steps clear it:
- Search the drug file for J3395 and for any verteporfin or Visudyne entry, since the description may not carry the code you expect.
- Check whether anyone has been routing verteporfin to J3490 as a workaround, and close that path once J3396 is live.
- Replace the code with J3396 and change the unit definition from 15 mg to 0.1 mg in the same edit.
- Reset the default quantity. Any template still holding 1 unit will underbill by 150 times once the code is correct.
- Add a JW wastage line to the PDT charge template, so the discarded remainder is captured at the point of service.
- Pull a remittance report for the last twelve months and count the J3395 rejections. Rebill every line still inside your payer’s timely filing window.
Denial management works better before submission than after the remittance arrives. If J3395 was in the file, treat it as a prompt to check every other drug code sitting alongside it.
Six errors that stall verteporfin claims
- Billing J3395. The line rejects as an invalid code for the date of service. Correct to J3396 rather than appealing.
- Carrying the old vial quantity. One unit of J3396 is 0.1 mg, so the claim pays for a fraction of the dose given.
- Defaulting to J3490. Unclassified-drug codes trigger invoice review, and verteporfin does not need one.
- Omitting JW and JZ. Single-dose container claims without either modifier have been editable since October 2023.
- Submitting H35.30 or H35.31. Both are named as denials. Only exudative AMD, H35.32-, supports national coverage.
- Billing an infusion code with 67221. The intravenous infusion is already inside the 67221 descriptor.
How Pabau tightens the loop on a verteporfin claim
The J3395 problem is rarely a knowledge problem. A biller who reads the descriptor knows the code is dead. What slows the fix down is the feedback loop. The charge master sits in one system and the claim in another, so a rejection only surfaces when the remittance arrives weeks later.
Practices using Pabau, an all-in-one practice management system, work from one record instead. Our medical claims management software pre-fills each claim from the patient record, so a coder edits a populated form rather than retyping the encounter.
Pabau validates the required fields before the Send button unlocks, so a claim cannot leave without its authorization or membership number.
Submission runs through the clearinghouse for your region, which is Claim.MD in the US. From there the claim’s status is tracked live, so a rejected verteporfin line shows up in days rather than at month end.
For a low-volume, high-value drug, that speed matters more than it would across a busy injection list.

Catch a rejected drug line in days
Pabau pre-fills each claim from the patient record, validates the required fields before submission, and tracks claim status once it goes out. See how ophthalmology billing teams work it.
Conclusion
A code deleted in 2005 stays a problem only while nobody opens the drug file. Once someone does, the repair takes minutes. J3396 goes in the code field, 0.1 mg becomes the unit, and the default quantity gets cleared.
Pabau’s claims management software pre-fills each claim from the record and tracks its status after submission, so a stalled drug line surfaces in days.
Book a demo to see how ophthalmology billing teams handle J-code claims in Pabau.
Continue your research
Need to understand how HCPCS codes fit into the wider billing picture? What is medical billing covers the full claims lifecycle from charge capture to payment posting.
Want to reduce denials across your entire claim set? Denial management in healthcare outlines a structured approach to tracking, appealing, and preventing recurring denials.
Looking for a complete revenue cycle overview? What is revenue cycle management explains how each billing step connects and where practices typically lose money.
Frequently asked questions
How many J3396 units go on the claim when both eyes are treated?
The same number as one eye. Verteporfin is infused into a vein, so a single 6 mg/m² dose reaches both eyes at once. Bill the calculated units one time, then add +67225 next to 67221 for the second eye.
Who bills J3396 when a specialty pharmacy supplies the Visudyne?
Whoever bought the vial. A practice that buys the drug and administers it bills J3396 alongside the procedure. Where a pharmacy supplies the vial and bills the payer directly, the practice reports the procedure code only, and the wastage stays off its claim.
Does the NDC have to appear on the verteporfin claim line?
Medicare Part B pays from the HCPCS code and the units, so it does not require the NDC on the line. Several Medicaid programs and some commercial plans do ask for it on physician-administered drugs. Check the payer’s companion guide before you submit.
Does verteporfin need prior authorization?
Traditional Medicare does not require prior authorization for this Part B drug. Medicare Advantage and commercial plans often do, and the authorization number then belongs on the claim. Confirm the requirement before the infusion rather than after the rejection.