forked from: dripping, breeding

need to be refactored