finished basic IO