The ALL Florida Online Corvette Club

Ebates Coupons and Cash Back

Corvette Top Sites

Go Back   The ALL Florida Online Corvette Club > General Corvette Forums > Performance Tuning

      Photo Gallery Screen Saver!      

Performance Tuning Beginner and advanced tuning | Tools of the trade

Thread Tools Display Modes
Unread 03-30-2013, 02:16 AM   #1
Rich Z
Internet Sanitation Engineer
Rich Z's Avatar
Join Date: Mar 2006
Location: Crawfordville, FL
Posts: 13,626
Name : Rich Zuchowski
Rich Z will become famous soon enoughRich Z will become famous soon enough
Default What makes a good tune?

When is a tune a good tune?

There are a lot of different factors that make up a good tune, most people concentrate solely on the easiest part of the tune and the bit that can be talked about down the pub; POWER, but there is a lot more involved than just the outright power.

WOT tuning

Wide Open Throttle tuning is the part that is most often talked about and what the average person sees as the outcome of any tune, but in reality this is only a small part of what goes into doing a good tune.

Take the graph shown here, below, both tunes are making 267kw @ wheels peak power, but the important difference is that tune B is making more power on average than tune A due to the tuner spending more time optimizing the tune at every WOT load point to get the best fueling and spark timing outcome, rather than just chasing the peak output number. In reality tune B will be a nicer car to drive, have more low down power and ultimately will be quicker down the quarter since it has more usable power in the area the vehicle spends most of it time.

Fuel tuning

In the case of the above vehicles (which are the same vehicle but with 2 different tunes in it) there are a total of 380 tunable load points just in the fuel mapping. During the WOT tuning part of the session only 20 of these are accessed to achieve a good WOT tune, leaving 360 other points that still need to be calibrated for optimum performance, economy and that's just on the fuel matrix. Each of these load points has to be optimized to give the correct amount of fueling for a balance of power, durability and most of all economy.The beauty of a good EFI system in that you can have the best of both worlds in the one package.

All too often we see a car come in that has been tuned and the operator has relied on the Fuel trims to fix the fueling rather than spending the time to get it right.

Fuel trims

The fuel trims in the computer are there to compensate for minor differences in the factory calibrations and as the engine wears, they are not designed as a band-aid tuning tool that allows you to forget about getting your Volumetric Efficiency tables right, to achieve good fuel economy and drivability it is very important to get this so the fuel trims are less than 2% everywhere, if the engine has to compensate too much for inaccurate tuning it will overcompensate and use more fuel in a effort to keep the engine safe.

A little know fact is that these fuel trims are carried over into WOT as the designers of the system decided that if the engine thought it had incorrect fueling via the trims it then carries these over into the WOT fueling strategy to safeguard the motor, this has been one of the things that has fueled the myth that the engine needs to learn the mods that have been done - basically the PCM sees an error has occurred and tries to correct the error, in a modified car tuned properly this doesn't happen.

Spark Timing

One area we see a lot of damage occurring is in the amount of spark timing that has been put into tunes with the mistaken belief that more is better. this is especially dangerous in a supercharged application.

In the old days a carby Chev and Ford V8's required a total timing of 38 deg to get efficient combustion, nowadays with efficient combustion chamber design and lean burn combustion less is best. The more efficient the combustion process is, the less ignition advance that is required to propagate combustion effectively, the modern V8 requires approx only 20 deg of timing at WOT to get maximum power, any more than this and detonation can occur. Add a cam into the equation and cylinder efficiency drops off at low rpm and more timing can be accepted by the engine.

Some tuners believe that it is alright to run more timing as the knock sensor will reduce timing to take this into account, this is very dangerous practice as the knock sensor is a reactive device rather than a predictive device so for it to sense knock it actually has to see knock which in any motor is a bad thing.

The newer design engines have safety feature built in such as dual spark tables so if any knock occurs due to poor quality fuel, it will lower the spark timing by a percentage to the low octane spark table so the engine will not knock next time it comes into this load are.Unfortunately a few tuners remove this feature when tuning in Speed density mode as it requires a custom operating system which cost them money to buy for each engine , leaving the engine with no form of protection if poor quality fuel is experienced.

