diff --git a/2020/06/main.rs b/2020/06/main.rs
index f02259c..723fb09 100644
--- a/2020/06/main.rs
+++ b/2020/06/main.rs
@@ -1,6 +1,6 @@
-use std::collections::HashSet;
 use std::error::Error;
 
+use crate::group::Group;
 use crate::utils::GenericError;
 
 #[path = "../utils/mod.rs"]
@@ -10,8 +10,10 @@ fn main() -> Result<(), Box<dyn Error>> {
 	let lines = utils::read_input_lines()?;
 	let groups = load_groups(&lines)?;
 	
-	let total_answers = groups.iter().map(|group| group.combined_answers.len()).sum::<usize>();
-	println!("Total 'yes' answers among groups: {}", total_answers);
+	let total_answers_any_members = groups.iter().map(Group::count_answers_by_any_members).sum::<usize>();
+	let total_answers_all_members = groups.iter().map(Group::count_answers_by_all_members).sum::<usize>();
+	println!("Total 'yes' answers, counting answers by any group member: {}", total_answers_any_members);
+	println!("Total 'yes' answers, counting answers by all group members: {}", total_answers_all_members);
 	
 	Ok(())
 }
@@ -33,31 +35,45 @@ fn load_groups(lines: &Vec<String>) -> Result<Vec<Group>, GenericError> {
 	Ok(groups)
 }
 
-struct Group {
-	individual_answers: Vec<HashSet<char>>,
-	combined_answers: HashSet<char>,
-}
-
-impl Group {
-	fn new() -> Group {
-		Group {
-			individual_answers: Vec::new(),
-			combined_answers: HashSet::new(),
-		}
+mod group {
+	use std::collections::HashSet;
+	
+	use crate::GenericError;
+	
+	pub struct Group {
+		individual_answers: Vec<HashSet<char>>,
+		combined_answers: HashSet<char>,
 	}
 	
-	fn add_individual(&mut self, answer_str: &str) -> Result<(), GenericError> {
-		let answer_set = answer_str.chars().collect::<HashSet<char>>();
-		
-		for answer in &answer_set {
-			if answer.is_ascii_lowercase() {
-				self.combined_answers.insert(answer.clone());
-			} else {
-				return Err(GenericError::new(format!("Invalid answer: {}", answer)));
+	impl Group {
+		pub fn new() -> Group {
+			Group {
+				individual_answers: Vec::new(),
+				combined_answers: HashSet::new(),
 			}
 		}
 		
-		self.individual_answers.push(answer_set);
-		Ok(())
+		pub fn add_individual(&mut self, answer_str: &str) -> Result<(), GenericError> {
+			let answer_set = answer_str.chars().collect::<HashSet<char>>();
+			
+			for answer in &answer_set {
+				if answer.is_ascii_lowercase() {
+					self.combined_answers.insert(answer.clone());
+				} else {
+					return Err(GenericError::new(format!("Invalid answer: {}", answer)));
+				}
+			}
+			
+			self.individual_answers.push(answer_set);
+			Ok(())
+		}
+		
+		pub fn count_answers_by_any_members(&self) -> usize {
+			return self.combined_answers.len();
+		}
+		
+		pub fn count_answers_by_all_members(&self) -> usize {
+			return self.combined_answers.iter().filter(|answer| self.individual_answers.iter().all(|answers| answers.contains(&answer))).count();
+		}
 	}
 }