diff --git a/MyFirstGame/core/src/cz/vsb/kp/Bucket.java b/MyFirstGame/core/src/cz/vsb/kp/Bucket.java
new file mode 100644
index 0000000000000000000000000000000000000000..debd0a4024e7996aab7c820ce82ff17f6a949c71
--- /dev/null
+++ b/MyFirstGame/core/src/cz/vsb/kp/Bucket.java
@@ -0,0 +1,106 @@
+package cz.vsb.kp;
+
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.Sprite;
+import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
+import com.badlogic.gdx.math.Vector2;
+import com.badlogic.gdx.physics.box2d.Body;
+import com.badlogic.gdx.physics.box2d.BodyDef;
+import com.badlogic.gdx.physics.box2d.FixtureDef;
+import com.badlogic.gdx.physics.box2d.PolygonShape;
+import com.badlogic.gdx.physics.box2d.World;
+
+public class Bucket {
+
+	private Sprite sprite; 
+	private Body body;
+	private Texture img;
+	private float centerX;
+	private float centerY;
+	private World world; 
+	
+	
+
+
+	public Bucket(Texture img, float centerX, float centerY, World world) {
+		this.img = img;
+		sprite = new Sprite(img);
+		sprite.setOriginBasedPosition(img.getWidth()/2, img.getHeight()/2);
+		sprite.setOrigin(0, 0);
+		this.centerX = centerX;
+		this.centerY = centerY;
+		this.world = world;
+		createBody();
+	}
+
+	private void createBody() {
+		int vyskaUchaKbeliku = 100;
+		PolygonShape dno = new PolygonShape();
+		dno.setAsBox(img.getWidth()/2.0f, 2, new Vector2(0, -img.getHeight()/2.0f),  0);
+		PolygonShape stenaPrava = new PolygonShape();
+		stenaPrava.setAsBox(2, (img.getHeight()-vyskaUchaKbeliku)/2.0f, new Vector2(img.getWidth()/2.0f, -vyskaUchaKbeliku/2), 0);
+		PolygonShape stenaLeva = new PolygonShape();
+		stenaLeva.setAsBox(2, (img.getHeight()-vyskaUchaKbeliku)/2.0f, new Vector2(-img.getWidth()/2.0f, -vyskaUchaKbeliku/2), 0);
+		PolygonShape vnitrek = new PolygonShape();
+		vnitrek.setAsBox((img.getWidth()-8)/2.0f, 
+				((img.getHeight()-vyskaUchaKbeliku)/4.0f), new Vector2(0, -vyskaUchaKbeliku/2-(img.getHeight()-vyskaUchaKbeliku)/4.0f+4	), 0);
+		FixtureDef detekceObsahu = new FixtureDef();
+		detekceObsahu.isSensor = true;
+		detekceObsahu.shape = vnitrek;
+		BodyDef def = new BodyDef();
+		def.type = BodyDef.BodyType.KinematicBody;
+		body = world.createBody(def);
+		body.createFixture(dno, 0);
+		body.createFixture(stenaPrava, 0);
+		body.createFixture(stenaLeva, 0);
+		body.createFixture(detekceObsahu);
+		body.setTransform(centerX, centerY, 0);
+		dno.dispose();
+		stenaLeva.dispose();
+		stenaPrava.dispose();
+		vnitrek.dispose();
+	}
+	
+	public float getX(){
+		return body.getPosition().x;
+	}
+
+	public float getY(){
+		return body.getPosition().y;
+	}
+
+	public float getWidth(){
+		return img.getWidth();
+	}
+
+	public float getHeigh(){
+		return img.getHeight();
+	}
+
+	public void setVelocity(float v) {
+		body.setLinearVelocity(v, 0);
+	}
+	public float getVelocity() {
+		return body.getLinearVelocity().x;
+	}
+	
+	public void draw(SpriteBatch batch) {
+		sprite.setCenter(body.getPosition().x, body.getPosition().y);
+		sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);
+		sprite.setRotation((float)(180/Math.PI * body.getAngle()));
+		sprite.draw(batch);
+//		batch.draw(img, getX()-getWidth()/2, getY()-getHeigh()/2);
+	}
+
+	public void draw(ShapeRenderer shapeRenderer) {
+//		Color c = new Color(0, 1, 0, 0.5f);
+//		shapeRenderer.setColor(c);
+//		shapeRenderer.rect(body.getPosition().x-getWidth()/2, body.getPosition().y - getHeigh()/2, getWidth(), getHeigh());
+//		Color c1 = new Color(1, 1, 0, 0.5f);
+//		shapeRenderer.setColor(c1);
+//		shapeRenderer.rect(body.getPosition().x-getWidth()/2 + 10, body.getPosition().y - getHeigh()/2 + 10, getWidth() - 20, getHeigh() - 20);
+
+	}
+
+}
diff --git a/MyFirstGame/core/src/cz/vsb/kp/ContactDetector.java b/MyFirstGame/core/src/cz/vsb/kp/ContactDetector.java
new file mode 100644
index 0000000000000000000000000000000000000000..80d085a457c9d982f016da94a603d17fcc64ac91
--- /dev/null
+++ b/MyFirstGame/core/src/cz/vsb/kp/ContactDetector.java
@@ -0,0 +1,52 @@
+package cz.vsb.kp;
+
+import com.badlogic.gdx.physics.box2d.Contact;
+import com.badlogic.gdx.physics.box2d.ContactImpulse;
+import com.badlogic.gdx.physics.box2d.ContactListener;
+import com.badlogic.gdx.physics.box2d.Manifold;
+
+public class ContactDetector implements ContactListener {
+
+	@Override
+	public void beginContact(Contact contact) {
+		Drop kapka = isDropInContactWithSenzor(contact);
+		if(kapka != null) {
+			kapka.setZmensovani(true);
+		}
+
+	}
+
+	private Drop isDropInContactWithSenzor(Contact contact) {
+		if (contact.getFixtureA().isSensor() || contact.getFixtureB().isSensor()) {
+			if(contact.getFixtureA().getBody().getUserData() instanceof Drop) {
+				return (Drop)contact.getFixtureA().getBody().getUserData();
+			}
+			if(contact.getFixtureB().getBody().getUserData() instanceof Drop) {
+				return (Drop)contact.getFixtureB().getBody().getUserData();
+			}
+			System.out.println("kontak");
+		}
+		return null;
+	}
+
+	@Override
+	public void endContact(Contact contact) {
+		Drop kapka = isDropInContactWithSenzor(contact);
+		if(kapka != null) {
+			kapka.setZmensovani(false);
+		}
+	}
+
+	@Override
+	public void preSolve(Contact contact, Manifold oldManifold) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void postSolve(Contact contact, ContactImpulse impulse) {
+		// TODO Auto-generated method stub
+
+	}
+
+}
diff --git a/MyFirstGame/core/src/cz/vsb/kp/Drop.java b/MyFirstGame/core/src/cz/vsb/kp/Drop.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d6265e2a8a4919007917b8d18ca0de15d709204
--- /dev/null
+++ b/MyFirstGame/core/src/cz/vsb/kp/Drop.java
@@ -0,0 +1,112 @@
+package cz.vsb.kp;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.Sprite;
+import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.badlogic.gdx.physics.box2d.Body;
+import com.badlogic.gdx.physics.box2d.BodyDef;
+import com.badlogic.gdx.physics.box2d.CircleShape;
+import com.badlogic.gdx.physics.box2d.Fixture;
+import com.badlogic.gdx.physics.box2d.FixtureDef;
+import com.badlogic.gdx.physics.box2d.World;
+import com.badlogic.gdx.utils.Array;
+
+public class Drop {
+
+	private static final Random random = new Random();
+
+	private Body body;
+	private Texture dropImg;
+	private Sprite sprite;
+	private float centerX;
+	private float centerY;
+	private World world;
+	private float radius;
+	private boolean zmensovani = false;
+
+	public Drop(Texture dropImg, float centerX, float centerY, World world) {
+		this.dropImg = dropImg;
+		radius = dropImg.getWidth() / 2;
+		sprite = new Sprite(dropImg);
+		sprite.setOriginBasedPosition(dropImg.getWidth() / 2, dropImg.getHeight() / 2);
+		sprite.setOrigin(0, 0);
+		this.centerX = centerX;
+		this.centerY = centerY;
+		this.world = world;
+		createBody();
+		body.setLinearVelocity(50 - random.nextFloat() * 100, random.nextFloat() * (-150));
+	}
+
+	private void createBody() {
+		BodyDef def = new BodyDef();
+		def.type = BodyDef.BodyType.DynamicBody;
+		body = world.createBody(def);
+		createNewBodyFixture(radius);
+		body.setTransform(centerX, centerY, 0);
+		body.setUserData(this);
+	}
+
+	private void createNewBodyFixture(float radius) {
+		CircleShape poly = new CircleShape();
+		poly.setRadius(radius);
+		FixtureDef fixtureDef = new FixtureDef();
+		fixtureDef.shape = poly;
+		fixtureDef.density = 0.5f;
+		fixtureDef.friction = 0.8f;
+		fixtureDef.restitution = 0.2f; // Make it bounce a little bit
+		body.createFixture(fixtureDef);
+		poly.dispose();
+	}
+
+	public void update() {
+		if(zmensovani) {
+			zmensi();
+		}
+	}
+	                 
+	public boolean isZmensovani() {
+		return zmensovani;
+	}
+
+	public void setZmensovani(boolean zmensovani) {
+		this.zmensovani = zmensovani;
+	}
+
+	public void zmensi() {
+		for (Fixture fixture : body.getFixtureList()) {
+			body.destroyFixture(fixture);
+		}
+		radius = radius - 0.05f;
+		if (radius > 1) {
+			createNewBodyFixture(radius);
+		}
+	}
+
+	public float getX() {
+		return body.getPosition().x;
+	}
+
+	public float getY() {
+		return body.getPosition().y;
+	}
+
+	public float getWidth() {
+		return dropImg.getWidth();
+	}
+
+	public float getHeigh() {
+		return dropImg.getHeight();
+	}
+
+	public void draw(SpriteBatch batch) {
+		sprite.setCenter(body.getPosition().x, body.getPosition().y);
+		sprite.setOrigin(sprite.getWidth() / 2, sprite.getHeight() / 2);
+		sprite.setRotation((float) (180 / Math.PI * body.getAngle()));
+		sprite.draw(batch);
+//		batch.draw(dropImg, getX() - getWidth()/2, getY() - getHeigh()/2);
+	}
+
+}
diff --git a/MyFirstGame/core/src/cz/vsb/kp/DropGame.java b/MyFirstGame/core/src/cz/vsb/kp/DropGame.java
new file mode 100644
index 0000000000000000000000000000000000000000..99018197f8f332cde8a16e87f7dbf61dace2b900
--- /dev/null
+++ b/MyFirstGame/core/src/cz/vsb/kp/DropGame.java
@@ -0,0 +1,40 @@
+package cz.vsb.kp;
+
+import com.badlogic.gdx.Game;
+import com.badlogic.gdx.graphics.OrthographicCamera;
+import com.badlogic.gdx.graphics.g2d.BitmapFont;
+import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
+import com.badlogic.gdx.math.Vector2;
+import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
+import com.badlogic.gdx.physics.box2d.World;
+
+public class DropGame extends Game {
+	SpriteBatch batch;
+	BitmapFont font;
+	
+	ShapeRenderer shapeRenderer;
+    
+	@Override
+	public void create() {
+
+		font = new BitmapFont();
+		font.getData().scale(2);
+		batch = new SpriteBatch();
+
+		setScreen(new MainMenuScreen(this));
+		shapeRenderer = new ShapeRenderer();
+        
+	}
+
+	@Override
+	public void render() {
+		super.render();
+	}
+
+	@Override
+	public void dispose() {
+		batch.dispose();
+		font.dispose();
+	}
+}
diff --git a/MyFirstGame/core/src/cz/vsb/kp/Game.java b/MyFirstGame/core/src/cz/vsb/kp/Game.java
deleted file mode 100644
index 0d7cfb55575605ada0d235c1661aaa82f14b7798..0000000000000000000000000000000000000000
--- a/MyFirstGame/core/src/cz/vsb/kp/Game.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package cz.vsb.kp;
-
-import java.util.Iterator;
-
-import com.badlogic.gdx.ApplicationAdapter;
-import com.badlogic.gdx.Gdx;
-import com.badlogic.gdx.Input;
-import com.badlogic.gdx.graphics.Color;
-import com.badlogic.gdx.graphics.GL20;
-import com.badlogic.gdx.graphics.OrthographicCamera;
-import com.badlogic.gdx.graphics.Texture;
-import com.badlogic.gdx.graphics.g2d.SpriteBatch;
-import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
-import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
-import com.badlogic.gdx.math.MathUtils;
-import com.badlogic.gdx.math.Rectangle;
-import com.badlogic.gdx.math.Vector3;
-import com.badlogic.gdx.utils.Array;
-import com.badlogic.gdx.utils.ScreenUtils;
-import com.badlogic.gdx.utils.TimeUtils;
-
-public class Game extends ApplicationAdapter {
-	private SpriteBatch batch;
-	private OrthographicCamera camera;
-	private Texture bucketImg;
-	private Texture dropImg;
-	private Texture gardenImg;
-	private Rectangle bucket;
-	private Array<Rectangle> raindrops;
-	private long lastDropTime;
-	private ShapeRenderer shapeRenderer;
-    static private boolean projectionMatrixSet;
-	@Override
-	public void create() {
-		batch = new SpriteBatch();
-		bucketImg = new Texture("bucket.png");
-		dropImg = new Texture("drop.png");
-		gardenImg = new Texture("garden.png");
-		camera = new OrthographicCamera();
-		camera.setToOrtho(false, 800, 480);
-		bucket = new Rectangle();
-		bucket.x = 800 / 2 - 161 / 2;
-		bucket.y = 20;
-		bucket.width = 161;
-		bucket.height = 268/2;
-		raindrops = new Array<Rectangle>();
-		spawnRaindrop();
-//		Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode());
-		shapeRenderer = new ShapeRenderer();
-        projectionMatrixSet = false;
-	}
-
-	@Override
-	public void render() {
-		ScreenUtils.clear(1, 0, 0, 1);
-		camera.update();
-		batch.setProjectionMatrix(camera.combined);
-		batch.begin();
-		batch.draw(gardenImg,0, 0 );
-		batch.draw(bucketImg, bucket.x, bucket.y);
-		for (Rectangle raindrop : raindrops) {
-			batch.draw(dropImg, raindrop.x, raindrop.y);
-		}
-//		batch.draw(img, 0, 0);
-		batch.end();
-        Gdx.gl.glEnable(GL20.GL_BLEND);
-        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
-        if(!projectionMatrixSet){
-            shapeRenderer.setProjectionMatrix(batch.getProjectionMatrix());
-        }
-        shapeRenderer.begin(ShapeType.Filled);
-        Color c = new Color(0, 1, 0, 0.5f);
-        shapeRenderer.setColor(c);
-        shapeRenderer.rect(bucket.x, bucket.y, bucket.width, bucket.height);
-        Color c1 = new Color(1, 1, 0, 0.5f);
-        shapeRenderer.setColor(c1);
-        shapeRenderer.rect(bucket.x+10, bucket.y+10, bucket.width-20, bucket.height-20);
-        shapeRenderer.end();
-        Gdx.gl.glDisable(GL20.GL_BLEND);
-
-		if (Gdx.input.isTouched()) {
-			Vector3 touchPos = new Vector3();
-			touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
-			camera.unproject(touchPos);
-			bucket.x = touchPos.x - 161/2;
-		}
-
-		if (Gdx.input.isKeyPressed(Input.Keys.LEFT))
-			bucket.x -= 200 * Gdx.graphics.getDeltaTime();
-		if (Gdx.input.isKeyPressed(Input.Keys.RIGHT))
-			bucket.x += 200 * Gdx.graphics.getDeltaTime();
-		if (bucket.x < 0)
-			bucket.x = 0;
-		if (bucket.x > 800 - 161)
-			bucket.x = 800 - 161;
-		if (TimeUtils.nanoTime() - lastDropTime > 1000000000)
-			spawnRaindrop();
-		for (Iterator<Rectangle> iter = raindrops.iterator(); iter.hasNext();) {
-			Rectangle raindrop = iter.next();
-			raindrop.y -= 200 * Gdx.graphics.getDeltaTime();
-			if (raindrop.y + 161 < 0)
-				iter.remove();
-			if(raindrop.overlaps(bucket)) {
-//		         dropSound.play();
-		         iter.remove();
-		      }
-		}
-        if (Gdx.input.isKeyJustPressed(Input.Keys.F)) {
-        	if(!Gdx.graphics.isFullscreen()) {
-            Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode());
-        	} else {
-        		Gdx.graphics.setWindowedMode(800, 600);
-        	}
-        }
-	}
-
-	private void spawnRaindrop() {
-		Rectangle raindrop = new Rectangle();
-		raindrop.x = MathUtils.random(0, 800 - 64);
-		raindrop.y = 480;
-		raindrop.width = 64;
-		raindrop.height = 64;
-		raindrops.add(raindrop);
-		lastDropTime = TimeUtils.nanoTime();
-	}
-
-	@Override
-	public void dispose() {
-		batch.dispose();
-		bucketImg.dispose();
-		dropImg.dispose();
-	}
-}
diff --git a/MyFirstGame/core/src/cz/vsb/kp/GardenScreen.java b/MyFirstGame/core/src/cz/vsb/kp/GardenScreen.java
new file mode 100644
index 0000000000000000000000000000000000000000..494def93db89423ac220e216250d6bd788a37c5a
--- /dev/null
+++ b/MyFirstGame/core/src/cz/vsb/kp/GardenScreen.java
@@ -0,0 +1,168 @@
+package cz.vsb.kp;
+
+import java.util.Iterator;
+
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.Input;
+import com.badlogic.gdx.Screen;
+import com.badlogic.gdx.graphics.Color;
+import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.graphics.OrthographicCamera;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
+import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
+import com.badlogic.gdx.math.MathUtils;
+import com.badlogic.gdx.math.Rectangle;
+import com.badlogic.gdx.math.Vector2;
+import com.badlogic.gdx.math.Vector3;
+import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
+import com.badlogic.gdx.physics.box2d.World;
+import com.badlogic.gdx.utils.Array;
+import com.badlogic.gdx.utils.ScreenUtils;
+import com.badlogic.gdx.utils.TimeUtils;
+
+public class GardenScreen implements Screen {
+
+	private final DropGame dropGame;
+
+	private OrthographicCamera camera;
+	private Texture bucketImg;
+	private Texture dropImg;
+	private Texture gardenImg;
+	private Array<Drop> raindrops;
+	private long lastDropTime;
+	private Bucket bucket;
+	static private boolean projectionMatrixSet;
+
+	World world;
+	Box2DDebugRenderer debugRenderer;
+
+	public GardenScreen(final DropGame dropGame) {
+		this.dropGame = dropGame;
+		projectionMatrixSet = false;
+		camera = new OrthographicCamera();
+		camera.setToOrtho(false, 800, 480);
+
+		world = new World(new Vector2(0, -10), true);
+		world.setContactListener(new ContactDetector());
+		debugRenderer = new Box2DDebugRenderer();
+
+		bucketImg = new Texture("bucket.png");
+		dropImg = new Texture("drop.png");
+		gardenImg = new Texture("garden.png");
+
+		bucket = new Bucket(bucketImg, (int) (camera.viewportWidth / 2 - bucketImg.getWidth() / 20), 135, world);
+		dropGame.shapeRenderer.setProjectionMatrix(dropGame.batch.getProjectionMatrix());
+
+		raindrops = new Array<>();
+		spawnRaindrop();
+
+	}
+
+	@Override
+	public void show() {
+	}
+
+	@Override
+	public void render(float delta) {
+		ScreenUtils.clear(1, 0, 0, 1);
+		camera.update();
+		dropGame.batch.setProjectionMatrix(camera.combined);
+		myRender();
+		debugRenderer.render(world, camera.combined);
+		world.step(1 / 60f, 6, 2);
+		if (TimeUtils.nanoTime() - lastDropTime > 1000000000) {
+			spawnRaindrop();
+		}
+	}
+
+	private void myRender() {
+		dropGame.batch.begin();
+		dropGame.batch.draw(gardenImg, 0, 0);
+		bucket.draw(dropGame.batch);
+		for (Drop raindrop : raindrops) {
+			raindrop.update();
+			raindrop.draw(dropGame.batch);
+		}
+		dropGame.batch.end();
+
+		Gdx.gl.glEnable(GL20.GL_BLEND);
+		Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
+		if (!projectionMatrixSet) {
+			dropGame.shapeRenderer.setProjectionMatrix(dropGame.batch.getProjectionMatrix());
+		}
+		dropGame.shapeRenderer.begin(ShapeType.Filled);
+		bucket.draw(dropGame.shapeRenderer);
+		dropGame.shapeRenderer.end();
+		Gdx.gl.glDisable(GL20.GL_BLEND);
+
+		if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) {
+			bucket.setVelocity(bucket.getVelocity() - 5);
+		}
+		if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) {
+			bucket.setVelocity(bucket.getVelocity() + 5);
+		}
+		if (bucket.getX() < bucket.getWidth()/2 && bucket.getVelocity() < 0) {
+			bucket.setVelocity(0);
+		}
+		if (bucket.getX() > 800 - bucket.getWidth()/2 && bucket.getVelocity() > 0) {
+			bucket.setVelocity(0);
+		}
+		if (TimeUtils.nanoTime() - lastDropTime > 1000000000) {
+			spawnRaindrop();
+		}
+//		System.out.println(bucket.getVelocity());
+//		for (Iterator<Drop> iter = raindrops.iterator(); iter.hasNext();) {
+//			Drop raindrop = iter.next();
+//			raindrop.y -= 200 * Gdx.graphics.getDeltaTime();
+//			if (raindrop.y + 161 < 0)
+//				iter.remove();
+//			if (raindrop.overlaps(bucket)) {
+//				iter.remove();
+//			}
+//		}
+		if (Gdx.input.isKeyJustPressed(Input.Keys.F)) {
+			if (!Gdx.graphics.isFullscreen()) {
+				Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode());
+			} else {
+				Gdx.graphics.setWindowedMode(800, 600);
+			}
+		}
+	}
+
+	private void spawnRaindrop() {
+		Drop raindrop = new Drop(dropImg, MathUtils.random(0, 800 - 64), 550, world);
+		raindrops.add(raindrop);
+		lastDropTime = TimeUtils.nanoTime();
+	}
+
+	@Override
+	public void resize(int width, int height) {
+		/* nothing to do */
+	}
+
+	@Override
+	public void pause() {
+		/* nothing to do */
+	}
+
+	@Override
+	public void resume() {
+		/* nothing to do */
+	}
+
+	@Override
+	public void hide() {
+		/* nothing to do */
+	}
+
+	@Override
+	public void dispose() {
+		dropImg.dispose();
+		bucketImg.dispose();
+		gardenImg.dispose();
+		world.dispose();
+		debugRenderer.dispose();
+	}
+
+}
diff --git a/MyFirstGame/core/src/cz/vsb/kp/MainMenuScreen.java b/MyFirstGame/core/src/cz/vsb/kp/MainMenuScreen.java
new file mode 100644
index 0000000000000000000000000000000000000000..40562dcea63da4faeb9359caec3b14e27455f65b
--- /dev/null
+++ b/MyFirstGame/core/src/cz/vsb/kp/MainMenuScreen.java
@@ -0,0 +1,72 @@
+package cz.vsb.kp;
+
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.Screen;
+import com.badlogic.gdx.graphics.OrthographicCamera;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.utils.ScreenUtils;
+
+public class MainMenuScreen implements Screen {
+
+	private final DropGame dropGame;
+	private OrthographicCamera camera;
+	private Texture gardenImg;
+
+	public MainMenuScreen(final DropGame dropGame) {
+		this.dropGame = dropGame;
+		camera = new OrthographicCamera();
+		camera.setToOrtho(false, 800, 480);
+		gardenImg = new Texture("garden.png");
+	}
+
+	@Override
+	public void show() {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void render(float delta) {
+		ScreenUtils.clear(0, 0, 0.2f, 1);
+
+		camera.update();
+		dropGame.batch.setProjectionMatrix(camera.combined);
+
+		dropGame.batch.begin();
+		dropGame.batch.draw(gardenImg, 0, 0);
+		dropGame.font.draw(dropGame.batch, "Welcome to Drop!!! ", 100, 150);
+		dropGame.font.draw(dropGame.batch, "Tap anywhere to begin!", 100, 100);
+		dropGame.batch.end();
+
+		if (Gdx.input.isTouched()) {
+			dropGame.setScreen(new GardenScreen(dropGame));
+			dispose();
+		}
+	}
+
+	@Override
+	public void resize(int width, int height) {
+
+	}
+
+	@Override
+	public void pause() {
+
+	}
+
+	@Override
+	public void resume() {
+
+	}
+
+	@Override
+	public void hide() {
+
+	}
+
+	@Override
+	public void dispose() {
+		gardenImg.dispose();
+	}
+
+}
diff --git a/MyFirstGame/core/src/cz/vsb/kp/PhysicsGame.java b/MyFirstGame/core/src/cz/vsb/kp/PhysicsGame.java
new file mode 100644
index 0000000000000000000000000000000000000000..e4264ba4c97b6011e048e8139ca2d1ca5e42b20d
--- /dev/null
+++ b/MyFirstGame/core/src/cz/vsb/kp/PhysicsGame.java
@@ -0,0 +1,115 @@
+package cz.vsb.kp;
+
+import com.badlogic.gdx.ApplicationAdapter;
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.InputAdapter;
+import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.graphics.OrthographicCamera;
+import com.badlogic.gdx.math.MathUtils;
+import com.badlogic.gdx.math.Vector2;
+import com.badlogic.gdx.math.Vector3;
+import com.badlogic.gdx.physics.box2d.Body;
+import com.badlogic.gdx.physics.box2d.BodyDef;
+import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
+import com.badlogic.gdx.physics.box2d.CircleShape;
+import com.badlogic.gdx.physics.box2d.EdgeShape;
+import com.badlogic.gdx.physics.box2d.PolygonShape;
+import com.badlogic.gdx.physics.box2d.World;
+
+public class PhysicsGame extends ApplicationAdapter {
+	World world;
+	OrthographicCamera camera;
+	Box2DDebugRenderer debugRenderer;
+
+	@Override
+	public void create () {
+		world = new World(new Vector2(0, -10), true);
+		camera = new OrthographicCamera(50, 25);
+		debugRenderer = new Box2DDebugRenderer();
+
+		// ground
+		createEdge(BodyDef.BodyType.StaticBody, -20, -10f, 20, -10f, 0);
+		// left wall
+		createEdge(BodyDef.BodyType.StaticBody, -20, -10, -20, 10, 0);
+		// right wall
+		createEdge(BodyDef.BodyType.StaticBody, 20, -10, 20, 10, 0);
+
+		createCircle(BodyDef.BodyType.DynamicBody, 0, 0, 1, 3);
+
+		Gdx.input.setInputProcessor(new InputAdapter() {
+
+			@Override
+			public boolean touchDown (int x, int y, int pointer, int button) {
+
+				Vector3 touchedPoint = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
+				camera.unproject(touchedPoint);
+
+				if(MathUtils.randomBoolean()) {
+					createBox(BodyDef.BodyType.DynamicBody, touchedPoint.x, touchedPoint.y, 1, 1, 1);
+				}
+				else{
+					createCircle(BodyDef.BodyType.DynamicBody, touchedPoint.x, touchedPoint.y, 1, 3);
+				}
+
+				return true;
+			}
+		});
+	}
+
+	@Override
+	public void render () {
+		Gdx.gl.glClearColor(.125f, .125f, .125f, 1);
+		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
+
+		debugRenderer.render(world, camera.combined);
+		world.step(1 / 60f, 6, 2);
+	}
+	
+	@Override
+	public void dispose () {
+		world.dispose();
+		debugRenderer.dispose();
+	}
+
+	private Body createBox(BodyDef.BodyType type, float x, float y, float width, float height, float density) {
+		PolygonShape poly = new PolygonShape();
+		poly.setAsBox(width, height);
+
+		BodyDef def = new BodyDef();
+		def.type = type;
+		Body body = world.createBody(def);
+		body.createFixture(poly, density);
+		body.setTransform(x, y, 0);
+		poly.dispose();
+
+		return body;
+	}
+
+	private Body createEdge(BodyDef.BodyType type, float x1, float y1, float x2, float y2, float density) {
+		EdgeShape poly = new EdgeShape();
+		poly.set(new Vector2(0, 0), new Vector2(x2 - x1, y2 - y1));
+
+		BodyDef def = new BodyDef();
+		def.type = type;
+		Body body = world.createBody(def);
+		body.createFixture(poly, density);
+		body.setTransform(x1, y1, 0);
+		poly.dispose();
+
+		return body;
+	}
+
+	private Body createCircle(BodyDef.BodyType type, float x, float y, float radius, float density) {
+		CircleShape poly = new CircleShape();
+		poly.setRadius(radius);
+
+		BodyDef def = new BodyDef();
+		def.type = type;
+		Body body = world.createBody(def);
+		body.createFixture(poly, density);
+		body.setTransform(x, y, 0);
+		poly.dispose();
+
+		return body;
+	}
+}
\ No newline at end of file
diff --git a/MyFirstGame/desktop/src/cz/vsb/kp/DesktopLauncher.java b/MyFirstGame/desktop/src/cz/vsb/kp/DesktopLauncher.java
index b60b18bd2e60e50521332a397d3ab3453cbb0b3d..1e804534d03169dc4ebe2bd9d3168495a08ad5cf 100644
--- a/MyFirstGame/desktop/src/cz/vsb/kp/DesktopLauncher.java
+++ b/MyFirstGame/desktop/src/cz/vsb/kp/DesktopLauncher.java
@@ -2,7 +2,7 @@ package cz.vsb.kp;
 
 import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
 import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
-import cz.vsb.kp.Game;
+import cz.vsb.kp.DropGame;
 
 // Please note that on macOS your application needs to be started with the -XstartOnFirstThread JVM argument
 public class DesktopLauncher {
@@ -10,6 +10,6 @@ public class DesktopLauncher {
 		Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
 		config.setForegroundFPS(60);
 		config.setTitle("My First Game");
-		new Lwjgl3Application(new Game(), config);
+		new Lwjgl3Application(new DropGame(), config);
 	}
 }
diff --git a/MyFirstGame/html/src/cz/vsb/kp/client/HtmlLauncher.java b/MyFirstGame/html/src/cz/vsb/kp/client/HtmlLauncher.java
index 2dff328c3941beb43da27c32f20bfbe4d852a05e..365cdd83814a0b20af6a670cb32fa825aeb62606 100644
--- a/MyFirstGame/html/src/cz/vsb/kp/client/HtmlLauncher.java
+++ b/MyFirstGame/html/src/cz/vsb/kp/client/HtmlLauncher.java
@@ -3,7 +3,7 @@ package cz.vsb.kp.client;
 import com.badlogic.gdx.ApplicationListener;
 import com.badlogic.gdx.backends.gwt.GwtApplication;
 import com.badlogic.gdx.backends.gwt.GwtApplicationConfiguration;
-import cz.vsb.kp.Game;
+import cz.vsb.kp.DropGame;
 
 public class HtmlLauncher extends GwtApplication {
 
@@ -17,6 +17,6 @@ public class HtmlLauncher extends GwtApplication {
 
         @Override
         public ApplicationListener createApplicationListener () {
-                return new Game();
+                return new DropGame();
         }
 }
\ No newline at end of file