diff --git a/application.cpp b/application.cpp
index d7533d94c2019a374814225b25b1329ecda66a87..6a8a4c84e867498a9cacbdbc1a880ee9eae37836 100644
--- a/application.cpp
+++ b/application.cpp
@@ -19,7 +19,7 @@ void ellenoriz(vector<Widget> v)
 
 void Application::registerWidget(Widget* w)
 {
-    // Az új widgetet közvetlenül hozzáadjuk a widgets vektorhoz
+
     widgets.push_back(w);
 }
 
@@ -42,11 +42,22 @@ void Application::event_loop()
         }
         wrongi = -1;
 
-        for (int k = 0; k < 81; k += 9) {
-            for (int i = k; i < 9+k; ++i) {
-                for (size_t j = i+1; j < 9+k; ++j) {
-                    if (widgets[i]->getter() == widgets[j]->getter()) {
-                        wrongi = j;
+
+
+
+
+
+        if (focus != -1) {
+            widgets[focus]->handle(ev);
+            for (int k = 0; k < 81; k += 9) {
+                for (int i = k; i < 9+k; ++i) {
+                    for (size_t j = i+1; j < 9+k; ++j) {
+                        if (widgets[i]->getter() == widgets[j]->getter()) {
+                            wrongi = j;
+                            break;
+                        }
+                    }
+                    if (wrongi != -1) {
                         break;
                     }
                 }
@@ -54,16 +65,17 @@ void Application::event_loop()
                     break;
                 }
             }
-            if (wrongi != -1) {
-                break;
-            }
-        }
 
-        for (int k = 0; k < 9; ++k) {
-            for (int i = k; i < 81; i += 9) {
-                for (size_t j = i+9; j < 81; j += 9) {
-                    if (widgets[i]->getter() == widgets[j]->getter()) {
-                        wrongi = j;
+
+            for (int k = 0; k < 9; ++k) {
+                for (int i = k; i < 81; i += 9) {
+                    for (size_t j = i+9; j < 81; j += 9) {
+                        if (widgets[i]->getter() == widgets[j]->getter()) {
+                            wrongi = j;
+                            break;
+                        }
+                    }
+                    if (wrongi != -1) {
                         break;
                     }
                 }
@@ -71,14 +83,35 @@ void Application::event_loop()
                     break;
                 }
             }
-            if (wrongi != -1) {
-                break;
-            }
-        }
 
+            for (int row_offset = 0; row_offset < 9; row_offset += 3) {
+                for (int col_offset = 0; col_offset < 9; col_offset += 3) {
+                    std::vector<bool> seen(10, false);
 
-        if (focus != -1) {
-            widgets[focus]->handle(ev);
+                    for (int i = row_offset; i < row_offset + 3; ++i) {
+                        for (int j = col_offset; j < col_offset + 3; ++j) {
+                            int num = widgets[i * 9 + j]->getter();
+                            if (num != 0) {
+                                if (seen[num]) {
+                                    wrongi = i * 9 + j;
+                                    break;
+                                } else {
+                                    seen[num] = true;
+                                }
+                            }
+                        }
+                        if (wrongi != -1) {
+                            break;
+                        }
+                    }
+                    if (wrongi != -1) {
+                        break;
+                    }
+                }
+                if (wrongi != -1) {
+                    break;
+                }
+            }
         }
 
         for (int i = 0; i < widgets.size(); ++i) {