diff --git a/t14/cannon.h b/t14/cannon.h
index cf9724f120b54d2b4ada77d399ee57fff1fd1277..1e89709675b0d23613f956cd87a2b7390e926943 100644
--- a/t14/cannon.h
+++ b/t14/cannon.h
@@ -20,6 +20,7 @@ public:
     int   force()      const { return f; }
     bool  gameOver()   const { return gameEnded; }
     bool  isShooting() const { return shooting; }
+    QSize sizeHint()   const { return QSize(400, 300); }
 public slots:
     void  setAngle( int degrees );
     void  setForce( int newton );
diff --git a/t14/gamebrd.cpp b/t14/gamebrd.cpp
index d7ad0c868f9e2a775cd9f621d86141d6bd922a3e..9874ef38500021a5e943839bb3602a896038e2a9 100644
--- a/t14/gamebrd.cpp
+++ b/t14/gamebrd.cpp
@@ -13,14 +13,15 @@
 #include <qpushbutton.h>
 #include <qlcdnumber.h>
 
+#include <QBoxLayout>
+#include <QGridLayout>
+
 #include "lcdrange.h"
 #include "cannon.h"
 
 GameBoard::GameBoard(QWidget *parent)
         : QWidget( parent )
 {
-    setMinimumSize( 500, 355 );
-
     quit = new QPushButton( "Quit", this );
     quit->setFont( QFont( "Times", 18, QFont::Bold ) );
 
@@ -35,7 +36,7 @@ GameBoard::GameBoard(QWidget *parent)
     frame = new QFrame( this );
     frame->setFrameStyle( QFrame::WinPanel | QFrame::Sunken );
 
-    cannonField = new CannonField( this );
+    cannonField = new CannonField( frame );
 
     cannonField->setPalette( QPalette(QColor(250, 250, 200)) );
     cannonField->setAutoFillBackground(true);
@@ -72,28 +73,36 @@ GameBoard::GameBoard(QWidget *parent)
     QShortcut *quitShortcut = new QShortcut(Qt::Key_Q, this);
     connect(quitShortcut, SIGNAL(activated()), qApp, SLOT(quit()));
 
-    quit->setGeometry( 10, 10, 75, 30 );
-    angle->setGeometry( 10, quit->y() + quit->height() + 10, 75, 130 );
-    force->setGeometry( 10, angle->y() + angle->height() + 10, 75, 130 );
-    frame->move( angle->x() + angle->width() + 10, angle->y() );
-    cannonField->move( frame->x() + 2, frame->y() + 2 );
-    shoot->setGeometry( 10, 315, 75, 30 );
-    restart->setGeometry( 380, 10, 110, 30 );
-    hits->setGeometry( 130, 10, 40, 30 );
-    hitsL->setGeometry( hits->x() + hits->width() + 5, 10, 60, 30 );
-    shotsLeft->setGeometry( 240, 10, 40, 30 );
-    shotsLeftL->setGeometry( shotsLeft->x()+shotsLeft->width()+5, 10, 60, 30 );
+    QGridLayout *topLayout = new QGridLayout(this);
+    topLayout->addWidget(quit, 0, 0);
+
+    QVBoxLayout *sideColumn = new QVBoxLayout;
+    topLayout->addLayout(sideColumn, 1, 0);
+    sideColumn->addWidget(angle);
+    sideColumn->addWidget(force);
+    sideColumn->addWidget(shoot);
+
+    QHBoxLayout *topRow = new QHBoxLayout;
+    topLayout->addLayout(topRow, 0, 1);
+    topRow->addStretch();
+    topRow->addWidget(hits);
+    topRow->addWidget(hitsL);
+    topRow->addStretch();
+    topRow->addWidget(shotsLeft);
+    topRow->addWidget(shotsLeftL);
+    topRow->addStretch();
+    topRow->addWidget(restart);
+
+    topLayout->addWidget(frame, 1, 1);
+
+    QVBoxLayout *frameLayout = new QVBoxLayout(frame);
+    frameLayout->addWidget(cannonField);
+    int margin = frame->frameWidth();
+    frameLayout->setContentsMargins(margin, margin, margin, margin);
 
     newGame();
 }
 
-void GameBoard::resizeEvent( QResizeEvent * )
-{
-    frame->resize( width()  - frame->x() - 10,
-                   height() - frame->y() - 10 );
-    cannonField->resize( frame->width() - 4, frame->height() - 4 );
-}
-
 void GameBoard::fire()
 {
     if ( cannonField->gameOver() || cannonField->isShooting() )
diff --git a/t14/gamebrd.h b/t14/gamebrd.h
index 6f23eacd78a232809690869b1bb65e578cfc3aed..134719562cd5c21281405c2d6fb01f7ed43dcece 100644
--- a/t14/gamebrd.h
+++ b/t14/gamebrd.h
@@ -24,8 +24,6 @@ class GameBoard : public QWidget
     Q_OBJECT
 public:
     GameBoard( QWidget *parent=0 );
-protected:
-    void  resizeEvent( QResizeEvent * );
 protected slots:
     void  fire();
     void  hit();
diff --git a/t14/main.cpp b/t14/main.cpp
index 83cad081b32be368d0c1795619ef515f7eb8da05..314b7ad26c1ef19aa374635ffdd5441447545592 100644
--- a/t14/main.cpp
+++ b/t14/main.cpp
@@ -14,7 +14,6 @@ int main( int argc, char **argv )
     QApplication a( argc, argv );
 
     GameBoard gb;
-    gb.setGeometry( 100, 100, 500, 355 );
     gb.show();
     return a.exec();
 }