finished except GUI