As with the fuel tables there is a full matrix of load points of the same size which only 20 of these are played with during a WOT tune the other 300+ load sites need to be addressed to gain optimum control.

Even at part throttle the timing curve is very important, too much timing and power is lost trying to drive the piston up against the combustion explosion ( even more timing and detonation results), too little timing and engine efficiency is compromised causing poor fuel economy. The timing map requires very precise control for optimum performance and economy, being out by as little as 2 deg can have a huge effect on power, economy and engine durability

Cold start

One of the most important parts of the tune for long term engine life and economy is the cold start strategy, it is also one of the hardest areas to address properly as the tuner can only have about 1 min to log what is happening and make changes accordingly, with a cammed car this process takes days to get right - remember to give your tuner the car for a few days to get these issues sorted. When the factory did the original tune it took a team of tuners months to get a acceptable cold start routine in place, change the engine in any way and this whole area needs a complete retune to suit. Unfortunately harsh economic reality dictates that most tuners will ignore this area as the engine doesn't operate here for long but it will have a big effect on the day to day economy of the vehicle.

Deceleration fuel cut off

This is another very important area where a good tuner can make some significant fuel savings by customizing when, and by how much the fueling is cut during overrun. Too much too early and the engine will stumble when you back off, too little too late and fuel is wasted out the exhaust pipe.

Transient fueling

This is also a important area that can make or break a good tune, all too often we see modified cars that have had no changes at all made to these area's as it isn't part of the big horsepower number but all these points must be addressed to get the car running to its potential. Acceleration enrichment needs to be finely tuned to suit the characteristics of the engine to achieve maximum performance and economy on the road at all times.

Idle strategy

Another very important part of the tuning process that gets overlooked, this is critical to get the transition from idle to part throttle right to help eliminate stumbles, having the idle parameters right can take a considerable amount of the tuning time to get right but without this the car will be a pig to drive, add a big cam into the mix and it gets harder to satisfy all these requirements as the engine becomes more inefficient at low rpm, to the point it will not like running at all below a certain rpm, careful tuning can help eliminate these issue to a degree.

Compensation factors

The PCM has a myriad of compensation factors to allow for changes in temperature and air density, these all need careful setting up to ensure efficient and safe operation under all conditions, just a small change like a tune done on a 20 deg day then not compensated for on a 40 deg day can have devastating effects.

These are just some of the engine parameters that need to be looked at during a tune, in total there are over 4000 programmable tables in most late model computers. It takes a very good understanding of how each interacts with each other to obtain a good tune.

We haven't even touched on the huge area of auto trans tuning control that must be addressed in a car equipped with a auto trans or the finer points of a tune but only the basics in this article.

What most people fail to realize is that when the factory do their initial tune it is a process that takes a team of engineers months to create a workable tune. Change one little part of the engine such as the exhaust and a huge amount of work is required to get all parts of the tune operating correctly. Getting the WOT part of the tune right is easy and all that most novices ever address, sure the car will still run ok but not to its full potential and it can be left in a dangerous state given the right conditions. The classic example is with the shortage of premium fuel recently, some tunes had been done without the protection of dual spark and knock sensing capability, instantly the owners of these cars where having huge issues and in a couple of cases engine failure resulted.

The only advice I can recommend to anyone contemplating a tune on any car is to seek out a qualified tuner that has been educated on engine management systems and how has years of experience before they start practicing on your pride and joy. The computer is the heart of your engine would you go to your local GP for heart surgery or would you entrust the job to a specialist heart surgeon?
Rich Z is offline   Reply With Quote
Unread 04-11-2013, 03:02 PM   #2
Rich Z
Internet Sanitation Engineer
Rich Z's Avatar
Join Date: Mar 2006
Location: Crawfordville, FL
Posts: 13,626
Name : Rich Zuchowski
Rich Z will become famous soon enoughRich Z will become famous soon enough

In reference to this topic, I think I learned a tip about determining whether or not you got a reasonably good driveability tune on your car. Disconnect the battery. Let it set for a little while, then hook it back up again. Start your car. If it idles rough as hell and then straightens itself out when it warms up, your tuner didn't really tackle the air fuel ratios properly in the relevant tables of your PCM. What is going on is that the AFRs are actually screwed up, but your short term and long term fuel trims are compensating for the bad tune. Quite likely he didn't disable the trims while doing the tune at all, nor look at the logs to monitor what the trims were doing. The fuel trims are designed to make modest modifications to the AFR to compensate for environmental factors that will change throughout the seasons, elevation, and wear of engine components, not be a bandaid for the air fuel ratio being way out of whack.

