only compile if needed