The problem I had was knowing which version of a VI was actually running. If a VI that you call through VIServer has a subVI with the same name as one already in memory, Labview uses the one already in memory. Once I renamed all the subVIs on the server application, I had no trouble calling large programs. Typically, the VIs that I call have 3 inputs and 3 outputs, all clusters and arrays and have lots of sub-VIs. Hope this helps.
--Ben