When you disconnect the battery, you reset all the fuel trims to zero, so when you then start your car, it is running off of the table values that provide the actual AFR until the widebands begin to operate to provide feedback for those fuel trim values to try to get an optimum burn ratio.

Your car SHOULD start up and run fine, just like a stock car should right off the bat after the battery has been disconnected. If it doesn't them something is wrong in the tune.

After Chris Harwood tuned my car, I noticed that exact situation whenever I disconnected my battery, but really didn't know what it meant.

Of course, this is completely my opinion, and subject to change if I learn new facts that make me think otherwise.....
Rich Z is offline   Reply With Quote
Unread 06-22-2013, 12:38 AM   #3
Rich Z
Internet Sanitation Engineer
Rich Z's Avatar
Join Date: Mar 2006
Location: Crawfordville, FL
Posts: 13,626
Name : Rich Zuchowski
Rich Z will become famous soon enoughRich Z will become famous soon enough

Tuning Methodology

Someone brought it up on the forums, and it's a good thing, so I'm reposting it for the sake of completeness on my site.

1. Try to keep tuning sessions as close to repeatable as possible, same gas, same route, same time (like driving to/from work) work great. This way you get approximately the same amount of samples in the same temperature range. If the weather is particularly extreme (super hot, extra humid) take a note of it, expect your values to skew one way.

2. Long steady inputs--I can't stress this enough, this is #1 reason why most people never get their numbers straight. If you get on the throttle--hold it. If you get off throttle, don't half-ass, lift completely--this way it's easy to filter unwanted (transients/not steady airflow) cells. In HPTuners, there's now way to ask for a derivative of anything, so there's no way to know if you're accelerating or decelerating. EFILive has 'filter out if value changed more than X %' capability

3. Warm up the WHOLE car, don't just look at the coolant temperature. Fuel warms up too. If you don't believe me, go scan for a while, and then go fill up with new fuel, and continue scanning, I promise you your trims are gonna go nuts. Fuel temperature affects atomization, which affects how complete is the burn, which affects the resulting AFR. The rule of thumb here is 15 minutes of normal driving before you log for VE.

4. No lugging it in tall gears (5-6th). Laziness gets the best of you, and you end up tooling around at 1500rpm in 6th, give it more gas, it knocks. While it's not a real dangerous knock, but it will show up in your logs, and you might end up pulling timing where you really didn't need it. Avoid doing it in general, not just for tuning, if you need to accelerate, downshift.

5. Be creative -- use the environment. Hills are GREAT for getting the more extreme cells. how else you're gonna get these 20kPa at 4000rpm cells without decelerating? (you can always use a real dyno, like Dyno Dynamics)

6. Be observant, learn the ways of your car. There are things that are particular to every car, and the most seasoned tuner won't notice them, simply because they don't have the milage on your car you do. Use it to your advantage. My car, for example, has random knock 1600-2000 rpm; it's just tight suspension on lousy roads, making things rattle and set of knock sensors. If you give it more throttle and it binds up, then there's no knock, but driving gently makes it rattle. Pure 100octane and lame timing won't cure it either.

7. Organize, label, and take notes on your logs. Temp/pressure/humidity/terrain often explain a lot of goofyness in the logs. once I was chasing what I thought was an intake leak, but it turned out to be that the guy lived in some serious hills. During a 20 minute commute between work and home, his WOT MAP would drop from 100kPa to 93kPa max. I didn't know that, he didn't tell me. It took us a while to sort it out.

8. Tuning is science--don't ever forget about that. Repeatability, changing one thing at the time, taking notes, not falling into routine or assumptions, all these boring things psychotic science teachers tried to drill into your heads in high school--they weren't cool, but they were right, so deal with it.

