diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 00a51aff5e5a83d6313f3bd15fadc601a205b66f..0000000000000000000000000000000000000000
--- a/.gitattributes
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# https://help.github.com/articles/dealing-with-line-endings/
-#
-# These are explicitly windows files and should use crlf
-*.bat           text eol=crlf
-
diff --git a/.gitignore b/.gitignore
index f198ec547b9190a094cdd1e56458a0ed7b8c23c8..c38e243329bc6a5ccc984302fda53a9e1fc1a7e2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -213,4 +213,5 @@ gradle-app.setting
 ### Gradle Patch ###
 **/build/
 
-# End of https://www.gitignore.io/api/java,gradle,eclipse,intellij,visualstudiocode
\ No newline at end of file
+# End of https://www.gitignore.io/api/java,gradle,eclipse,intellij,visualstudiocode
+/cin
diff --git a/.project b/.project
deleted file mode 100644
index 351f8ea06fa2290fafbf59ef61f0a92beeda7245..0000000000000000000000000000000000000000
--- a/.project
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>campus</name>
-	<comment>Project dormitory created by Buildship.</comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
-	</natures>
-	<filteredResources>
-		<filter>
-			<id>1649246802409</id>
-			<name></name>
-			<type>30</type>
-			<matcher>
-				<id>org.eclipse.core.resources.regexFilterMatcher</id>
-				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
-			</matcher>
-		</filter>
-	</filteredResources>
-</projectDescription>
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1a3a35fd0bfba66fe3dda08844dba890a98e6340
--- /dev/null
+++ b/README.md
@@ -0,0 +1,67 @@
+# Formen für ein CAD-Programm
+
+**Voraussetzung**:
+Für die letzte Teilaufgabe wird die Vorlesung zum Thema Ausnahmebehandlung (Exception Handling) vorausgesetzt.
+
+**Ziel**:
+Wiederholung wichtiger Konzepte aus dem „Praktikum Programmieren“ wie Spezifikationsvererbung, dynamisches Binden, Casting.
+
+**Dauer**:
+< 1 Stunde
+
+## Aufgabenstellung
+Für ein CAD-Programm sollen grundlegende Klassen für zweidimensionale Formen (engl. *Shape*) programmiert werden.
+
+### (a) Rechteck und Kreis implementieren
+Implementieren Sie eine Klasse, die ein Rechteck beschreibt (engl. *Rectangle*), und eine Klasse, die einen Kreis beschreibt (engl. *Circle*). Beide Klassen sollen geeignete Konstruktoren, Felder und Methoden enthalten. Diese Klassen implementieren das Interface `Shape`:
+
+```java
+package io.fp.shapes;
+
+public interface Shape {
+    // Die Methode area() gibt den Flächeninhalt der Form zurück
+    double area();
+    
+    // Die Methode circumference() gibt den Umfang der Form zurück
+    double circumference();
+}
+```
+
+Schreiben Sie eine ausführbare Klasse `App`, um die Methoden der beiden Klassen zu überprüfen.
+
+**Hinweis:** Mathematische Funktionen und Konstanten wie π sind in der Klasse `java.lang.Math` als statische Elemente verfügbar (z.B. `Math.PI`; siehe Java-API Dokumentation).
+
+### (b) Klasse `Util` erstellen
+Schreiben Sie eine Klasse `Util`, die zwei statische Methoden enthält, welche den Gesamtflächenbedarf bzw. den Gesamtumfang aller Formen in einem Array berechnen. Die beiden Methoden haben folgende Signatur:
+
+```java
+public static double accumulateArea(Shape[] shapes) {
+    // Implementierung
+}
+
+public static double accumulateCircumference(Shape[] shapes) {
+    // Implementierung
+}
+```
+
+Erweitern Sie die ausführbare Klasse `App` aus Teilaufgabe (a) so, dass Sie ein `Shape`-Array erstellen und es mit diversen Rechtecken und Kreisen füllen. Verwenden Sie die Methoden aus der Klasse `Util`, um die Gesamtfläche bzw. den Gesamtumfang der Objekte im Array zu berechnen.
+
+### (c) Schnittstellen vs. Objekt-Typen
+Ein C-Programmierer, der auch PHP4 toll findet, sieht Ihren Code und sagt: "Das kapiere ich nicht! Wozu verwendest Du Schnittstellen? Das geht doch auch ohne!" Er fügt der Klasse `Util` eine Methode mit folgender Signatur hinzu, die tatsächlich das Gleiche macht, ohne die Schnittstelle `Shape` zu verwenden:
+
+```java
+public static double accumulateArea(Object[] objects) {
+    // Implementierung
+}
+```
+
+Programmieren Sie diese Methode. Überlegen Sie, welche Nachteile diese Methode gegenüber der Variante hat, die die Schnittstelle `Shape` verwendet.
+
+### (d) Rechteck mit zentriertem Kreis (RectangleCircle)
+Erstellen Sie eine neue Form unter Verwendung der Klassen aus Teilaufgabe (a). Die neue Form ist ein Rechteck, das einen Kreis zentriert enthält (Klasse `RectangleCircle`). Zur Fläche dieser neuen Form zählt nur der Bereich, der sich zwischen den Rechteckbegrenzungen und dem Kreis befindet. Der Umfang ist durch die Summe der Umfänge von Kreis und Rechteck gegeben.
+
+Überlegen Sie sich, welche Konstruktoren, Felder und Methoden nötig sind. Die neue Klasse muss ebenfalls die Schnittstelle `Shape` implementieren.
+
+**Hinweis:** Versuchen Sie, so viel wie möglich aus Aufgabe (a) wiederzuverwenden!
+
+Verändern Sie anschließend Ihre ausführbare Klasse `App` so, dass Sie auch Objekte der Klasse `RectangleCircle` im Array speichern und damit deren Flächeninhalt bzw. Umfang in die Berechnung einfließt.
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index d57e3d2076ff3caf64b893d6392f953a9800ec4a..0000000000000000000000000000000000000000
--- a/build.gradle
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * This file was generated by the Gradle 'init' task.
- *
- * This generated file contains a sample Java project to get you started.
- * For more details take a look at the Java Quickstart chapter in the Gradle
- * User Manual available at https://docs.gradle.org/6.3/userguide/tutorial_java_projects.html
- */
-
-plugins {
-    // Apply the java plugin to add support for Java
-    id 'java'
-
-    // Apply the application plugin to add support for building a CLI application.
-    id 'application'
-}
-
-repositories {
-    // Use jcenter for resolving dependencies.
-    // You can declare any Maven/Ivy/file repository here.
-    jcenter()
-}
-
-dependencies {
-    // Use JUnit Jupiter for testing.
-    testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
-
-    // This dependency is used by the application.
-    implementation 'com.google.guava:guava:30.1.1-jre'
-}
-
-application {
-    // Define the main class for the application.
-    mainClassName = 'io.fp.shapes.App'
-}
-
-test {
-    // Use junit platform for unit tests
-    useJUnitPlatform()
-}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 41d9927a4d4fb3f96a785543079b8df6723c946b..0000000000000000000000000000000000000000
Binary files a/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index b5a36cd9959a43e0b28286b8a3bcbeee19b37443..0000000000000000000000000000000000000000
--- a/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-<<<<<<< HEAD
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
-=======
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip
->>>>>>> 78279dcb3c554ee08f52eadf3a87859dd55d75ec
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
deleted file mode 100644
index 1b6c787337ffb79f0e3cf8b1e9f00f680a959de1..0000000000000000000000000000000000000000
--- a/gradlew
+++ /dev/null
@@ -1,234 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 2015-2021 the original authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-#
-#   Gradle start up script for POSIX generated by Gradle.
-#
-#   Important for running:
-#
-#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-#       noncompliant, but you have some other compliant shell such as ksh or
-#       bash, then to run this script, type that shell name before the whole
-#       command line, like:
-#
-#           ksh Gradle
-#
-#       Busybox and similar reduced shells will NOT work, because this script
-#       requires all of these POSIX shell features:
-#         * functions;
-#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-#         * compound commands having a testable exit status, especially «case»;
-#         * various built-in commands including «command», «set», and «ulimit».
-#
-#   Important for patching:
-#
-#   (2) This script targets any POSIX shell, so it avoids extensions provided
-#       by Bash, Ksh, etc; in particular arrays are avoided.
-#
-#       The "traditional" practice of packing multiple parameters into a
-#       space-separated string is a well documented source of bugs and security
-#       problems, so this is (mostly) avoided, by progressively accumulating
-#       options in "$@", and eventually passing that to Java.
-#
-#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-#       see the in-line comments for details.
-#
-#       There are tweaks for specific operating systems such as AIX, CygWin,
-#       Darwin, MinGW, and NonStop.
-#
-#   (3) This script is generated from the Groovy template
-#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-#       within the Gradle project.
-#
-#       You can find Gradle at https://github.com/gradle/gradle/.
-#
-##############################################################################
-
-# Attempt to set APP_HOME
-
-# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
-    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
-    [ -h "$app_path" ]
-do
-    ls=$( ls -ld "$app_path" )
-    link=${ls#*' -> '}
-    case $link in             #(
-      /*)   app_path=$link ;; #(
-      *)    app_path=$APP_HOME$link ;;
-    esac
-done
-
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
-APP_BASE_NAME=${0##*/}
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
-
-warn () {
-    echo "$*"
-} >&2
-
-die () {
-    echo
-    echo "$*"
-    echo
-    exit 1
-} >&2
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "$( uname )" in                #(
-  CYGWIN* )         cygwin=true  ;; #(
-  Darwin* )         darwin=true  ;; #(
-  MSYS* | MINGW* )  msys=true    ;; #(
-  NONSTOP* )        nonstop=true ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD=$JAVA_HOME/jre/sh/java
-    else
-        JAVACMD=$JAVA_HOME/bin/java
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD=java
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
-    case $MAX_FD in #(
-      max*)
-        MAX_FD=$( ulimit -H -n ) ||
-            warn "Could not query maximum file descriptor limit"
-    esac
-    case $MAX_FD in  #(
-      '' | soft) :;; #(
-      *)
-        ulimit -n "$MAX_FD" ||
-            warn "Could not set maximum file descriptor limit to $MAX_FD"
-    esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-#   * args from the command line
-#   * the main class name
-#   * -classpath
-#   * -D...appname settings
-#   * --module-path (only if needed)
-#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
-    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
-    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
-    JAVACMD=$( cygpath --unix "$JAVACMD" )
-
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    for arg do
-        if
-            case $arg in                                #(
-              -*)   false ;;                            # don't mess with options #(
-              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
-                    [ -e "$t" ] ;;                      #(
-              *)    false ;;
-            esac
-        then
-            arg=$( cygpath --path --ignore --mixed "$arg" )
-        fi
-        # Roll the args list around exactly as many times as the number of
-        # args, so each arg winds up back in the position where it started, but
-        # possibly modified.
-        #
-        # NB: a `for` loop captures its iteration list before it begins, so
-        # changing the positional parameters here affects neither the number of
-        # iterations, nor the values presented in `arg`.
-        shift                   # remove old arg
-        set -- "$@" "$arg"      # push replacement arg
-    done
-fi
-
-# Collect all arguments for the java command;
-#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-#     shell script including quotes and variable substitutions, so put them in
-#     double quotes to make sure that they get re-expanded; and
-#   * put everything else in single quotes, so that it's not re-expanded.
-
-set -- \
-        "-Dorg.gradle.appname=$APP_BASE_NAME" \
-        -classpath "$CLASSPATH" \
-        org.gradle.wrapper.GradleWrapperMain \
-        "$@"
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-#   set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
-        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
-        xargs -n1 |
-        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
-        tr '\n' ' '
-    )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
deleted file mode 100644
index 107acd32c4e687021ef32db511e8a206129b88ec..0000000000000000000000000000000000000000
--- a/gradlew.bat
+++ /dev/null
@@ -1,89 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem      https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100644
index 43621cc760e4afdf4cb9308dd5ac963f116b471d..0000000000000000000000000000000000000000
--- a/settings.gradle
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * This file was generated by the Gradle 'init' task.
- *
- * The settings file is used to specify which projects to include in your build.
- *
- * Detailed information about configuring a multi-project build in Gradle can be found
- * in the user manual at https://docs.gradle.org/6.3/userguide/multi_project_builds.html
- */
-
-rootProject.name = 'campus'
diff --git a/src/main/java/io/fp/shapes/App.java b/src/main/java/io/fp/shapes/App.java
deleted file mode 100644
index 8904315bf8cd30ac6619df31300a38df3e172f72..0000000000000000000000000000000000000000
--- a/src/main/java/io/fp/shapes/App.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * This Java source file was generated by the Gradle 'init' task.
- */
-package io.fp.shapes;
-
-public class App {
-
-    public static void main(String[] args) {
-        try {
-            Circle c1 = new Circle(5.0);
-            Rectangle r1 = new Rectangle(2.0, 10.0);
-            Circle c2 = new Circle(20.0);
-            Rectangle r2 = new Rectangle(23.0, 100.0);
-            RectangleCircle rc1 = new RectangleCircle(10.0, 25.0, 30.0);
-
-            System.out.println(c2.area());
-            System.out.println(c2.circumference());
-            System.out.println(r2.area());
-            System.out.println(r2.circumference());
-            System.out.println(rc1.area());
-            System.out.println(rc1.circumference());
-
-            Shape[] shapes = new Shape[10];
-            shapes[0] = c1;
-            shapes[1] = c2;
-            shapes[2] = r1;
-            shapes[3] = r2;
-            shapes[4] = rc1;
-
-            System.out.println(Util.accumulateArea(shapes));
-            System.out.println(Util.accumulateCircumference(shapes));
-
-            Object[] objects = shapes;
-            System.out.println(Util.accumulateArea(objects));
-            System.out.println(Util.accumulateCircumference(objects));
-        } catch (SizeException e) {
-            System.out.println("Something went wrong with the creation of RectangleCircle");
-        }
-
-    }
-}
diff --git a/src/main/java/io/fp/shapes/SizeException.java b/src/main/java/io/fp/shapes/SizeException.java
deleted file mode 100644
index 12bc9c243e4ef50e7842a9f96ceb3a186083e99a..0000000000000000000000000000000000000000
--- a/src/main/java/io/fp/shapes/SizeException.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package io.fp.shapes;
-
-public class SizeException extends Exception {
-
-	public SizeException() {
-	}
-
-	public SizeException(String message) {
-		super(message);
-	}
-
-	public SizeException(Throwable cause) {
-		super(cause);
-	}
-
-	public SizeException(String message, Throwable cause) {
-		super(message, cause);
-	}
-
-	public SizeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
-		super(message, cause, enableSuppression, writableStackTrace);
-	}
-
-}
diff --git a/src/main/java/io/fp/shapes/Test.java b/src/main/java/io/fp/shapes/Test.java
deleted file mode 100644
index 7c1c36a3a3a4473339ca5ea5f1674f83fd114ab6..0000000000000000000000000000000000000000
--- a/src/main/java/io/fp/shapes/Test.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package io.fp.shapes;
-
-public class Test {
-
-	public static void main(String[] args) throws SizeException{
-		Circle c1 = new Circle(5.0);
-		Rectangle r1 = new Rectangle(2.0, 10.0);
-		Circle c2 = new Circle(20.0);
-		Rectangle r2 = new Rectangle(23.0, 100.0);
-		RectangleCircle rc1 = new RectangleCircle(10.0, 25.0, 30.0);
-		
-		System.out.println(c2.area());
-		System.out.println(c2.circumference());
-		System.out.println(r2.area());
-		System.out.println(r2.circumference());
-		System.out.println(rc1.area());
-		System.out.println(rc1.circumference());
-		
-		
-		Shape[] shapes = new Shape[10];
-		shapes[0]=c1;
-		shapes[1]=c2;
-		shapes[2]=r1;
-		shapes[3]=r2;
-		shapes[4]=rc1;
-		
-		System.out.println(Util.accumulateArea(shapes));
-		System.out.println(Util.accumulateCircumference(shapes));
-		
-		Object[] objects = shapes;
-		System.out.println(Util.accumulateArea(objects));
-		System.out.println(Util.accumulateCircumference(objects));
-		
-
-	}
-
-}
diff --git a/src/shapes/App.java b/src/shapes/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ef07d367623cf847655394b6fbf0ab9764c5c86
--- /dev/null
+++ b/src/shapes/App.java
@@ -0,0 +1,32 @@
+package shapes;
+
+public class App {
+    public static void main(String[] args) {
+        Circle c1 = new Circle(5.0);
+        Rectangle r1 = new Rectangle(2.0, 10.0);
+        Circle c2 = new Circle(20.0);
+        Rectangle r2 = new Rectangle(23.0, 100.0);
+        RectangleCircle rc1 = new RectangleCircle(10.0, 25.0, 30.0);
+
+        System.out.println("First circle area: " + c1.area());
+        System.out.println("First circle circumference: " + c1.circumference());
+        System.out.println("First rectangle area: " + r1.area());
+        System.out.println("First rectangle circumference: " + r1.circumference());
+        System.out.println("First rectangle circle area: " + rc1.area());
+        System.out.println("First rectangle circle circumference: " + rc1.circumference());
+
+        Shape[] shapes = new Shape[10];
+        shapes[0] = c1;
+        shapes[1] = c2;
+        shapes[2] = r1;
+        shapes[3] = r2;
+        shapes[4] = rc1;
+
+        System.out.println("Accumulation of areas: " + Util.accumulateArea(shapes));
+        System.out.println("Accumulation of circumferences: " + Util.accumulateCircumference(shapes));
+
+        Object[] objects = shapes;
+        System.out.println("Accumulation of areas: " + Util.accumulateArea(objects));
+        System.out.println("Accumulation of circumferences: " + Util.accumulateCircumference(objects));
+    }
+}
diff --git a/src/main/java/io/fp/shapes/Circle.java b/src/shapes/Circle.java
similarity index 91%
rename from src/main/java/io/fp/shapes/Circle.java
rename to src/shapes/Circle.java
index 4b4c7124720ddde01b59a2867c57d6f98cfd139e..6bb53aaac8852e266e4908e010d9cf3ccfffb792 100644
--- a/src/main/java/io/fp/shapes/Circle.java
+++ b/src/shapes/Circle.java
@@ -1,13 +1,11 @@
-package io.fp.shapes;
+package shapes;
 
 import static java.lang.Math.PI;
 
 public class Circle implements Shape {
-	
 	private double radius;
 	
 	public Circle(double radius) {
-		super();
 		this.radius = radius;
 	}
 
@@ -28,7 +26,4 @@ public class Circle implements Shape {
 	public void setRadius(double radius) {
 		this.radius = radius;
 	}
-	
-	
-
 }
diff --git a/src/main/java/io/fp/shapes/Rectangle.java b/src/shapes/Rectangle.java
similarity index 83%
rename from src/main/java/io/fp/shapes/Rectangle.java
rename to src/shapes/Rectangle.java
index 8be4464547742ec79a6a5545a6390dcc17a5f6b7..dff0a71eb4d12dce70439f5ea8c2e2556cbd755b 100644
--- a/src/main/java/io/fp/shapes/Rectangle.java
+++ b/src/shapes/Rectangle.java
@@ -1,39 +1,38 @@
-package io.fp.shapes;
+package shapes;
 
 public class Rectangle implements Shape {
-	
+
 	private double width;
 	private double height;
-	
+
 	public Rectangle(double width, double height) {
-		super();
 		this.width = width;
 		this.height = height;
 	}
 
 	@Override
 	public double area() {
-		return width*height;
+		return width * height;
 	}
 
 	@Override
 	public double circumference() {
-		return 2*width+2*height;
+		return 2 * width + 2 * height;
 	}
 
 	public void setWidth(double width) {
 		this.width = width;
 	}
-	
+
 	public double getWidth() {
 		return width;
 	}
-	
+
 	public void setHeight(double height) {
 		this.height = height;
 	}
-	
+
 	public double getHeight() {
 		return height;
-	}	
+	}
 }
