diff --git a/cell.cpp b/cell.cpp
index 4afa1a340396c8ccff85eeb56c31650abc435882..d01dfdeccdde6fc75e540cafedd63993edc03fcc 100644
--- a/cell.cpp
+++ b/cell.cpp
@@ -1,40 +1,46 @@
 #include "cell.h"
 #include <QPushButton>
+#include <QToolButton>
 #include <QDebug>
 #include <QSignalMapper>
+#include <QGridLayout>
+#include <QStackedWidget>
+#include <QGroupBox>
 
 Cell::Cell(QWidget *parent) : QWidget(parent)
 {
-    // Set size of the window
-    // Create and position the button
-    setAutoFillBackground(true);
-    setStyleSheet("background-color:gray;");
-    setFixedSize(100, 100);
-    float w = width() / 3.0;
-    float h = height() / 3.0;
     QSignalMapper *mapper = new QSignalMapper(this);
     connect(mapper, SIGNAL(mapped(int)), this, SLOT(collapse(int)));
+
+    QGroupBox *groupBox = new QGroupBox();
+    QGridLayout *layout = new QGridLayout();
     for (char i = 0; i < 9; i++)
     {
         m_states[i] = new QPushButton(QString::number(i + 1), this);
-        m_states[i]->setGeometry(i % 3 * w, i / 3 * h, w, h);
+        m_states[i]->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding);
+        layout->addWidget(m_states[i],i%3,i/3);
         m_states[i]->setStyleSheet("border:none");
         connect(m_states[i], SIGNAL(clicked()), mapper, SLOT(map()));
         mapper->setMapping(m_states[i], i);
         m_blocked[i] = 0;
     }
+    groupBox->setLayout(layout);
     m_number = new QPushButton(this);
-    m_number->setFixedSize(100, 100);
-    m_number->setStyleSheet("font-size:44px");
-    m_number->hide();
 
     connect(m_number,SIGNAL(clicked()),this,SLOT(un()));
+    m_stackedWidget = new QStackedWidget(this);
+    m_stackedWidget->addWidget(groupBox);
+    m_stackedWidget->addWidget(m_number);
+    m_stackedWidget->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding);
+    heightForWidth(this->width());
+    setMinimumSize(100,100);
+    //m_stackedWidget->setFixedSize(70,70);
 }
 
 void Cell::collapse(int x)
 {
     collapsed = true;
-    m_number->show();
+    m_stackedWidget->setCurrentIndex(1);
     m_number->setText(QString::number(x + 1));
     emit(update(x));
 }
@@ -63,6 +69,6 @@ void Cell::addOption(int x)
 }
 void Cell::un(void){
     collapsed = false;
-    m_number->hide();
+    m_stackedWidget->setCurrentIndex(0);
     emit(undo(m_number->text().toInt()-1));
 }
\ No newline at end of file
diff --git a/cell.h b/cell.h
index 12b63ab32b9a976b6aa9cc68536588c76aef371d..9d51faa3a16e60a5354b9480bdb5f9e7d2442fc8 100644
--- a/cell.h
+++ b/cell.h
@@ -2,6 +2,7 @@
 #define CELL_H
 
 #include <QWidget>
+#include <QStackedWidget>
 
 class QPushButton;
 class Cell : public QWidget
@@ -17,6 +18,7 @@ private:
     QPushButton *m_states[9];
     QPushButton *m_number;
     std::array<int,9> m_blocked;
+    QStackedWidget *m_stackedWidget;
 
 signals:
     void update(int x);
diff --git a/window.cpp b/window.cpp
index d023533c21289e7b67c09f7e590dce4693e36a76..faf8e50dc601bdba104052baa49db317e5ab75ce 100644
--- a/window.cpp
+++ b/window.cpp
@@ -5,43 +5,45 @@
 #include <QThread>
 #include <QProgressBar>
 #include <QSlider>
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QSpacerItem> 
 
 Window::Window(QWidget *parent)
     : QWidget{parent}
 {
-    setFixedWidth(1600);
     m_solveButton = new QPushButton("solve", this);
-    m_solveButton->setGeometry(1100, height() - 100, width() - 1200, 30);
     connect(m_solveButton, SIGNAL(clicked()), this, SLOT(solveButtonClicked()));
     m_clearButton = new QPushButton("Clear", this);
-    m_clearButton->setGeometry(1100, height() - 30, width() - 1200, 30);
     connect(m_clearButton, SIGNAL(clicked()), this, SLOT(clearButtonClicked()));
 
     m_slider = new QSlider(this);
     m_slider->setRange(0, 1000);
     m_slider->setOrientation(Qt::Horizontal);
     m_slider->setValue(m_delay);
-    m_slider->setGeometry(1100, height() - 60, width() - 1200, 30);
     connect(m_slider, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));
 
+
+    QHBoxLayout *horizontalLayout = new QHBoxLayout(this);
+    QVBoxLayout *verticalLayout = new QVBoxLayout();
+    QGridLayout *layout = new QGridLayout();
+
+    verticalLayout->addWidget(m_solveButton);
+    verticalLayout->addWidget(m_slider);
+    verticalLayout->addWidget(m_clearButton);
+    horizontalLayout->addLayout(layout,5);
+    horizontalLayout->addLayout(verticalLayout,1);
+
+
     int dx = 0;
     int dy = 0;
     for (int x = 0; x < 9; x++)
     {
         for (int y = 0; y < 9; y++)
         {
-            if (x == 3)
-                dx = 4;
-            if (x == 6)
-                dx = 8;
-            if (y < 3)
-                dy = 0;
-            if (y >= 3)
-                dy = 4;
-            if (y >= 6)
-                dy = 8;
             m_cell[x + y * 9].setParent(this);
-            m_cell[x + y * 9].setGeometry(x * 100 + dx, y * 100 + dy, 100, 100);
+            layout->addWidget(&m_cell[x+y*9],y,x);
 
             //connecting signals & slots
             for (int d = 0; d < 9; d++) // rows and columns