Refactored to support satis