diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningController.java
new file mode 100644
index 0000000..1f9fa2d
--- /dev/null
+++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningController.java
@@ -0,0 +1,174 @@
+package uk.ac.aber.cs22120.group20.selfassessment;
+/**
+ * @(#) MyController.java 0,1 2020/04/07
+ *
+ * Copyright (c) 2020 Aberystwyth University.
+ * All rights reserved.
+ */
+
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.ComboBox;
+import javafx.scene.control.Label;
+import uk.ac.aber.cs22120.group20.json.DictionaryEntry;
+import java.net.URL;
+import java.util.*;
+
+/**
+ * A class that generate questions and check answers for match the meaning test.
+ *
+ * @author Brad Corbett [brc9]
+ * @author Henry Dugmore [hjd3]
+ * @author Kain Bryan-Jones [kab74]
+ * @author Luke Wybar [law39]
+ * @author Marcin Jakobik [maj83]
+ * @author Oscar Pocock [osp1]
+ * @author Tom Perry [top1]
+ * @author Waylen Watts [ncw]
+ * @version 0.4 Initial development
+ * @see uk.ac.aber.cs22120.group20.javafx.Application
+ */
+
+
+public class MatchTheMeaningController extends Question implements Initializable{
+
+
+ private ArrayList setOfQuestions=new ArrayList<>();
+ private ArrayList orderList = new ArrayList<>(Arrays.asList(0,1,2,3));
+ private boolean isEnglish;
+
+
+ @FXML
+ private ComboBox word1;
+
+ @FXML
+ private ComboBox word2;
+
+ @FXML
+ private ComboBox word3;
+
+ @FXML
+ private ComboBox word4;
+
+ @FXML
+ private Label LeftWord1;
+
+ @FXML
+ private Label LeftWord2;
+
+ @FXML
+ private Label LeftWord3;
+
+ @FXML
+ private Label LeftWord4;
+
+ @FXML
+ private Label RightWord1;
+
+ @FXML
+ private Label RightWord2;
+
+ @FXML
+ private Label RightWord3;
+
+ @FXML
+ private Label RightWord4;
+
+ @FXML
+ private Label CorrectAnswer;
+
+ @FXML
+ private Label WrongAnswer;
+
+
+ /**
+ * Pick randomly dictionary entry and add it to question list where are stored questions for this test.
+ */
+ private void getQuestions(){
+
+ setOfQuestions.addAll(AssessmentGenerator.generateWordMatch());
+
+ }
+
+ /**
+ * Set chosen words from dictionary on the scene.
+ *
+ * @param questions list of dictionary entries chosen for this test.
+ * @param orderList list of integers to change way of displaying welsh words.
+ */
+
+
+ private void setWords(ArrayList questions, ArrayList orderList){
+
+ if(isEnglish){
+ LeftWord1.setText(questions.get(0).getEnglish());
+ LeftWord2.setText(questions.get(1).getEnglish());
+ LeftWord3.setText(questions.get(2).getEnglish());
+ LeftWord4.setText(questions.get(3).getEnglish());
+
+ Collections.shuffle(orderList);
+
+ RightWord1.setText(questions.get(orderList.get(0)).getWelsh());
+ RightWord1.setText(questions.get(orderList.get(1)).getWelsh());
+ RightWord1.setText(questions.get(orderList.get(2)).getWelsh());
+ RightWord1.setText(questions.get(orderList.get(3)).getWelsh());
+
+ }else {
+ LeftWord1.setText(questions.get(0).getWelsh());
+ LeftWord2.setText(questions.get(1).getWelsh());
+ LeftWord3.setText(questions.get(2).getWelsh());
+ LeftWord4.setText(questions.get(3).getWelsh());
+
+ Collections.shuffle(orderList);
+
+ RightWord1.setText(questions.get(orderList.get(0)).getEnglish());
+ RightWord1.setText(questions.get(orderList.get(1)).getEnglish());
+ RightWord1.setText(questions.get(orderList.get(2)).getEnglish());
+ RightWord1.setText(questions.get(orderList.get(3)).getEnglish());
+ }
+
+ }
+
+ /**
+ * Check if answers from users are correct.
+ */
+
+ public void checkAnswers(){
+ ArrayList listOfAnswers = new ArrayList<>();
+ if(isEnglish){
+ listOfAnswers.add(RightWord1.getText());
+ listOfAnswers.add(RightWord2.getText());
+ listOfAnswers.add(RightWord3.getText());
+ listOfAnswers.add(RightWord4.getText());
+ }else {
+ listOfAnswers.add(LeftWord1.getText());
+ listOfAnswers.add(LeftWord2.getText());
+ listOfAnswers.add(LeftWord3.getText());
+ listOfAnswers.add(LeftWord4.getText());
+ }
+
+ checkAnswer(setOfQuestions,listOfAnswers,isEnglish);
+
+ CorrectAnswer.setText(Integer.toString(correctAnswers));
+ WrongAnswer.setText(Integer.toString(wrongAnswers));
+
+ setOfQuestions.clear();
+ this.prepare();
+
+ }
+
+ /**
+ * Method responsible for preparing questions and scene.
+ */
+ private void prepare(){
+ getQuestions();
+ setWords(setOfQuestions,orderList);
+ }
+
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+
+ this.prepare();
+
+ }
+}