diff --git a/button.c b/button.c
index f0221001fcb1e237b825356417cfdd307716ba78..c1db827e3dd778993db92f9152a74d58b30d76a4 100644
--- a/button.c
+++ b/button.c
@@ -3,6 +3,9 @@
 #include <SDL_image.h>
 #include <SDL_gfxPrimitives.h>
 
+
+/*Gomb kirajzoló függvény*/
+
 void drawButton(SDL_Surface* screen,SDL_Event* evt,Button* const button)
 {
     SDL_Rect pos= {0},siz= {0};
@@ -17,8 +20,8 @@ void drawButton(SDL_Surface* screen,SDL_Event* evt,Button* const button)
     switch(button->isActive)
     {
     case 1:/*Aktív gomb*/
-        if(( button->rect.x <= evt->button.x && evt->button.x <= button->rect.x+button->rect.w ) &&
-                ( button->rect.y <= evt->button.y && evt->button.y <= button->rect.y+button->rect.h ))
+        if(( button->rect.x < evt->button.x && evt->button.x < button->rect.x+button->rect.w ) &&
+                ( button->rect.y < evt->button.y && evt->button.y < button->rect.y+button->rect.h ))
         {
             siz.x=siz.w;
             SDL_BlitSurface(button->bg,&siz,screen,&pos);
@@ -45,6 +48,7 @@ void drawButton(SDL_Surface* screen,SDL_Event* evt,Button* const button)
     }
 }
 
+/**/
 void setButtonEvents(Button* button,SDL_Event* evt)
 {
     if(button->isActive==1)
@@ -57,15 +61,15 @@ void setButtonEvents(Button* button,SDL_Event* evt)
 
 
             case SDL_BUTTON_LEFT:/*Bal egér kattintás*/
-                if( ( button->rect.x <= evt->button.x && evt->button.x <= button->rect.x+button->rect.w ) &&
-                        ( button->rect.y <= evt->button.y && evt->button.y <= button->rect.y+button->rect.h ) )
+                if( ( button->rect.x < evt->button.x && evt->button.x < button->rect.x+button->rect.w ) &&
+                        ( button->rect.y < evt->button.y && evt->button.y < button->rect.y+button->rect.h ) )
                     button->leftButtonClicked=1;
                 break;
 
 
             case SDL_BUTTON_RIGHT:/*Jobb egér kattintás*/
-                if( ( button->rect.x <= evt->button.x && evt->button.x <= button->rect.x+button->rect.w ) &&
-                        ( button->rect.y <= evt->button.y && evt->button.y <= button->rect.y+button->rect.h ) )
+                if( ( button->rect.x < evt->button.x && evt->button.x < button->rect.x+button->rect.w ) &&
+                        ( button->rect.y < evt->button.y && evt->button.y < button->rect.y+button->rect.h ) )
                     button->rightButtonClicked=1;
 
                 break;
@@ -83,8 +87,10 @@ void setButtonEvents(Button* button,SDL_Event* evt)
 
 void setButton(Button* button,SDL_Rect rect,SDL_Surface* bg,TTF_Font* font,char* const text)
 {
+    /*Inicalizáció*/
     button->rect=rect;
     button->bg=bg;
+    button->text=NULL;/*Vizsgálat miat*/
     setText(button,font,text,white);
     button->leftButtonClicked=-1;
     button->rightButtonClicked=-1;
@@ -97,5 +103,13 @@ void setActive(Button* button,int value)
 }
 
 void setText(Button* button,TTF_Font* font,char* const text,SDL_Color color){
-        button->text=TTF_RenderText_Blended(font,text,color);
+        if(text!=NULL){
+            if(button->text!=NULL)SDL_FreeSurface(button->text);
+            button->text=TTF_RenderText_Blended(font,text,color);
+        }
+}
+
+void destroyButton(Button* button){
+    if(button->text!=NULL)
+        SDL_FreeSurface(button->text);
 }
diff --git a/game.c b/game.c
index 64a93198038ee77bcbf2dc45837190da82022838..f689f345b2baa624d3f83358d35dd79d200b1294 100644
--- a/game.c
+++ b/game.c
@@ -34,20 +34,27 @@ int drawGameSetting(Game* game,SDL_Surface* screen,TTF_Font* fontMain,TTF_Font*
         drawInput(screen,&inputHeight);
         drawInput(screen,&inputMines);
         /*Beviteli események*/
-        setInputEvents(&inputWidth,&evt,fontMain,0);
-        setInputEvents(&inputHeight,&evt,fontMain,0);
-        setInputEvents(&inputMines,&evt,fontMain,0);
+        setInputEvents(&inputWidth,&evt,fontMain,INPUT_NUM);
+        setInputEvents(&inputHeight,&evt,fontMain,INPUT_NUM);
+        setInputEvents(&inputMines,&evt,fontMain,INPUT_NUM);
 
         if(btnBack.leftButtonClicked==1)
         {
+            destroyInput(&inputWidth);
+            destroyInput(&inputHeight);
+            destroyInput(&inputMines);
             return BACK;/*TODO:Felesleges*/
         }
         if(btnNext.leftButtonClicked==1)
         {
-            /*FIXME:Table table; nélkül*/
+
+            destroyInput(&inputWidth);
+            destroyInput(&inputHeight);
+            destroyInput(&inputMines);
+
             createTable(&game->table,bgField,fontField,15/*game->width*/,15/*game->height*/);
 
-            generateTable((game->table),15,15,20/*game->mines*/);
+            generateTable((game->table),15,15,25/*game->mines*/);
 
             return NEXT;
         }
@@ -98,7 +105,8 @@ void drawGame(Game* game,SDL_Surface* screen,TTF_Font* fontButton,TTF_Font* font
             if(btnExit.leftButtonClicked==1)
             {
                 state=EXIT;
-                destroyTable(&game->table,15/*game->height*/);
+                saveTable(game->table,15/*game->width*/,15/*TODO:game->height*/);
+                destroyTable(game->table,15/*game->height*/);
                 /*TODO:Mentés*/
             }
         }
diff --git a/init.c b/init.c
index c3848894510f4b839b320dfcc38f68f4516b3b52..cc7f960072a86c50281ab6186e89722be98f4799 100644
--- a/init.c
+++ b/init.c
@@ -5,7 +5,7 @@ void init_framework(SDL_Surface** screen)
     SDL_Init(SDL_INIT_EVERYTHING);
     IMG_Init(IMG_INIT_JPG);
 
-    *screen=SDL_SetVideoMode(640,480,32,/*SDL_ANYFORMAT*/SDL_FULLSCREEN);
+    *screen=SDL_SetVideoMode(640,480,32,/*SDL_ANYFORMAT*/SDL_FULLSCREEN|SDL_HWSURFACE);
     SDL_EnableKeyRepeat(500, 30);
 
 }
diff --git a/input.c b/input.c
index 9fac48ba2fe78636d72f72df9e2dce15861a9d65..60d79d8f73ca93bcfe5fbb506d712d40f572e14f 100644
--- a/input.c
+++ b/input.c
@@ -1,25 +1,30 @@
 #include "input.h"
-#define NUMBERS 10
-#define ABC 27
+#include "colors.h"
 
 void drawInput(SDL_Surface* screen,Input* input) /*Kirajzol egy inputot*/
 {
     SDL_Rect siz= {0}, pos= {0};
+    /*pozicio méret*/
     pos.x=input->rect.x;
     pos.y=input->rect.y;
     siz.w=input->rect.w;
     siz.h=input->rect.h;
 
+    /*Háttér*/
     SDL_BlitSurface(input->bg,&siz,screen,&pos);
-    if(input->textS!=NULL)
+
+    /*Ha van mit kirajzolni kirajzol*/
+    if(input->textS!=NULL){
         pos.y+=(siz.h-input->textS->h)/2;
-    pos.x+=20;/*TODO:Offset*/
-    SDL_BlitSurface(input->textS,NULL,screen,&pos);
+        pos.x+=20;/*TODO:Offset*/
+        SDL_BlitSurface(input->textS,NULL,screen,&pos);
+    }
 }
 
 void setInput(Input* input,SDL_Surface* bg,SDL_Rect rect)
 {
-    /*Inicializáció*//*TODO:SDL_Rect* optimalizácio érdekében*/
+    /*Inicializáció*/
+    /*TODO:SDL_Rect* optimalizáció érdekében*/
     input->rect=rect;
     input->bg=bg;
     input->textSize=1;
@@ -28,10 +33,11 @@ void setInput(Input* input,SDL_Surface* bg,SDL_Rect rect)
     input->isActive=0;
 }
 
-void setInputActive(Input* input,SDL_Event* evt) /*Aktívba állítja az beviteli mezőt*/
+void setInputActive(Input* input,SDL_Event* evt) /*Aktívba állítja a beviteli mezőt ha volt kattintás*/
 {
+    /*Égér pozició vizsgálat*/
     if(( input->rect.x <= evt->button.x && evt->button.x <= input->rect.x+input->rect.w ) &&
-            ( input->rect.y <= evt->button.y && evt->button.y <= input->rect.y+input->rect.h ))
+       ( input->rect.y <= evt->button.y && evt->button.y <= input->rect.y+input->rect.h ))
     {
         input->isActive=1;
     }
@@ -39,10 +45,20 @@ void setInputActive(Input* input,SDL_Event* evt) /*Aktívba állítja az bevitel
 }
 
 
-int addNewElement(Input* input,Uint16 element) /*hozzáad egy új karaktert*/
+void addNewElement(Input* input,Uint16 element,int flag) /*hozzáad egy új karaktert*/
 {
     int i,index=-1;
     Uint16* cache;
+
+
+    if(flag!=INPUT_ALL){
+        if(flag==INPUT_NUM && !('0'<= element && element <='9') )/*Ha nem akkor vissza tér*/
+            return;
+        if(flag==INPUT_ABC && ('0'<= element && element <='9'))/*Ha szám akkor visszatér*/
+            return;
+    }
+
+
     i=0;
     cache=(Uint16*)malloc(sizeof(Uint16)*(input->textSize+1));
     /*if(input->text!=NULL)*/
@@ -55,8 +71,6 @@ int addNewElement(Input* input,Uint16 element) /*hozzáad egy új karaktert*/
     free(input->text);
     input->text=cache;
     input->textSize++;
-
-    return index;
 }
 
 void deleteAElement(Input* input) /*kitöröl egy karakter*/
@@ -77,9 +91,8 @@ void deleteAElement(Input* input) /*kitöröl egy karakter*/
 void renderNewText(Input* input,TTF_Font* font) /*Létrehozza a modosított képet*/
 {
     /*SDL_Surface* cache;*/
-    SDL_Color c= {0,0,0,255};
     SDL_FreeSurface(input->textS);
-    input->textS=TTF_RenderUNICODE_Solid(font,input->text,c);
+    input->textS=TTF_RenderUNICODE_Solid(font,input->text,white);
 
 }
 
@@ -113,7 +126,7 @@ void setInputEvents(Input* input,SDL_Event* evt,TTF_Font* font,int flag) /*Beál
                 }
                 break;
             default:
-                addNewElement(input,evt->key.keysym.unicode);
+                addNewElement(input,evt->key.keysym.unicode,flag);
                 renderNewText(input,font);
                 break;
             }
@@ -127,3 +140,12 @@ void setInputEvents(Input* input,SDL_Event* evt,TTF_Font* font,int flag) /*Beál
 
 
 }
+
+void destroyInput(Input* input){/*Input mező megsemisitése*/
+    if(input->text!=NULL){
+        free(input->text);
+    }
+    if(input->textS!=NULL){
+        SDL_FreeSurface(input->textS);
+    }
+}
diff --git a/input.h b/input.h
index fa5cb61687dacaac01caff9af8aa7a5d0882ec46..b0778debf2467687489a3bda08d3a5037f1769b4 100644
--- a/input.h
+++ b/input.h
@@ -22,5 +22,6 @@ typedef struct
 void drawInput(SDL_Surface*,Input*);
 void setInput(Input*,SDL_Surface*,SDL_Rect);
 void setInputEvents(Input*,SDL_Event*,TTF_Font*,int);
+void destroyInput(Input*);
 
 #endif
diff --git a/main.c b/main.c
index 5e2eb6d92d8c350a7853a48e83049a7cfe845327..b6d8dee4503c24caed2a257a83260b9d1d70788e 100644
--- a/main.c
+++ b/main.c
@@ -32,9 +32,9 @@ int main(int argc,char* argv[])
     init_ttf(&font);
 
     /*háttér betöltése*/
-    bgMain=IMG_Load("bg.jpg");
-    bgButton=IMG_Load("button.png");
-    bgField=IMG_Load("field20.png");
+    bgMain=IMG_Load("hatter_glass.png");
+    bgButton=IMG_Load("gomb_wide.png");
+    bgField=IMG_Load("gomb_lil.png");
 
 
     while(evt.type!=SDL_QUIT && state!=QUIT_TO_OS)
diff --git a/table.c b/table.c
index d3c06dd3889ce92219563cfad72e95f9425b1c63..acb2af61e6833f2fd0d35988ec28c792d4db7115 100644
--- a/table.c
+++ b/table.c
@@ -14,13 +14,15 @@ void drawTable(SDL_Surface* screen,Table table,TTF_Font* font,SDL_Event* evt,int
         {
             drawField(screen,evt,&table[y][x]);
             setButtonEvents(&table[y][x].btnField,evt);
-            if(table[y][x].btnField.leftButtonClicked==1){
+            if(table[y][x].btnField.leftButtonClicked==1)
+            {
                 if(fieldRevealing(table,font,x,y,width,height))/*Vissza térés játék vége*/
                 {
                     /*TODO:Game over*/
                 }
             }
-            if(table[y][x].btnField.rightButtonClicked==1){
+            if(table[y][x].btnField.rightButtonClicked==1)
+            {
                 setFlag(table[y][x]);
                 setText(&table[y][x].btnField,font,"F",red);
             }
@@ -61,15 +63,15 @@ void createTable(Table* table,SDL_Surface* bgField,TTF_Font* fieldFont,int width
 
 }
 
-void destroyTable(Table* table,int height)/*TODO:Vektoros módszer*/
+void destroyTable(Table table,int height)/*TODO:Vektoros módszer*/
 {
     int i;
 
     for(i=0; i<height; i++)
     {
-        /*free(table[i]);*/
+        free(table[i]);
     }
-    /*free(table);*/
+    free(table);
 }
 
 void generateTable(Table table,int width,int height,int mines)
@@ -108,23 +110,32 @@ void generateTable(Table table,int width,int height,int mines)
 
 
 
-void allFieldRevealing(Table table,TTF_Font* font,int width,int height){
+void allFieldRevealing(Table table,TTF_Font* font,int width,int height)
+{
     int x,y;
     char puffer[2];
 
-    for(y=0;y<height;y++){
-        for(x=0;x<width;x++){
-            if(table[y][x].state!=UNCOVERED){
+    for(y=0; y<height; y++)
+    {
+        for(x=0; x<width; x++)
+        {
+            if(table[y][x].state!=UNCOVERED)
+            {
                 table[y][x].state=UNCOVERED;
-                if(table[y][x].type==MINE){
-                        setText(&table[y][x].btnField,font,"*",red);
-                        table[y][x].btnField.isActive=0;
+                if(table[y][x].type==MINE)
+                {
+                    setText(&table[y][x].btnField,font,"*",red);
+                    table[y][x].btnField.isActive=0;
                 }
-                else{
-                    if(table[y][x].type==EMPTY){
+                else
+                {
+                    if(table[y][x].type==EMPTY)
+                    {
                         table[y][x].btnField.isActive=0;
 
-                    }else{
+                    }
+                    else
+                    {
                         table[y][x].btnField.isActive=0;
                         sprintf(puffer,"%d",table[y][x].type);
                         setText(&table[y][x].btnField,font,puffer,white);
@@ -146,7 +157,8 @@ void allFieldRevealing(Table table,TTF_Font* font,int width,int height){
 
 
 
-int fieldRevealing(Table table,TTF_Font* font,int x,int y,int width,int height){
+int fieldRevealing(Table table,TTF_Font* font,int x,int y,int width,int height)
+{
     int i,j,ret=0;
     char puffer[2];
 
@@ -159,7 +171,8 @@ int fieldRevealing(Table table,TTF_Font* font,int x,int y,int width,int height){
     {
         table[y][x].state=1;
         table[y][x].btnField.isActive=0;
-        if(table[y][x].type!=0){
+        if(table[y][x].type!=0)
+        {
             sprintf(puffer,"%d",table[y][x].type);
             setText(&table[y][x].btnField,font,puffer,white);
         }
@@ -183,3 +196,27 @@ int fieldRevealing(Table table,TTF_Font* font,int x,int y,int width,int height){
 }
 
 
+void saveTable(Table table,int width,int height)/*TODO:Áthelyezni a game.c -be és az időt is meneteni*/
+{
+    int x,y;
+
+    FILE* fp=fopen("game.sav","wt");
+    if(fp==NULL)
+    {
+        printf("[ERROR]Cannot save the game");
+    }
+    else
+    {
+        fprintf(fp,"%d:%d\n",width,height);
+
+        for(y=0; y<height;y++)
+        {
+            for(x=0; x<width; x++)
+            {
+                fprintf(fp,"%d;%d ",table[y][x].type,table[y][x].state);
+            }
+            fprintf(fp,"\n");
+        }
+        fclose(fp);
+    }
+}
diff --git a/table.h b/table.h
index e98addbc173ddf183837e1ced61d713306ecb99a..2d45daaead53486130e766345709407b2420e47a 100644
--- a/table.h
+++ b/table.h
@@ -8,11 +8,11 @@ typedef Field** Table;
 void drawTable(SDL_Surface*,Table,TTF_Font*,SDL_Event*,int width,int height);
 
 /*Mentés és visszatöltés*/
-void saveTable();
+void saveTable(Table table,int,int);
 void loadTable();
 /*Példányosítás és eltörlés*/
 void createTable(Table* table,SDL_Surface*,TTF_Font*,int,int);
-void destroyTable(Table*,int);
+void destroyTable(Table,int);
 /*Pálya generálás*/
 void generateTable(Table,int width,int height,int mines);