9. Keep your hardware fresh and clean. If you see AFR scatter more than usual, check your filters. If you see MAP not getting up to where it used to be in the same conditions as before--your cat might be clogged up. If you installed headers and you're tuning for them and it's starting to converge on some new numbers but then out of nowhere they go crazy on you--retorque header bolts, something might have gotten loose after few heat cycles, etc.
Rich Z is offline   Reply With Quote
Unread 06-22-2013, 12:48 AM   #4
Rich Z
Internet Sanitation Engineer
Rich Z's Avatar
Join Date: Mar 2006
Location: Crawfordville, FL
Posts: 13,626
Name : Rich Zuchowski
Rich Z will become famous soon enoughRich Z will become famous soon enough

Unscrewing a Bad Tune

This is something I keep happening time over time: you build up your car, you get a mail tune, or a dyno tune done by some hack, and you hate how the car drives and performs, so you save your pennies, get yourself a tuning package, and you try to do it all yourself. This is exactly how I started, and back then there was little in terms of writeups. These days the problem is that there's too many writeups, and some of them are better than others, however, as a newbie, you have no way of telling. Another big question that keeps coming up is 'What do I do first?' which is a great question, however there's no good answer to, as that depends on what's screwed up.

So this writeup is pieced together from a long collections of emails and forums posts.
  1. Set IFR to your injectors and fuel pressure. Please measure it, see if it holds fairly stable when you give it some gas, you might be able to find a weak spot or a deficiency in your fuel system.
  2. Set Primary VE to something that makes sense. Start with a known good tune for a similar camshaft, heads, and headers. It doesn't have to match perfectly, as every car is different regardless, but it will get you in a good starting position. It wont be perfect, but it should be much closer to what you need than a stock tune.
  3. If you have older car with Primary and Secondary VE tables, then do an 'adaptive copy' (just copy the relevant rows) of the new Primary VE to Secondary VE , or use to do it for you ( has a description of what does it do)
  4. Copy high and low octane spark tables from that 'good' tune into yours. If you can't find a good one, I like to start with 02+ Z06 spark tables, as they account for more compression, better flowing heads and a higher lift cam, which makes it closer to what most modded cars have.
  5. Blend in the idle areas of spark with values that start at 36* at low rpm and end at about 30-32* at your rpm/cylinder airmass.
  6. Use the same blended values in idle areas of spark in the "idle spark in gear" table. If you have an automatic, also copy it over to "idle spark in park/neutral".
  7. Copy RAF drive table over from a good known tune. Again, just like in #3, it won't be perfect, but will be closer than stock. If you dont have a well tune RAF example, up the RAF values in the usual range of ECT by about 3g/sec.
  8. Put the car in SD (MAF Fail Frequency set to 0Hz). Start it up, verify
    that it goes into SD by reading DTC's (it should throw P0103). if it doesnt, turn it off, start it again, sometimes it takes 2 or 3 starts.

At this point, you have 2 processes to go through: RAF and VE. VE has multiple ways of doing it, and of course everyone claims their to be the best, I'll show you the simplest one that should work perfect to get the initial 'daily drivability' to be really good, and can be done on any car as it uses stock oxygen sensors.

If the car doesn't die, start driving around, logging for LTFT and STFT and O2s on both banks. (default setup will do that if you're unsure of what to log, just hit 'reset' in the 'Display Table')

Again, these procedures only make sense in SD, so make sure you're truly in SD. One trick is to set the codes to set SES light upon the MAF faliure, this
way when MAF fails (aka SD takes over) you get the SES light. I refer to it by now as the SD light

Drive around in SD, let's get the daily drivability done first, so keep it under 3-4krpm (depending on gearing and powerbands) logging fuel trims.

Once you get about 25 samples per cell across the whole range you're trying to tune, stop, save the log. Then open up the VE2bar.xls I mentioned earlier, and copy and paste the appropriate tables into it. Let it do it's thing, and copy the results out of the full- and half- resolution tables, and apply them to the corresponding VE tables. On the beginning do 'paste special--% full' so it will get big changes done quickly. Once you get much closer to the target (less than 5% off) I do 'paste special--%half' so the changes are more subtle and you dont 'overshoot.'

This spreadsheet is made so once you get some values within that -4 to 0 range, it doesn't try to adjust them. The reason for it is that if you'll tune it perfectly for 0%, you'll have what I call a 'knifeedge' tune, a tune that will run rich or lean depending on atmospheric conditions, and as such, will be unpredictable. Once we're a little bit on the rich side, computer treats is as the same safe set of settings, and will not try to preemptively pull timing, like it would if some of the tune was on the lean side.

