PLA-1628 Refactor Special Promote

Couldn't this and other function return array with result and/or throw exception instead of C-style passing variables by reference?