diff --git a/src/main/java/io/fp/shapes/RectangleCircle.java b/src/shapes/RectangleCircle.java
similarity index 51%
rename from src/main/java/io/fp/shapes/RectangleCircle.java
rename to src/shapes/RectangleCircle.java
index e5483772d1c8b369ccf1adc17fb42a304ea66281..cd3450f7a5758e271407043e99adf7841e95968d 100644
--- a/src/main/java/io/fp/shapes/RectangleCircle.java
+++ b/src/shapes/RectangleCircle.java
@@ -1,12 +1,10 @@
-package io.fp.shapes;
+package shapes;
 
 public class RectangleCircle implements Shape {
-	
 	private Circle c;
 	private Rectangle r;
-	
-	public RectangleCircle(double radius, double width, double height) throws SizeException{
-		validate(radius, width, height);
+
+	public RectangleCircle(double radius, double width, double height) {
 		c = new Circle(radius);
 		r = new Rectangle(width, height);
 	}
@@ -20,36 +18,28 @@ public class RectangleCircle implements Shape {
 	public double circumference() {
 		return r.circumference() + c.circumference();
 	}
-	
-	public void setRadius(double radius) throws SizeException {
-		validate(radius, this.r.getWidth(), this.r.getHeight());
+
+	public void setRadius(double radius) {
 		c.setRadius(radius);
 	}
-	
+
 	public double getRadius() {
 		return c.getRadius();
 	}
-	
-	public void setWidth(double width) throws SizeException {
-		validate(c.getRadius(), width, r.getHeight());
+
+	public void setWidth(double width) {
 		r.setWidth(width);
 	}
-	
+
 	public double getWidth() {
 		return r.getWidth();
 	}
 
-	public void setHeight(double height) throws SizeException {
-		validate(c.getRadius(), r.getWidth(), height);
+	public void setHeight(double height) {
 		r.setHeight(height);
 	}
-	
+
 	public double getHeight() {
 		return r.getHeight();
 	}
-
-	private void validate(double radius, double width, double height) throws SizeException {
-		if (width<=2*radius||height<=2*radius)
-			throw new SizeException();
-	} 
-}
+}
\ No newline at end of file
diff --git a/src/main/java/io/fp/shapes/Shape.java b/src/shapes/Shape.java
similarity index 73%
rename from src/main/java/io/fp/shapes/Shape.java
rename to src/shapes/Shape.java
index ba6ce74799c5815c8344563d4b45c7ce06dd89ae..332442ae17e6e13b1734352848773505c408cf69 100644
--- a/src/main/java/io/fp/shapes/Shape.java
+++ b/src/shapes/Shape.java
@@ -1,8 +1,6 @@
-package io.fp.shapes;
+package shapes;
 
 public interface Shape {
-	
 	double area();
 	double circumference();
-
 }
diff --git a/src/main/java/io/fp/shapes/Util.java b/src/shapes/Util.java
similarity index 64%
rename from src/main/java/io/fp/shapes/Util.java
rename to src/shapes/Util.java
index 45ffe0a6c795f67468dcac96450b82dc560de971..004b280f732f12b1cf2a0bf6c62ae7a55fd358b1 100644
--- a/src/main/java/io/fp/shapes/Util.java
+++ b/src/shapes/Util.java
@@ -1,13 +1,11 @@
-package io.fp.shapes;
+package shapes;
 
 public class Util {
-
 	public static double accumulateArea(Shape[] shapes) {
-		
 		double result = 0.0;
 		for (Shape shape : shapes) {
-			if (shape!=null)
-				result+=shape.area();
+			if (shape != null)
+				result += shape.area();
 		}
 		return result;
 	}
@@ -15,46 +13,45 @@ public class Util {
 	public static double accumulateCircumference(Shape[] shapes) {
 		double result = 0.0;
 		for (Shape shape : shapes) {
-			if (shape!=null)
-				result+=shape.circumference();
+			if (shape != null)
+				result += shape.circumference();
 		}
 		return result;
 	}
-	
+
 	public static double accumulateArea(Object[] objects) {
 		double result = 0.0;
 		for (Object object : objects) {
-			if (object!=null) {
+			if (object != null) {
 				if (object instanceof Rectangle) {
-					result+=((Rectangle)object).area();
+					result += ((Rectangle) object).area();
 				}
 				if (object instanceof Circle) {
-					result+=((Circle)object).area();
+					result += ((Circle) object).area();
 				}
 				if (object instanceof RectangleCircle) {
-					result+=((RectangleCircle)object).area();
+					result += ((RectangleCircle) object).area();
 				}
 			}
 		}
 		return result;
 	}
-	
+
 	public static double accumulateCircumference(Object[] objects) {
 		double result = 0.0;
 		for (Object object : objects) {
-			if (object!=null) {
+			if (object != null) {
 				if (object instanceof Rectangle) {
-					result+=((Rectangle)object).circumference();
+					result += ((Rectangle) object).circumference();
 				}
 				if (object instanceof Circle) {
-					result+=((Circle)object).circumference();
-				} 
+					result += ((Circle) object).circumference();
+				}
 				if (object instanceof RectangleCircle) {
-					result+=((RectangleCircle)object).circumference();
+					result += ((RectangleCircle) object).circumference();
 				}
 			}
 		}
 		return result;
 	}
-
 }
diff --git a/src/test/java/io/fp/shapes/ShapesTest.java b/src/test/java/io/fp/shapes/ShapesTest.java
deleted file mode 100644
index 46753556e92e407d9d2bb38e8e7fe2273b7231e8..0000000000000000000000000000000000000000
--- a/src/test/java/io/fp/shapes/ShapesTest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package io.fp.shapes;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import org.junit.jupiter.api.Test;
-
-public class ShapesTest {
-
-    @Test
-    void testIncorrectCreation() {
-        assertThrows(SizeException.class, () -> {
-            new RectangleCircle(2, 1, 1);
-        });
-    }
-}
\ No newline at end of file