This page contains answers to common questions handled by our support staff, along with some tips and tricks that we have found useful and presented here as questions.


What's the difference between the 'evaluation' software and the licensed software?

It's the same software, with one change--you are able to use newly released tax tables. With the evaluation version, you can only work with specially unlocked tables.

How long have you been in business?

Since 1996. We are financially solid, with very little debt and a diverse base of customers. Also, for extra security for your company, we offer language in our contract allowing you source escrow service if you desire.

What does your product do that others don't?

TaxControls software handles 'multiversioned' tables at year-end, which means that you can install the new year's tables before January 1, without having to worrying about "jumping the gun" with the new formulas. The software automatically chooses the correct tax version based on pay date.

We also offer the ability to "suggest" applicable taxes for withholding, based on ZIP code. This allows you to offer easier setup of new employees in your payroll appication. If your application requires more precise tax setup, we also offer a web service which provides suggested applicable taxes based on the employee's workplace and resident addresses.

With TaxControls, the developer can now include custom tax tables with the application. This gives you complete control over the tables--you can provide additional withholding formulas, or override those from the Tax Update subscription file. These custom tables are not overwritten by new subscription data, and have all the same properties and methods as the "standard" tables included with subscriptions.

Do you cover all the states?

Yes. We cover all states which have income tax withholding, as well as the U.S. Virgin Islands.

For local taxes, the Level 1 Subscription includes all states except Ohio and Pennsylvania (which are covered by generic city and school district formulas). Because these states carry an excessive number of local taxes, they require much more overhead to monitor and update. Since most customers do not require this level of detail for these two states, we offer them as an add-on product (a Level 2 Subscription). Most customers will only need the generic local tables for Ohio and Pennsylvania, which are included in the base subscription.

For customers who would like just a few specific local tables for either of these states, they may be added and maintained manually by the customer. This option derives from the TaxControls "Custom Tax" feature, which gives you the ability to add custom tax formulas which augment or modify the subscription tax files. This feature could be used to include a handful of local taxes for Pennsylvania or Ohio, without the additional cost of the Level 2 Subscription.

Do you handle reciprocity?

Yes. Calls to the TaxNamesForZip method or the TaxQuery Docker container returns the proper taxes to be withheld or employer-paid. Reciprocity agreements are taken into account when TaxControls generates this list.


When a subscription expires, does the software stop working?

No. The software will continue to work as before. However, it will not be able to read tax tables relased after the expiration date. Any table than was released while the subscription was valid will still work after expiration.

What if I download new data without a subscription?

If you don't have a subscription, you will not be able to use new tax table files. If you download a new table anyway, you will most likely cause your application to stop working.


How often are tables updated?

Tables are updated throughout the year, with the majority of changes occuring in December through January. We usually get a dozen or fewer changes during the remaining months. When a change occurs, we notify you by email describing the update. If it is a tax which does not affect you (or your customers), you may choose to ignore the update.

How do I know when the new year's changes are finished, so I can send out the update to my customers?

Unfortunately, there is no way to be certain. Some state legislatures delay decisions on new rates until late December or even January. There is no way to predict when or if changes will occur. You must decide on your own deadline for distribution, then possibly issue an update in January if major changes occur after your deadline.

Do my customers have to wait until January 1 before installing the new year's tables?

No. We issue 'multiversioned' tables during December (and sometimes May or June), which allow both new and old formulas to be calculated. The software chooses the correct formula version based on the pay date. Just make sure you're using the latest version of the software, and set the 'PayDate' property to the payroll check date.

Can I put the tax tables on my web site so my customers can download their updates?

Yes, as long as your restrict access to your customers only.


How much does it cost?

A one-year Level 1 Subscription is $4995 (or $1375/quarter or $500/month). This entitles you to royalty-free use of the software and data on all company- or customer-owned PC's. There is a one-time fee of $299 for the required software component.

A Level 2 Subscription is available which includes all the specific Ohio and Pennsylvania local taxes, as well as all formulas included in the Level 1 Subscription. These local tables involve thousands of jurisdictions, and much higher overhead for monitoring and updating. A one-year Level 2 Subscription is $9990 (or $2750/quarter or $1000/month).

Can I pay monthly/quarterly?

Monthly payments for a Level 1 Subscription are $500. Quarterly payments are $1375.


How can I get a list of all available taxes?

Here's a sample in Visual Basic:

 Sub ListTaxes
 Dim ct as New CTaxControl
 Dim otax as tax
 ct.DataFilename = "c:\"
 For each otax in ct.Taxes
 ' skip over 'hidden' taxes:
 If otax.TaxType <> "P" then
 Debug.print otax.Name & ", " & otax.TaxType
 End If
 End Sub

For more information, see the tutorial


How do I compute Social Security and Medicare withholding/employer match?

There are two methods:

  • Select 'FICA SS' and 'FICA Med' for the employee withholding, then 'FICA SS employer' and 'FICA Med employer' for the employer portion. This is the recommended method as it breaks out the details for each portion of the tax.
  • Select 'FICA' for the employee withholding (which internally combines 'FICA SS' and 'FICA Med'), then 'FICA employer' for the employer portion (which combines the two employer formulas.

Note also that starting in 2013, the Medicare formulas will need YTDEarnings figures in order to calculate correctly.

What are the 'taxtypes'?

There are five types:

  • 'F' - Federal taxes
  • 'S' - State taxes
  • 'L' - Local taxes
  • 'O' - Other taxes (mostly unemployment and disability)
  • 'P' - Private formulas, used internally (e.g., for computing taxable income)

Are the wage base amounts available?

Yes. Here's sample .NET code to get the FICA Wage Base:

 using TaxControls;
 using System;
 public class Test{
 public static void Main(){
 CTaxControl tc = new CTaxControl();
 try {
 tc.DataFilename = "us.dat";
 tc.PayPeriodsPerYear = 1;
 tc.SelectedTax = "FICA Wage Base";
 } catch (TaxControlException e){
 Console.WriteLine("oops" + e);

For state unemployment wage bases, set the SelectedTax name to 'XX Wage Base', where XX is the state abbreviation.

Can I get the tax bracket?

Sure. Just substitute the TaxBracket method where you'd normally call TaxAmount.

How do I determine which tax names to use?

The easiest approach is using the TaxNamesForZip() method, which requires only workplace and residence ZIP codes. However, ZIP codes seldom align with tax jurisdiction boundaries. This means that for local taxes, this method may return some tax names which don't apply for a specific address.

For a more precise and accurate approach, we recommend that you use the TaxQuery Docker container. This gives you tax jurisdictions based on the employee's workplace and residence addresses.

My TaxControls component is taking too long to do the calculations. What's wrong?

The only real bottleneck which is likely to slow down your component would be loading the tables from disk multiple times. Once you've created a TaxControls component and loaded the data, you should take care to leave that object "alive".

We recommend that you use the "TaxAmount" method rather than the "ComputeTax" method unless absolutely necessary. The "ComputeTax" method loads the tax table from the file on each call, and is intended for environments which require a single function call for calculations.