Hey, I noticed you list algorithm used as a problem. I know this is kinda hackneyed, and a code cliche that everyone throws at this sort of problem, but what's wrong with Dijkstra's algorithm?

It may be cliched to death, but it *is* fairly flexible, allowing you to factor in "weightings" for the decision making process and stuff....

...you could possibly implement a linked list of function pointers or something as the "decision factor", so you can dynamically alter how it weighs the best route and stuff.

Just a thought. You have probably already thought about it and discarded it for some reason, but hey, there's my 2 cents from having no idea whatsoever where you are with the project and stuff...

And dont laugh at me, it was just a thought ;)