Once you get a correction done, save it to a new copy of your tune, flash it, and then reset the fuel trims (that's in the live controls section of the scanner).

Go for a 10-15 min drive. Because of the reset, the fuel trims will initially go nuts. That's good, that means it's learning aggresively, and trying to find it's new set of 'happy' settings. Stop the car, turn it off, start it up again, do NOT reset fuel trims now, just start another logging session. The second session has dual function:
  1. It verifies that the changes made sense, and they do work better
    than the previous setup.
  2. It gathers data for another iteration of the VE tuning.

If you gather enough data (it's very useful to set the 'minimal cell count' to 25 on the LTFT and STFT charts, this way nothing will show up until you get 25 samples, which guarantees a clean, consistent dataset) just start looping through the process of scan/calculate/adjust/flash/reset/ride to adjust until the fuel trims will all come back in the -4 to 0 range.

Once that's done, do RAF:
  1. Scan from full cold start to full warm. Turn off fans for this purpose to let the car warm up to ~220F. Scan for ECT and STIT.
  2. Create a custom histogram of ECT vs STIT, and display the gathered data in it.
  3. Do "Paste--Add" the resulting table to the corresponding RAF table.
  4. Wait till next time the car is fully cold, and redo the whole process again. Repeat until the STITs are <0.1g/sec> throughout the whole range.
  5. (automatics only) You get to redo the whole process again, but not in Park, but in Drive, as the RAF tables in Park/Neutral are little different.

If the car doesn't want to idle with the initial settings, you have to ballpark the VE some more. Usually you're overfueling (which is made very visible by a 'surging' idle) so cut down the idle range VE values by 10% (select the cells in question, put it 0.9 and press * to bring it down to 90% of previous values), flash, try again, until it's reasonable enough to do a real VE scan which will get the VE tables set precisely. The whole goal of this 'ballparking' is to get it close enough that it can idle on its own, thus allowing us to gather data for a proper adjustment.

If you're familiar with tuning VE with OL and WB, then you can do that instead, but it's really not much different, just few extra steps.

Rich Z is offline   Reply With Quote
Unread 06-22-2013, 01:20 AM   #5
Rich Z
Internet Sanitation Engineer
Rich Z's Avatar
Join Date: Mar 2006
Location: Crawfordville, FL
Posts: 13,626
Name : Rich Zuchowski
Rich Z will become famous soon enoughRich Z will become famous soon enough

IFR tweaking Jihad

A lot of people lately been asking me about IFR tweaking. I couldn't believe that after all these years of using VE with great results people still used the old hacks.

So these are two things I've written up to people about it. The first one is short and purposefully silly visual, the other one is more technical. I hope this will once for all put the end to all stupid IFR tweaking.

Take one:
So let's say you're mixing cement...

Your shovel can move 1 pound of cement per second to the mixer (or whatever that's called) in which you supposed to mix cement and water in 1/13 ratio. You have a hose going to the mixer that you believe delivers 13lb/sec of water. however, the hose is clogged, and you don't know about it. All you know is that your mixture despite your best effort is a bit off. So instinctively, instead of checking what's wrong with the hose, you decide to grab a bigger or smaller shovel depending if your mixture is too watery or too solid to compensate for the change in amount of water.
In the end, did you get the right mixture? yes.
Did you get the right amount of it? No!

This is exactly what IFR tweaking does to your engine. Instead of looking at the source of the problem, you just try to make up for it somewhere else.

Take Two:
All the mods you do, all they do is increase the Volumetric Efficiency (aka. be able to cram more air in, increase airflow). However, the idiot tuners, they keep the Volumetric Efficiency table (which exists exactly for this purpose) unaltered! So with more airflow and same amount of fuel, you're basically making your car run leaner, first to the point where it makes more power, but eventually it goes well into the dangerous territory.

Here's a scenario to demonstrate this in numbers:
To keep the AFR sane, you gotta tell the computer to dump more fuel. You can't do it directly, as most of this stuff is calculated dynamically or proportionally, so you just lie about the size of the injectors. This way every fueling operation is proportioned to the new 'size.'

So let's say you had 39lb/min of air coming in, and you're trying to keep a 13.0 AFR (easy numbers example) All the injectors have to deliever 39/13=3lb/min of fuel. there's 8 of them, so they flow 3/8 lb/min (0.375). Injectors are usually rated in lb/hr so this is 0.375lb/min*60 min/hr=22.5lb/hr of fuel. You don't want to operate your injectors at 100% as they will simply
overheat at one moment and stop sending fuel at all, exploding your motor.
80-85% duty cycle is the safe range in which most injectors can operate without deminished reliability. So you want 22.5/0.80=28lb/hr injectors. Oh, what do you know, that's a typical airflow and a typical injector size in a stockish but tuned LS1! See, all these numbers come from somewhere, and if you have enough equations for it, you can see it how got there.

But to get back to IFR bull****ing...
Now let's say you put some swanky exhaust/lid/intake on your car, and it flows 44lb/min of air, not 39. But if you don't touch VE table, now you're gonna get 44/39 *13=14.666AFR!!! That's very dangerously lean! So far we've been dumping up to 39lb/min relatively worth of fuel. If we say we have injectors smaller by the ratio of 44/39, it will automatically try to make the injector work harder, by commanding more pulse width. The trick the 'IFR tweakers' rely on is that the injecotrs didn't really get smaller, so now we're
commanding bigger pulse width on the same injector as before, effectly spraying more fuel!
So it does what we wanted, right? Wrong! Pulse widths don't scale linearly, so you're not really aiming for the right amount of more fuel, you just know you're spraying more than before. This of it as a sharp shooting competition but you're blindfolded and have a helper that can only tell you 'up/down' or 'left/right' while what you need is '30mm to the right and 3mm down.' You can see why the results of such tunes are so crappy.

Then you toss in a cam with a naturally steepy VE (inefficient at lower pressures, and very efficient under high pressure), and the whole IFR tweaking scheme falls apart.
IFR has only one dependent variable(MAP), VE has two (MAP, RPM). This means IFR can describe what VE could, except that it has to consider RPM to be constant. Thus when tuning with IFR, you will command the same amount of fuel whether you're at 1000rpm or 7000rpm.
big cams have VERY different flow characteristics at such broad rpm range,
and therefore IFR will never be able to reflect the precision necessary to reflect such changes.

Another numeric exercise to demonstrate this:
A stock cam has about 50% VE at idle, and about 90% at WOT.
A nice big cam has 30% VE at idle, and up to 120% at WOT.
So to make a big cam idle nicely with an unmolested VE you're gonna have to
seriously bull**** about the size of your injector sizes, as you're needing only 30/50(60%) of fuel you used to need.
On the other end of the spectrum, you will need 120/90(133%) more fuel than before. So you lie some more about the injectors, making your IFR table look very sharp and jagged, what in reality is a nice smooth progression.
The real problem is that the IFR table has only one axis (pressure at the fuel rail) and only 17 values. VE table has 380 cells on two axis. If the natural VE dictated by the characteristics of the cam shaft is very sensitive to RPM (and most aftermarket ones are very sensitive) you will not be able to have the computer dump appopriate amount of fuel in all possible situations. So you have to simply your tune (that's why people do it), and tune it either for decent drivability (and have it horribly lean up top) or optimize it for power, and have it stall 5 times every time you try to get in/out of the pitlane.

IFR tuning to VE tuning is what carbs have become to electronic fuel injection. They both get the job done, just one is way more flexible than the other.
Rich Z is offline   Reply With Quote

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Rock Of Ages Makes South Florida Look Good RSS Feed Florida News Feeds 0 06-15-2012 08:16 PM
[C2] 1966 Convertible for sale RSS Feed RSS Classifieds 0 06-17-2011 05:28 AM
Good girls/bad girls. VetteHead The Roadhouse 0 05-13-2010 06:11 PM
EVEN GOD ENJOYS A GOOD LAUGH! RSS Feed Just For Laughs! 0 04-09-2009 01:24 AM
Carchip data log for 07/30/06 Rich Z Performance Tuning 8 07-27-2008 01:33 PM

All times are GMT -4. The time now is 06:52 PM.

Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Page generated in 0.05284190 seconds with 13 queries
All material copyrighted by and
the respective owners of the material posted.