Add GCV function
Restructure