completely rewrite both methods