diff --git a/.idea/JavaSMT.iml b/.idea/JavaSMT.iml
index 4857c85527..9d56bfe86d 100644
--- a/.idea/JavaSMT.iml
+++ b/.idea/JavaSMT.iml
@@ -1,15 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-This file is part of JavaSMT,
-an API wrapper for a collection of SMT solvers:
-https://github.com/sosy-lab/java-smt
-
-SPDX-FileCopyrightText: 2020 Dirk Beyer <https://www.sosy-lab.org>
-
-SPDX-License-Identifier: Apache-2.0
--->
-
 <module type="JAVA_MODULE" version="4">
   <component name="NewModuleRootManager">
     <output url="file://$MODULE_DIR$/bin" />
@@ -313,210 +302,15 @@ SPDX-License-Identifier: Apache-2.0
         <SOURCES />
       </library>
     </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES />
+        <JAVADOC />
+        <SOURCES>
+          <root url="jar://$USER_HOME$/Bachelorarbeit/apron/japron/apron.jar!/" />
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="apron" level="application" />
   </component>
-  <component name="org.twodividedbyzero.idea.findbugs">
-    <option name="_basePreferences">
-      <map>
-        <entry key="property.analysisEffortLevel" value="default" />
-        <entry key="property.analyzeAfterAutoMake" value="false" />
-        <entry key="property.analyzeAfterCompile" value="false" />
-        <entry key="property.annotationGutterIconEnabled" value="true" />
-        <entry key="property.annotationSuppressWarningsClass" value="edu.umd.cs.findbugs.annotations.SuppressFBWarnings" />
-        <entry key="property.annotationTextRangeMarkupEnabled" value="true" />
-        <entry key="property.exportAsHtml" value="true" />
-        <entry key="property.exportAsXml" value="true" />
-        <entry key="property.exportBaseDir" value="" />
-        <entry key="property.exportCreateArchiveDir" value="false" />
-        <entry key="property.exportOpenBrowser" value="true" />
-        <entry key="property.minPriorityToReport" value="Medium" />
-        <entry key="property.runAnalysisInBackground" value="false" />
-        <entry key="property.showHiddenDetectors" value="false" />
-        <entry key="property.toolWindowToFront" value="true" />
-      </map>
-    </option>
-    <option name="_detectors">
-      <map>
-        <entry key="AppendingToAnObjectOutputStream" value="true" />
-        <entry key="AtomicityProblem" value="true" />
-        <entry key="BadAppletConstructor" value="false" />
-        <entry key="BadResultSetAccess" value="true" />
-        <entry key="BadSyntaxForRegularExpression" value="true" />
-        <entry key="BadUseOfReturnValue" value="true" />
-        <entry key="BadlyOverriddenAdapter" value="true" />
-        <entry key="BooleanReturnNull" value="true" />
-        <entry key="BuildInterproceduralCallGraph" value="false" />
-        <entry key="BuildObligationPolicyDatabase" value="true" />
-        <entry key="BuildStringPassthruGraph" value="true" />
-        <entry key="CallToUnsupportedMethod" value="false" />
-        <entry key="CalledMethods" value="true" />
-        <entry key="CheckCalls" value="false" />
-        <entry key="CheckExpectedWarnings" value="false" />
-        <entry key="CheckImmutableAnnotation" value="true" />
-        <entry key="CheckRelaxingNullnessAnnotation" value="true" />
-        <entry key="CheckTypeQualifiers" value="true" />
-        <entry key="CloneIdiom" value="true" />
-        <entry key="ComparatorIdiom" value="true" />
-        <entry key="ConfusedInheritance" value="true" />
-        <entry key="ConfusionBetweenInheritedAndOuterMethod" value="true" />
-        <entry key="CovariantArrayAssignment" value="false" />
-        <entry key="CrossSiteScripting" value="true" />
-        <entry key="DefaultEncodingDetector" value="true" />
-        <entry key="DoInsideDoPrivileged" value="true" />
-        <entry key="DontCatchIllegalMonitorStateException" value="true" />
-        <entry key="DontIgnoreResultOfPutIfAbsent" value="true" />
-        <entry key="DontUseEnum" value="true" />
-        <entry key="DroppedException" value="true" />
-        <entry key="DumbMethodInvocations" value="true" />
-        <entry key="DumbMethods" value="true" />
-        <entry key="DuplicateBranches" value="true" />
-        <entry key="EmptyZipFileEntry" value="false" />
-        <entry key="EqualsOperandShouldHaveClassCompatibleWithThis" value="true" />
-        <entry key="ExplicitSerialization" value="true" />
-        <entry key="FieldItemSummary" value="true" />
-        <entry key="FinalizerNullsFields" value="true" />
-        <entry key="FindBadCast2" value="true" />
-        <entry key="FindBadForLoop" value="true" />
-        <entry key="FindBugsSummaryStats" value="true" />
-        <entry key="FindCircularDependencies" value="false" />
-        <entry key="FindComparatorProblems" value="true" />
-        <entry key="FindDeadLocalStores" value="true" />
-        <entry key="FindDoubleCheck" value="true" />
-        <entry key="FindEmptySynchronizedBlock" value="true" />
-        <entry key="FindFieldSelfAssignment" value="true" />
-        <entry key="FindFinalizeInvocations" value="true" />
-        <entry key="FindFloatEquality" value="true" />
-        <entry key="FindFloatMath" value="false" />
-        <entry key="FindHEmismatch" value="true" />
-        <entry key="FindInconsistentSync2" value="true" />
-        <entry key="FindJSR166LockMonitorenter" value="true" />
-        <entry key="FindLocalSelfAssignment2" value="true" />
-        <entry key="FindMaskedFields" value="true" />
-        <entry key="FindMismatchedWaitOrNotify" value="true" />
-        <entry key="FindNakedNotify" value="true" />
-        <entry key="FindNoSideEffectMethods" value="true" />
-        <entry key="FindNonSerializableStoreIntoSession" value="false" />
-        <entry key="FindNonSerializableValuePassedToWriteObject" value="false" />
-        <entry key="FindNonShortCircuit" value="true" />
-        <entry key="FindNullDeref" value="true" />
-        <entry key="FindNullDerefsInvolvingNonShortCircuitEvaluation" value="true" />
-        <entry key="FindOpenStream" value="true" />
-        <entry key="FindPuzzlers" value="true" />
-        <entry key="FindRefComparison" value="true" />
-        <entry key="FindReturnRef" value="true" />
-        <entry key="FindRoughConstants" value="true" />
-        <entry key="FindRunInvocations" value="true" />
-        <entry key="FindSelfComparison" value="true" />
-        <entry key="FindSelfComparison2" value="true" />
-        <entry key="FindSleepWithLockHeld" value="true" />
-        <entry key="FindSpinLoop" value="true" />
-        <entry key="FindSqlInjection" value="true" />
-        <entry key="FindTwoLockWait" value="true" />
-        <entry key="FindUncalledPrivateMethods" value="true" />
-        <entry key="FindUnconditionalWait" value="true" />
-        <entry key="FindUninitializedGet" value="true" />
-        <entry key="FindUnrelatedTypesInGenericContainer" value="true" />
-        <entry key="FindUnreleasedLock" value="true" />
-        <entry key="FindUnsatisfiedObligation" value="true" />
-        <entry key="FindUnsyncGet" value="true" />
-        <entry key="FindUseOfNonSerializableValue" value="true" />
-        <entry key="FindUselessControlFlow" value="true" />
-        <entry key="FindUselessObjects" value="true" />
-        <entry key="FormatStringChecker" value="true" />
-        <entry key="FunctionsThatMightBeMistakenForProcedures" value="true" />
-        <entry key="HugeSharedStringConstants" value="true" />
-        <entry key="IDivResultCastToDouble" value="true" />
-        <entry key="IncompatMask" value="true" />
-        <entry key="InconsistentAnnotations" value="true" />
-        <entry key="InefficientIndexOf" value="false" />
-        <entry key="InefficientInitializationInsideLoop" value="false" />
-        <entry key="InefficientMemberAccess" value="false" />
-        <entry key="InefficientToArray" value="false" />
-        <entry key="InfiniteLoop" value="true" />
-        <entry key="InfiniteRecursiveLoop" value="true" />
-        <entry key="InheritanceUnsafeGetResource" value="true" />
-        <entry key="InitializationChain" value="true" />
-        <entry key="InitializeNonnullFieldsInConstructor" value="true" />
-        <entry key="InstantiateStaticClass" value="true" />
-        <entry key="IntCast2LongAsInstant" value="true" />
-        <entry key="InvalidJUnitTest" value="true" />
-        <entry key="IteratorIdioms" value="true" />
-        <entry key="LazyInit" value="true" />
-        <entry key="LoadOfKnownNullValue" value="true" />
-        <entry key="LostLoggerDueToWeakReference" value="true" />
-        <entry key="MethodReturnCheck" value="true" />
-        <entry key="Methods" value="true" />
-        <entry key="MultithreadedInstanceAccess" value="true" />
-        <entry key="MutableEnum" value="true" />
-        <entry key="MutableLock" value="true" />
-        <entry key="MutableStaticFields" value="true" />
-        <entry key="Naming" value="true" />
-        <entry key="Noise" value="false" />
-        <entry key="NoiseNullDeref" value="false" />
-        <entry key="NoteAnnotationRetention" value="true" />
-        <entry key="NoteCheckReturnValueAnnotations" value="true" />
-        <entry key="NoteDirectlyRelevantTypeQualifiers" value="true" />
-        <entry key="NoteJCIPAnnotation" value="true" />
-        <entry key="NoteNonNullAnnotations" value="false" />
-        <entry key="NoteNonnullReturnValues" value="false" />
-        <entry key="NoteSuppressedWarnings" value="true" />
-        <entry key="NoteUnconditionalParamDerefs" value="true" />
-        <entry key="NumberConstructor" value="true" />
-        <entry key="OptionalReturnNull" value="true" />
-        <entry key="OverridingEqualsNotSymmetrical" value="true" />
-        <entry key="PreferZeroLengthArrays" value="true" />
-        <entry key="PublicSemaphores" value="false" />
-        <entry key="QuestionableBooleanAssignment" value="true" />
-        <entry key="ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass" value="true" />
-        <entry key="ReadReturnShouldBeChecked" value="true" />
-        <entry key="RedundantConditions" value="true" />
-        <entry key="RedundantInterfaces" value="true" />
-        <entry key="ReflectiveClasses" value="true" />
-        <entry key="RepeatedConditionals" value="true" />
-        <entry key="ResolveAllReferences" value="false" />
-        <entry key="RuntimeExceptionCapture" value="true" />
-        <entry key="SerializableIdiom" value="true" />
-        <entry key="StartInConstructor" value="true" />
-        <entry key="StaticCalendarDetector" value="true" />
-        <entry key="StringConcatenation" value="true" />
-        <entry key="SuperfluousInstanceOf" value="true" />
-        <entry key="SuspiciousThreadInterrupted" value="true" />
-        <entry key="SwitchFallthrough" value="true" />
-        <entry key="SynchronizationOnSharedBuiltinConstant" value="true" />
-        <entry key="SynchronizeAndNullCheckField" value="true" />
-        <entry key="SynchronizeOnClassLiteralNotGetClass" value="true" />
-        <entry key="SynchronizingOnContentsOfFieldToProtectField" value="true" />
-        <entry key="TestASM" value="false" />
-        <entry key="TestDataflowAnalysis" value="false" />
-        <entry key="TestingGround" value="false" />
-        <entry key="TestingGround2" value="false" />
-        <entry key="TrainFieldStoreTypes" value="true" />
-        <entry key="TrainLongInstantfParams" value="true" />
-        <entry key="TrainNonNullAnnotations" value="true" />
-        <entry key="TrainUnconditionalDerefParams" value="true" />
-        <entry key="URLProblems" value="true" />
-        <entry key="UncallableMethodOfAnonymousClass" value="true" />
-        <entry key="UnnecessaryMath" value="true" />
-        <entry key="UnreadFields" value="true" />
-        <entry key="UselessSubclassMethod" value="false" />
-        <entry key="VarArgsProblems" value="true" />
-        <entry key="VolatileUsage" value="true" />
-        <entry key="WaitInLoop" value="true" />
-        <entry key="WrongMapIterator" value="true" />
-        <entry key="XMLFactoryBypass" value="true" />
-      </map>
-    </option>
-    <option name="_reportCategories">
-      <map>
-        <entry key="BAD_PRACTICE" value="true" />
-        <entry key="CORRECTNESS" value="true" />
-        <entry key="EXPERIMENTAL" value="true" />
-        <entry key="I18N" value="true" />
-        <entry key="MALICIOUS_CODE" value="true" />
-        <entry key="MT_CORRECTNESS" value="true" />
-        <entry key="PERFORMANCE" value="true" />
-        <entry key="SECURITY" value="true" />
-        <entry key="STYLE" value="true" />
-      </map>
-    </option>
-  </component>
-</module>
+</module>
\ No newline at end of file
diff --git a/.idea/ant.xml b/.idea/ant.xml
index 3e3b7e7277..52ce37416f 100644
--- a/.idea/ant.xml
+++ b/.idea/ant.xml
@@ -1,19 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-This file is part of JavaSMT,
-an API wrapper for a collection of SMT solvers:
-https://github.com/sosy-lab/java-smt
-
-SPDX-FileCopyrightText: 2020 Dirk Beyer <https://www.sosy-lab.org>
-
-SPDX-License-Identifier: Apache-2.0
--->
-
 <project version="4">
   <component name="AntConfiguration">
     <buildFile url="file://$PROJECT_DIR$/build.xml">
       <executeOn event="beforeCompilation" target="build-dependencies" />
     </buildFile>
   </component>
-</project>
+</project>
\ No newline at end of file
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000000..2e6e4da19a
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,185 @@
+<component name="ProjectCodeStyleConfiguration">
+  <code_scheme name="Project" version="173">
+    <option name="OTHER_INDENT_OPTIONS">
+      <value>
+        <option name="INDENT_SIZE" value="2" />
+        <option name="CONTINUATION_INDENT_SIZE" value="4" />
+        <option name="TAB_SIZE" value="8" />
+      </value>
+    </option>
+    <option name="LINE_SEPARATOR" value="&#10;" />
+    <option name="PARAMETER_NAME_PREFIX" value="" />
+    <option name="INSERT_INNER_CLASS_IMPORTS" value="false" />
+    <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="5" />
+    <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="3" />
+    <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
+      <value>
+        <package name="java.awt" withSubpackages="false" static="false" />
+        <package name="javax.swing" withSubpackages="false" static="false" />
+      </value>
+    </option>
+    <option name="IMPORT_LAYOUT_TABLE">
+      <value>
+        <package name="" withSubpackages="true" static="false" />
+        <emptyLine />
+        <package name="javax" withSubpackages="true" static="false" />
+        <package name="java" withSubpackages="true" static="false" />
+        <emptyLine />
+        <package name="" withSubpackages="true" static="true" />
+      </value>
+    </option>
+    <option name="RIGHT_MARGIN" value="100" />
+    <option name="WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN" value="true" />
+    <option name="KEEP_BLANK_LINES_IN_CODE" value="2" />
+    <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
+    <option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
+    <option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
+    <option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
+    <option name="ALIGN_MULTILINE_ASSIGNMENT" value="true" />
+    <option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
+    <option name="ALIGN_MULTILINE_THROWS_LIST" value="true" />
+    <option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
+    <option name="ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION" value="true" />
+    <option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
+    <option name="CALL_PARAMETERS_WRAP" value="1" />
+    <option name="METHOD_PARAMETERS_WRAP" value="1" />
+    <option name="EXTENDS_LIST_WRAP" value="1" />
+    <option name="THROWS_LIST_WRAP" value="1" />
+    <option name="EXTENDS_KEYWORD_WRAP" value="1" />
+    <option name="THROWS_KEYWORD_WRAP" value="1" />
+    <option name="METHOD_CALL_CHAIN_WRAP" value="1" />
+    <option name="BINARY_OPERATION_WRAP" value="1" />
+    <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
+    <option name="TERNARY_OPERATION_WRAP" value="1" />
+    <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
+    <option name="FOR_STATEMENT_WRAP" value="1" />
+    <option name="ARRAY_INITIALIZER_WRAP" value="1" />
+    <option name="ASSIGNMENT_WRAP" value="5" />
+    <option name="WRAP_COMMENTS" value="true" />
+    <option name="IF_BRACE_FORCE" value="3" />
+    <option name="DOWHILE_BRACE_FORCE" value="3" />
+    <option name="WHILE_BRACE_FORCE" value="3" />
+    <option name="FOR_BRACE_FORCE" value="3" />
+    <JavaCodeStyleSettings>
+      <option name="PARAMETER_NAME_PREFIX" value="p" />
+      <option name="INSERT_INNER_CLASS_IMPORTS" value="true" />
+      <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
+      <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
+      <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
+        <value />
+      </option>
+      <option name="IMPORT_LAYOUT_TABLE">
+        <value>
+          <package name="" withSubpackages="true" static="true" />
+          <emptyLine />
+          <package name="" withSubpackages="true" static="false" />
+        </value>
+      </option>
+    </JavaCodeStyleSettings>
+    <ADDITIONAL_INDENT_OPTIONS fileType="haml">
+      <option name="INDENT_SIZE" value="2" />
+    </ADDITIONAL_INDENT_OPTIONS>
+    <ADDITIONAL_INDENT_OPTIONS fileType="java">
+      <option name="INDENT_SIZE" value="2" />
+      <option name="CONTINUATION_INDENT_SIZE" value="4" />
+      <option name="TAB_SIZE" value="8" />
+    </ADDITIONAL_INDENT_OPTIONS>
+    <ADDITIONAL_INDENT_OPTIONS fileType="js">
+      <option name="CONTINUATION_INDENT_SIZE" value="4" />
+    </ADDITIONAL_INDENT_OPTIONS>
+    <ADDITIONAL_INDENT_OPTIONS fileType="sass">
+      <option name="INDENT_SIZE" value="2" />
+    </ADDITIONAL_INDENT_OPTIONS>
+    <ADDITIONAL_INDENT_OPTIONS fileType="yml">
+      <option name="INDENT_SIZE" value="2" />
+    </ADDITIONAL_INDENT_OPTIONS>
+    <codeStyleSettings language="ECMA Script Level 4">
+      <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
+      <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
+      <option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
+      <option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
+      <option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
+      <option name="ALIGN_MULTILINE_ASSIGNMENT" value="true" />
+      <option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
+      <option name="ALIGN_MULTILINE_THROWS_LIST" value="true" />
+      <option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
+      <option name="ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION" value="true" />
+      <option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
+      <option name="CALL_PARAMETERS_WRAP" value="1" />
+      <option name="METHOD_PARAMETERS_WRAP" value="1" />
+      <option name="EXTENDS_LIST_WRAP" value="1" />
+      <option name="THROWS_LIST_WRAP" value="1" />
+      <option name="EXTENDS_KEYWORD_WRAP" value="1" />
+      <option name="THROWS_KEYWORD_WRAP" value="1" />
+      <option name="METHOD_CALL_CHAIN_WRAP" value="1" />
+      <option name="BINARY_OPERATION_WRAP" value="1" />
+      <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
+      <option name="TERNARY_OPERATION_WRAP" value="1" />
+      <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
+      <option name="FOR_STATEMENT_WRAP" value="1" />
+      <option name="ARRAY_INITIALIZER_WRAP" value="1" />
+      <option name="ASSIGNMENT_WRAP" value="5" />
+      <option name="WRAP_COMMENTS" value="true" />
+      <option name="IF_BRACE_FORCE" value="3" />
+      <option name="DOWHILE_BRACE_FORCE" value="3" />
+      <option name="WHILE_BRACE_FORCE" value="3" />
+      <option name="FOR_BRACE_FORCE" value="3" />
+      <option name="PARENT_SETTINGS_INSTALLED" value="true" />
+    </codeStyleSettings>
+    <codeStyleSettings language="JAVA">
+      <option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
+      <option name="ALIGN_MULTILINE_THROWS_LIST" value="true" />
+      <option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
+      <option name="CALL_PARAMETERS_WRAP" value="1" />
+      <option name="METHOD_PARAMETERS_WRAP" value="5" />
+      <option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
+      <option name="EXTENDS_LIST_WRAP" value="1" />
+      <option name="THROWS_LIST_WRAP" value="1" />
+      <option name="EXTENDS_KEYWORD_WRAP" value="1" />
+      <option name="THROWS_KEYWORD_WRAP" value="1" />
+      <option name="METHOD_CALL_CHAIN_WRAP" value="1" />
+      <option name="BINARY_OPERATION_WRAP" value="1" />
+      <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
+      <option name="TERNARY_OPERATION_WRAP" value="1" />
+      <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
+      <option name="FOR_STATEMENT_WRAP" value="1" />
+      <option name="ASSIGNMENT_WRAP" value="1" />
+      <option name="ASSERT_STATEMENT_WRAP" value="1" />
+      <option name="ASSERT_STATEMENT_COLON_ON_NEXT_LINE" value="true" />
+      <option name="IF_BRACE_FORCE" value="3" />
+      <option name="DOWHILE_BRACE_FORCE" value="3" />
+      <option name="WHILE_BRACE_FORCE" value="3" />
+      <option name="FOR_BRACE_FORCE" value="3" />
+      <option name="VARIABLE_ANNOTATION_WRAP" value="2" />
+      <option name="ENUM_CONSTANTS_WRAP" value="2" />
+      <indentOptions>
+        <option name="INDENT_SIZE" value="2" />
+        <option name="CONTINUATION_INDENT_SIZE" value="4" />
+        <option name="TAB_SIZE" value="8" />
+      </indentOptions>
+    </codeStyleSettings>
+    <codeStyleSettings language="JavaScript">
+      <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
+      <option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
+      <option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
+      <option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
+      <option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
+      <option name="CALL_PARAMETERS_WRAP" value="1" />
+      <option name="METHOD_PARAMETERS_WRAP" value="1" />
+      <option name="METHOD_CALL_CHAIN_WRAP" value="1" />
+      <option name="BINARY_OPERATION_WRAP" value="1" />
+      <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
+      <option name="TERNARY_OPERATION_WRAP" value="1" />
+      <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
+      <option name="FOR_STATEMENT_WRAP" value="1" />
+      <option name="ARRAY_INITIALIZER_WRAP" value="1" />
+      <option name="ASSIGNMENT_WRAP" value="5" />
+      <option name="WRAP_COMMENTS" value="true" />
+      <option name="IF_BRACE_FORCE" value="3" />
+      <option name="DOWHILE_BRACE_FORCE" value="3" />
+      <option name="WHILE_BRACE_FORCE" value="3" />
+      <option name="FOR_BRACE_FORCE" value="3" />
+      <option name="PARENT_SETTINGS_INSTALLED" value="true" />
+    </codeStyleSettings>
+  </code_scheme>
+</component>
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000000..79ee123c2b
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+<component name="ProjectCodeStyleConfiguration">
+  <state>
+    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
+  </state>
+</component>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index e70e3fe729..a13a73c19b 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -1,19 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-This file is part of JavaSMT,
-an API wrapper for a collection of SMT solvers:
-https://github.com/sosy-lab/java-smt
-
-SPDX-FileCopyrightText: 2020 Dirk Beyer <https://www.sosy-lab.org>
-
-SPDX-License-Identifier: Apache-2.0
--->
-
 <project version="4">
   <component name="ProjectModuleManager">
     <modules>
       <module fileurl="file://$PROJECT_DIR$/.idea/JavaSMT.iml" filepath="$PROJECT_DIR$/.idea/JavaSMT.iml" />
     </modules>
   </component>
-</project>
+</project>
\ No newline at end of file
diff --git a/src/org/sosy_lab/java_smt/SolverContextFactory.java b/src/org/sosy_lab/java_smt/SolverContextFactory.java
index 500beb11cf..4edb6ff4d3 100644
--- a/src/org/sosy_lab/java_smt/SolverContextFactory.java
+++ b/src/org/sosy_lab/java_smt/SolverContextFactory.java
@@ -29,6 +29,7 @@
 import org.sosy_lab.java_smt.delegate.logging.LoggingSolverContext;
 import org.sosy_lab.java_smt.delegate.statistics.StatisticsSolverContext;
 import org.sosy_lab.java_smt.delegate.synchronize.SynchronizedSolverContext;
+import org.sosy_lab.java_smt.solvers.apron.ApronSolverContext;
 import org.sosy_lab.java_smt.solvers.boolector.BoolectorSolverContext;
 import org.sosy_lab.java_smt.solvers.cvc4.CVC4SolverContext;
 import org.sosy_lab.java_smt.solvers.cvc5.CVC5SolverContext;
@@ -55,7 +56,8 @@ public enum Solvers {
     BOOLECTOR,
     CVC4,
     CVC5,
-    YICES2
+    YICES2,
+    APRON
   }
 
   @Option(secure = true, description = "Export solver queries in SmtLib format into a file.")
@@ -282,6 +284,9 @@ private SolverContext generateContext0(Solvers solverToCreate)
       case BOOLECTOR:
         return BoolectorSolverContext.create(config, shutdownNotifier, logfile, randomSeed, loader);
 
+      case APRON:
+        return ApronSolverContext.create();
+
       default:
         throw new AssertionError("no solver selected");
     }
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/ApronBooleanFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/apron/ApronBooleanFormulaManager.java
index 2c294e7e62..26d4589e27 100644
--- a/src/org/sosy_lab/java_smt/solvers/apron/ApronBooleanFormulaManager.java
+++ b/src/org/sosy_lab/java_smt/solvers/apron/ApronBooleanFormulaManager.java
@@ -24,8 +24,11 @@
 import org.sosy_lab.java_smt.basicimpl.FormulaCreator;
 
 public class ApronBooleanFormulaManager extends AbstractBooleanFormulaManager {
-  protected ApronBooleanFormulaManager(FormulaCreator pCreator) {
+
+  private ApronFormulaCreator formulaCreator;
+  protected ApronBooleanFormulaManager(ApronFormulaCreator pCreator) {
     super(pCreator);
+    this.formulaCreator = pCreator;
   }
 
   @Override
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/ApronExamples.java b/src/org/sosy_lab/java_smt/solvers/apron/ApronExamples.java
index bfece0e87b..07c681eea2 100644
--- a/src/org/sosy_lab/java_smt/solvers/apron/ApronExamples.java
+++ b/src/org/sosy_lab/java_smt/solvers/apron/ApronExamples.java
@@ -37,20 +37,20 @@ private static void testBox(Manager pManager) throws ApronException {
 
     Environment environment = new Environment(intVars, realVars);
     //x <= 2 and x >= -3
-
     //x <= 2 --> -x+2 >= 0
     Lincons1 cons1 = new Lincons1(environment);
     cons1.setCoeff("x",new MpqScalar(-1));
     cons1.setCst(new MpqScalar(+2));
     cons1.setKind(Lincons1.SUPEQ);
-    //x >= 3 --> x-3 >= 0
+    //x >= - 3 --> x+3 >= 0
     Lincons1 cons2 = new Lincons1(environment);
     cons2.setCoeff("x",new MpqScalar(1));
-    cons2.setCst(new MpqScalar(-3));
+    cons2.setCst(new MpqScalar(+3));
     cons2.setKind(Lincons1.SUPEQ);
+    Abstract1 abstract1 = new Abstract1(pManager, new Lincons1[]{cons1,cons2});
 
-    Lincons1[] constraints = {cons1, cons2};
-    Abstract1 abstract1 = new Abstract1(pManager, constraints);
+    System.out.println("Variable has to be in: "+abstract1.getBound(pManager, "x"));
+    System.out.println(abstract1.toString(pManager));
     //is x = 1 satisfiable?
     Lincons1 cons3 = new Lincons1(environment);
     cons3.setCoeff("x",new MpqScalar(1));
@@ -68,7 +68,7 @@ private static void testBox(Manager pManager) throws ApronException {
   }
 
   public static void main(String[] args) throws ApronException {
-    Manager manager = new Box();
+    Manager manager = new Polka(false);
     testBox(manager);
   }
 }
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/ApronFormulaCreator.java b/src/org/sosy_lab/java_smt/solvers/apron/ApronFormulaCreator.java
index 182a893218..13a2a0e5f9 100644
--- a/src/org/sosy_lab/java_smt/solvers/apron/ApronFormulaCreator.java
+++ b/src/org/sosy_lab/java_smt/solvers/apron/ApronFormulaCreator.java
@@ -20,6 +20,9 @@
 
 package org.sosy_lab.java_smt.solvers.apron;
 
+import apron.Environment;
+import apron.Var;
+import com.google.common.base.Preconditions;
 import java.util.List;
 import javax.annotation.Nullable;
 import org.sosy_lab.java_smt.api.Formula;
@@ -27,60 +30,105 @@
 import org.sosy_lab.java_smt.api.FormulaType.FloatingPointType;
 import org.sosy_lab.java_smt.api.visitors.FormulaVisitor;
 import org.sosy_lab.java_smt.basicimpl.FormulaCreator;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulaType.Type;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulas;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulaType;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulaType.ApronBooleanType;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulaType.ApronIntegerType;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulaType.ApronRationalType;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulas.ApronVar;
 
-public class ApronFormulaCreator extends FormulaCreator {
+public class ApronFormulaCreator extends FormulaCreator<ApronFormulas, ApronFormulaType,Environment,Long> {
+
+  private Environment environment;
   protected ApronFormulaCreator(
-      Object pO,
-      Object boolType,
-      @Nullable Object pIntegerType,
-      @Nullable Object pRationalType,
-      @Nullable Object stringType,
-      @Nullable Object regexType) {
-    super(pO, boolType, pIntegerType, pRationalType, stringType, regexType);
+      Environment pO,
+      ApronBooleanType boolType,
+      @Nullable ApronIntegerType pIntegerType,
+      @Nullable ApronRationalType pRationalType,
+      @Nullable Long stringType,
+      @Nullable Long regexType) {
+    super(pO, boolType, pIntegerType, pRationalType, null, null);
+    this.environment = pO;
+
+  }
+
+  public Environment getEnvironment(){
+    return this.environment;
   }
 
   @Override
-  public Object getBitvectorType(int bitwidth) {
+  public ApronFormulaType getBitvectorType(int bitwidth) {
     return null;
   }
 
   @Override
-  public Object getFloatingPointType(FloatingPointType type) {
+  public ApronFormulaType getFloatingPointType(FloatingPointType type) {
     return null;
   }
 
   @Override
-  public Object getArrayType(Object indexType, Object elementType) {
+  public ApronFormulaType getArrayType(ApronFormulaType indexType, ApronFormulaType elementType) {
     return null;
   }
 
   @Override
-  public Object makeVariable(Object pO, String varName) {
-    return null;
+  public ApronFormulas makeVariable(ApronFormulaType pApronFormulaType, String varName) {
+    Preconditions.checkArgument(!environment.hasVar(varName),"Variablename already exists!");
+    Preconditions.checkArgument(
+        (pApronFormulaType.getType().equals(Type.INTEGER) || pApronFormulaType.getType().equals(Type.RATIONAL)),
+        "Only Integer or rational variables allowed1");
+      if(pApronFormulaType.getType().equals(Type.INTEGER)){
+        String[] intvars = new String[]{varName};
+        this.environment.add(intvars,new String[]{});
+        return new ApronVar();
+      }else {
+        String[] realvars = new String[]{varName};
+        this.environment.add(new String[]{}, realvars);
+        return new ApronVar();
+      }
   }
 
   @Override
-  public FormulaType<?> getFormulaType(Object formula) {
+  public FormulaType<ApronFormulas> getFormulaType(ApronFormulas formula) {
+    //TODO
+    switch (formula.getFormulaType()){
+      case VAR:
+        //...
+      case TERM:
+        //...
+      case COEFF:
+        //...
+      case CONSTRAINT:
+        //...
+      case EXPRESSION:
+        //...
+      default:
+        //....
+    }
     return null;
   }
 
   @Override
-  public Object callFunctionImpl(Object declaration, List args) {
+  public <R> R visit(FormulaVisitor<R> visitor, Formula formula, ApronFormulas f) {
     return null;
   }
 
   @Override
-  public Object declareUFImpl(String pName, Object pReturnType, List pArgTypes) {
+  public ApronFormulas callFunctionImpl(Long declaration, List<ApronFormulas> args) {
     return null;
   }
 
   @Override
-  protected Object getBooleanVarDeclarationImpl(Object pO) {
+  public Long declareUFImpl(
+      String pName,
+      ApronFormulaType pReturnType,
+      List<ApronFormulaType> pArgTypes) {
     return null;
   }
 
   @Override
-  public Object visit(FormulaVisitor visitor, Formula formula, Object f) {
+  protected Long getBooleanVarDeclarationImpl(ApronFormulas pApronFormula) {
     return null;
   }
 }
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/ApronFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/apron/ApronFormulaManager.java
index 6b116a0f95..d60fed1ea2 100644
--- a/src/org/sosy_lab/java_smt/solvers/apron/ApronFormulaManager.java
+++ b/src/org/sosy_lab/java_smt/solvers/apron/ApronFormulaManager.java
@@ -20,6 +20,7 @@
 
 package org.sosy_lab.java_smt.solvers.apron;
 
+import apron.Environment;
 import java.util.Map;
 import org.checkerframework.checker.nullness.qual.Nullable;
 import org.sosy_lab.common.Appender;
@@ -39,15 +40,15 @@
 import org.sosy_lab.java_smt.basicimpl.AbstractUFManager;
 import org.sosy_lab.java_smt.basicimpl.FormulaCreator;
 
-public class ApronFormulaManager extends AbstractFormulaManager <Long, Long, Long, Long>{
+public class ApronFormulaManager extends AbstractFormulaManager <Long, Long, Environment, Long>{
   /**
    * Builds a solver from the given theory implementations.
    *
    * @param pFormulaCreator
    * @param functionManager
    * @param booleanManager
-   * @param pIntegerManager
-   * @param pRationalManager
+   * @param pIntegerFormulaManager
+   * @param pRationalFormulaManager
    * @param bitvectorManager
    * @param floatingPointManager
    * @param quantifiedManager
@@ -57,11 +58,11 @@ public class ApronFormulaManager extends AbstractFormulaManager <Long, Long, Lon
    * @param enumManager
    */
   protected ApronFormulaManager(
-      FormulaCreator pFormulaCreator,
-      AbstractUFManager functionManager,
-      AbstractBooleanFormulaManager booleanManager,
-      @Nullable IntegerFormulaManager pIntegerManager,
-      @Nullable RationalFormulaManager pRationalManager,
+      ApronFormulaCreator pFormulaCreator,
+      ApronUFManager functionManager,
+      ApronBooleanFormulaManager booleanManager,
+      ApronIntegerFormulaManager pIntegerFormulaManager,
+      ApronRationalFormulaManager pRationalFormulaManager,
       @Nullable AbstractBitvectorFormulaManager bitvectorManager,
       @Nullable AbstractFloatingPointFormulaManager floatingPointManager,
       @Nullable AbstractQuantifiedFormulaManager quantifiedManager,
@@ -69,7 +70,8 @@ protected ApronFormulaManager(
       @Nullable AbstractSLFormulaManager slManager,
       @Nullable AbstractStringFormulaManager strManager,
       @Nullable AbstractEnumerationFormulaManager enumManager) {
-    super(pFormulaCreator, functionManager, booleanManager, pIntegerManager, pRationalManager,
+    super(pFormulaCreator, functionManager, booleanManager, pIntegerFormulaManager,
+        pRationalFormulaManager,
         bitvectorManager, floatingPointManager, quantifiedManager, arrayManager, slManager,
         strManager, enumManager);
   }
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/ApronIntegerFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/apron/ApronIntegerFormulaManager.java
index 0d380209c6..807927a7c1 100644
--- a/src/org/sosy_lab/java_smt/solvers/apron/ApronIntegerFormulaManager.java
+++ b/src/org/sosy_lab/java_smt/solvers/apron/ApronIntegerFormulaManager.java
@@ -20,6 +20,7 @@
 
 package org.sosy_lab.java_smt.solvers.apron;
 
+import apron.Environment;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.List;
@@ -28,130 +29,96 @@
 import org.sosy_lab.java_smt.api.IntegerFormulaManager;
 import org.sosy_lab.java_smt.api.NumeralFormula.IntegerFormula;
 import org.sosy_lab.java_smt.basicimpl.FormulaCreator;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulaType;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulas;
 
 public class ApronIntegerFormulaManager extends ApronNumeralFormulaManager<IntegerFormula, IntegerFormula>
     implements IntegerFormulaManager {
+
   protected ApronIntegerFormulaManager(
-      FormulaCreator pCreator,
+      FormulaCreator<ApronFormulas, ApronFormulaType, Environment, Long> pCreator,
       NonLinearArithmetic pNonLinearArithmetic) {
     super(pCreator, pNonLinearArithmetic);
   }
 
   @Override
-  public BooleanFormula modularCongruence(
-      IntegerFormula number1,
-      IntegerFormula number2,
-      BigInteger n) {
-    return null;
-  }
-
-  @Override
-  public BooleanFormula modularCongruence(IntegerFormula number1, IntegerFormula number2, long n) {
-    return null;
+  protected boolean isNumeral(ApronFormulas val) {
+    return false;
   }
 
   @Override
-  public IntegerFormula modulo(IntegerFormula numerator, IntegerFormula denumerator) {
+  protected ApronFormulas makeNumberImpl(long i) {
     return null;
   }
 
   @Override
-  public IntegerFormula makeNumber(long number) {
+  protected ApronFormulas makeNumberImpl(BigInteger i) {
     return null;
   }
 
   @Override
-  public IntegerFormula makeNumber(BigInteger number) {
+  protected ApronFormulas makeNumberImpl(String i) {
     return null;
   }
 
   @Override
-  public IntegerFormula makeNumber(double number) {
+  protected ApronFormulas makeNumberImpl(double pNumber) {
     return null;
   }
 
   @Override
-  public IntegerFormula makeNumber(BigDecimal number) {
+  protected ApronFormulas makeNumberImpl(BigDecimal pNumber) {
     return null;
   }
 
   @Override
-  public IntegerFormula makeNumber(String pI) {
+  protected ApronFormulas makeVariableImpl(String i) {
     return null;
   }
 
   @Override
-  public IntegerFormula makeNumber(Rational pRational) {
+  protected ApronFormulas negate(ApronFormulas pParam1) {
     return null;
   }
 
   @Override
-  public IntegerFormula makeVariable(String pVar) {
+  protected ApronFormulas add(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public IntegerFormula negate(IntegerFormula number) {
+  protected ApronFormulas subtract(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public IntegerFormula add(IntegerFormula number1, IntegerFormula number2) {
+  protected ApronFormulas equal(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public IntegerFormula sum(List operands) {
+  protected ApronFormulas distinctImpl(List<ApronFormulas> pNumbers) {
     return null;
   }
 
   @Override
-  public IntegerFormula subtract(IntegerFormula number1, IntegerFormula number2) {
+  protected ApronFormulas greaterThan(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public IntegerFormula divide(IntegerFormula numerator, IntegerFormula denumerator) {
+  protected ApronFormulas greaterOrEquals(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public IntegerFormula multiply(IntegerFormula number1, IntegerFormula number2) {
+  protected ApronFormulas lessThan(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public BooleanFormula equal(IntegerFormula number1, IntegerFormula number2) {
+  protected ApronFormulas lessOrEquals(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
-  @Override
-  public BooleanFormula distinct(List pNumbers) {
-    return null;
-  }
-
-  @Override
-  public BooleanFormula greaterThan(IntegerFormula number1, IntegerFormula number2) {
-    return null;
-  }
-
-  @Override
-  public BooleanFormula greaterOrEquals(IntegerFormula number1, IntegerFormula number2) {
-    return null;
-  }
-
-  @Override
-  public BooleanFormula lessThan(IntegerFormula number1, IntegerFormula number2) {
-    return null;
-  }
-
-  @Override
-  public BooleanFormula lessOrEquals(IntegerFormula number1, IntegerFormula number2) {
-    return null;
-  }
-
-  @Override
-  public IntegerFormula floor(IntegerFormula formula) {
-    return null;
-  }
 }
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/ApronModel.java b/src/org/sosy_lab/java_smt/solvers/apron/ApronModel.java
new file mode 100644
index 0000000000..96878c180d
--- /dev/null
+++ b/src/org/sosy_lab/java_smt/solvers/apron/ApronModel.java
@@ -0,0 +1,46 @@
+/*
+ *  JavaSMT is an API wrapper for a collection of SMT solvers.
+ *  This file is part of JavaSMT.
+ *
+ *  Copyright (C) 2007-2016  Dirk Beyer
+ *  All rights reserved.
+ *
+ *  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
+ *
+ *      http://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.
+ */
+
+package org.sosy_lab.java_smt.solvers.apron;
+
+import com.google.common.collect.ImmutableList;
+import javax.annotation.Nullable;
+import org.sosy_lab.java_smt.basicimpl.AbstractModel;
+import org.sosy_lab.java_smt.basicimpl.AbstractProver;
+import org.sosy_lab.java_smt.basicimpl.FormulaCreator;
+
+public class ApronModel extends AbstractModel {
+  protected ApronModel(
+      AbstractProver prover,
+      FormulaCreator creator) {
+    super(prover, creator);
+  }
+
+  @Override
+  public ImmutableList<ValueAssignment> asList() {
+    return null;
+  }
+
+  @Nullable
+  @Override
+  protected Object evalImpl(Object formula) {
+    return null;
+  }
+}
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/ApronNumeralFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/apron/ApronNumeralFormulaManager.java
index a5a84cddf8..e1215b7107 100644
--- a/src/org/sosy_lab/java_smt/solvers/apron/ApronNumeralFormulaManager.java
+++ b/src/org/sosy_lab/java_smt/solvers/apron/ApronNumeralFormulaManager.java
@@ -20,6 +20,7 @@
 
 package org.sosy_lab.java_smt.solvers.apron;
 
+import apron.Environment;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.List;
@@ -27,99 +28,16 @@
 import org.sosy_lab.java_smt.api.NumeralFormula;
 import org.sosy_lab.java_smt.basicimpl.AbstractNumeralFormulaManager;
 import org.sosy_lab.java_smt.basicimpl.FormulaCreator;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulaType;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulas;
 
-public class ApronNumeralFormulaManager<
+abstract class ApronNumeralFormulaManager <
     ParamFormulaType extends NumeralFormula, ResultFormulaType extends NumeralFormula>
     extends AbstractNumeralFormulaManager<
-    Long, Long, Long, ParamFormulaType, ResultFormulaType, Long> {
+    ApronFormulas, ApronFormulaType, Environment, ParamFormulaType, ResultFormulaType, Long>{
   protected ApronNumeralFormulaManager(
-      FormulaCreator<Long, Long, Long, Long> pCreator,
+      FormulaCreator<ApronFormulas, ApronFormulaType, Environment, Long> pCreator,
       NonLinearArithmetic pNonLinearArithmetic) {
     super(pCreator, pNonLinearArithmetic);
   }
-
-  @Override
-  public FormulaType<ResultFormulaType> getFormulaType() {
-    return null;
-  }
-
-  @Override
-  protected boolean isNumeral(Long val) {
-    return false;
-  }
-
-  @Override
-  protected Long makeNumberImpl(long i) {
-    return null;
-  }
-
-  @Override
-  protected Long makeNumberImpl(BigInteger i) {
-    return null;
-  }
-
-  @Override
-  protected Long makeNumberImpl(String i) {
-    return null;
-  }
-
-  @Override
-  protected Long makeNumberImpl(double pNumber) {
-    return null;
-  }
-
-  @Override
-  protected Long makeNumberImpl(BigDecimal pNumber) {
-    return null;
-  }
-
-  @Override
-  protected Long makeVariableImpl(String i) {
-    return null;
-  }
-
-  @Override
-  protected Long negate(Long pParam1) {
-    return null;
-  }
-
-  @Override
-  protected Long add(Long pParam1, Long pParam2) {
-    return null;
-  }
-
-  @Override
-  protected Long subtract(Long pParam1, Long pParam2) {
-    return null;
-  }
-
-  @Override
-  protected Long equal(Long pParam1, Long pParam2) {
-    return null;
-  }
-
-  @Override
-  protected Long distinctImpl(List<Long> pNumbers) {
-    return null;
-  }
-
-  @Override
-  protected Long greaterThan(Long pParam1, Long pParam2) {
-    return null;
-  }
-
-  @Override
-  protected Long greaterOrEquals(Long pParam1, Long pParam2) {
-    return null;
-  }
-
-  @Override
-  protected Long lessThan(Long pParam1, Long pParam2) {
-    return null;
-  }
-
-  @Override
-  protected Long lessOrEquals(Long pParam1, Long pParam2) {
-    return null;
-  }
 }
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/ApronRationalFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/apron/ApronRationalFormulaManager.java
index c342e67b3f..bfc6f334f9 100644
--- a/src/org/sosy_lab/java_smt/solvers/apron/ApronRationalFormulaManager.java
+++ b/src/org/sosy_lab/java_smt/solvers/apron/ApronRationalFormulaManager.java
@@ -20,6 +20,7 @@
 
 package org.sosy_lab.java_smt.solvers.apron;
 
+import apron.Environment;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.List;
@@ -30,112 +31,95 @@
 import org.sosy_lab.java_smt.api.NumeralFormula.RationalFormula;
 import org.sosy_lab.java_smt.api.RationalFormulaManager;
 import org.sosy_lab.java_smt.basicimpl.FormulaCreator;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulaType;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulas;
 
 public class ApronRationalFormulaManager extends ApronNumeralFormulaManager<NumeralFormula,
     RationalFormula> implements RationalFormulaManager {
+
   protected ApronRationalFormulaManager(
-      FormulaCreator<Long, Long, Long, Long> pCreator,
+      FormulaCreator<ApronFormulas, ApronFormulaType, Environment, Long> pCreator,
       NonLinearArithmetic pNonLinearArithmetic) {
     super(pCreator, pNonLinearArithmetic);
   }
 
   @Override
-  public RationalFormula makeNumber(long number) {
-    return null;
-  }
-
-  @Override
-  public RationalFormula makeNumber(BigInteger number) {
-    return null;
-  }
-
-  @Override
-  public RationalFormula makeNumber(double number) {
-    return null;
-  }
-
-  @Override
-  public RationalFormula makeNumber(BigDecimal number) {
-    return null;
-  }
-
-  @Override
-  public RationalFormula makeNumber(String pI) {
-    return null;
+  protected boolean isNumeral(ApronFormulas val) {
+    return false;
   }
 
   @Override
-  public RationalFormula makeNumber(Rational pRational) {
+  protected ApronFormulas makeNumberImpl(long i) {
     return null;
   }
 
   @Override
-  public RationalFormula makeVariable(String pVar) {
+  protected ApronFormulas makeNumberImpl(BigInteger i) {
     return null;
   }
 
   @Override
-  public RationalFormula negate(NumeralFormula number) {
+  protected ApronFormulas makeNumberImpl(String i) {
     return null;
   }
 
   @Override
-  public RationalFormula add(NumeralFormula number1, NumeralFormula number2) {
+  protected ApronFormulas makeNumberImpl(double pNumber) {
     return null;
   }
 
   @Override
-  public RationalFormula sum(List operands) {
+  protected ApronFormulas makeNumberImpl(BigDecimal pNumber) {
     return null;
   }
 
   @Override
-  public RationalFormula subtract(NumeralFormula number1, NumeralFormula number2) {
+  protected ApronFormulas makeVariableImpl(String i) {
     return null;
   }
 
   @Override
-  public RationalFormula divide(NumeralFormula numerator, NumeralFormula denumerator) {
+  protected ApronFormulas negate(ApronFormulas pParam1) {
     return null;
   }
 
   @Override
-  public RationalFormula multiply(NumeralFormula number1, NumeralFormula number2) {
+  protected ApronFormulas add(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public BooleanFormula equal(NumeralFormula number1, NumeralFormula number2) {
+  protected ApronFormulas subtract(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public BooleanFormula distinct(List pNumbers) {
+  protected ApronFormulas equal(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public BooleanFormula greaterThan(NumeralFormula number1, NumeralFormula number2) {
+  protected ApronFormulas distinctImpl(List<ApronFormulas> pNumbers) {
     return null;
   }
 
   @Override
-  public BooleanFormula greaterOrEquals(NumeralFormula number1, NumeralFormula number2) {
+  protected ApronFormulas greaterThan(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public BooleanFormula lessThan(NumeralFormula number1, NumeralFormula number2) {
+  protected ApronFormulas greaterOrEquals(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public BooleanFormula lessOrEquals(NumeralFormula number1, NumeralFormula number2) {
+  protected ApronFormulas lessThan(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 
   @Override
-  public IntegerFormula floor(NumeralFormula formula) {
+  protected ApronFormulas lessOrEquals(ApronFormulas pParam1, ApronFormulas pParam2) {
     return null;
   }
 }
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/ApronSolverContext.java b/src/org/sosy_lab/java_smt/solvers/apron/ApronSolverContext.java
index bc2c5008d6..7e399adac9 100644
--- a/src/org/sosy_lab/java_smt/solvers/apron/ApronSolverContext.java
+++ b/src/org/sosy_lab/java_smt/solvers/apron/ApronSolverContext.java
@@ -20,37 +20,94 @@
 
 package org.sosy_lab.java_smt.solvers.apron;
 
+import apron.ApronException;
+import apron.Box;
+import apron.Environment;
+import apron.Manager;
+import com.microsoft.z3.Native;
 import java.util.Set;
+import org.sosy_lab.common.ShutdownNotifier;
 import org.sosy_lab.java_smt.SolverContextFactory.Solvers;
 import org.sosy_lab.java_smt.api.FormulaManager;
 import org.sosy_lab.java_smt.api.InterpolatingProverEnvironment;
 import org.sosy_lab.java_smt.api.OptimizationProverEnvironment;
 import org.sosy_lab.java_smt.api.ProverEnvironment;
+import org.sosy_lab.java_smt.basicimpl.AbstractNumeralFormulaManager.NonLinearArithmetic;
 import org.sosy_lab.java_smt.basicimpl.AbstractSolverContext;
+import org.sosy_lab.java_smt.solvers.apron.types.ApronFormulaType.ApronBooleanType;
 
 public class ApronSolverContext extends AbstractSolverContext {
-  protected ApronSolverContext(FormulaManager fmgr) {
+
+  private Manager manager;
+  private final ApronFormulaCreator formulaCreator;
+  protected ShutdownNotifier shutdownNotifier;
+  protected ApronSolverContext(ApronFormulaManager fmgr,
+                               Manager pManager,
+                               ApronFormulaCreator pFormulaCreator,
+                               ShutdownNotifier pShutdownNotifier) {
     super(fmgr);
+    this.manager = pManager;
+    this.formulaCreator = pFormulaCreator;
+    this.shutdownNotifier = pShutdownNotifier;
+  }
+
+  public static synchronized ApronSolverContext create(NonLinearArithmetic pNonLinearArithmetic,
+                                                       ShutdownNotifier pShutdownNotifier){
+
+    Environment env = new Environment();
+    Manager manager = new Box();
+    ApronBooleanType booleanType = new ApronBooleanType();
+    ApronFormulaCreator formulaCreator = new ApronFormulaCreator(env, booleanType, null,null,null,null);
+    ApronUFManager ufManager = new ApronUFManager(formulaCreator);
+    ApronBooleanFormulaManager booleanFormulaManager =
+        new ApronBooleanFormulaManager(formulaCreator);
+    ApronIntegerFormulaManager integerFormulaManager =
+        new ApronIntegerFormulaManager(formulaCreator, pNonLinearArithmetic);
+    ApronRationalFormulaManager rationalFormulaManager =
+        new ApronRationalFormulaManager(formulaCreator, pNonLinearArithmetic);
+    ApronFormulaManager fmgr = new ApronFormulaManager(formulaCreator, ufManager,
+        booleanFormulaManager,integerFormulaManager,rationalFormulaManager,null,null,null,null,
+        null,null,null);
+    return new ApronSolverContext(fmgr, manager, formulaCreator, pShutdownNotifier);
   }
 
+  public Manager getManager(){
+    return this.manager;
+  }
+
+  public ApronFormulaCreator getFormulaCreator(){
+    return this.formulaCreator;
+  }
   @Override
   public String getVersion() {
-    return null;
+    return this.manager.getVersion();
   }
 
   @Override
   public Solvers getSolverName() {
-    return null;
+    return Solvers.APRON;
   }
 
   @Override
   public void close() {
-
+    //TODO
   }
 
   @Override
   protected ProverEnvironment newProverEnvironment0(Set<ProverOptions> options) {
-    return null;
+    return newApronProverEnvironment(options);
+  }
+
+  private ProverEnvironment newApronProverEnvironment(Set<ProverOptions> pProverOptions){
+    try{
+      ApronBooleanFormulaManager booleanFormulaManager =
+          new ApronBooleanFormulaManager(this.formulaCreator);
+      return new ApronTheoremProver(pProverOptions,booleanFormulaManager,this.shutdownNotifier,this);
+    } catch(ApronException pApronException){
+      System.out.println(pApronException.toString());
+      System.exit(0);
+      return null;
+    }
   }
 
   @Override
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/ApronTheoremProver.java b/src/org/sosy_lab/java_smt/solvers/apron/ApronTheoremProver.java
index 4427755eb5..ff01731aa3 100644
--- a/src/org/sosy_lab/java_smt/solvers/apron/ApronTheoremProver.java
+++ b/src/org/sosy_lab/java_smt/solvers/apron/ApronTheoremProver.java
@@ -20,11 +20,14 @@
 
 package org.sosy_lab.java_smt.solvers.apron;
 
+import apron.Abstract1;
+import apron.ApronException;
 import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import javax.annotation.Nullable;
+import org.checkerframework.checker.units.qual.A;
 import org.sosy_lab.common.ShutdownNotifier;
 import org.sosy_lab.java_smt.api.BooleanFormula;
 import org.sosy_lab.java_smt.api.BooleanFormulaManager;
@@ -33,13 +36,21 @@
 import org.sosy_lab.java_smt.api.ProverEnvironment;
 import org.sosy_lab.java_smt.api.SolverException;
 import org.sosy_lab.java_smt.basicimpl.AbstractProverWithAllSat;
+import org.sosy_lab.java_smt.utils.SolverUtils;
 
 public class ApronTheoremProver extends AbstractProverWithAllSat<Void> implements ProverEnvironment {
+
+  private Abstract1 abstract1;
+  private ApronSolverContext solverContext;
   protected ApronTheoremProver(
       Set pSet,
       BooleanFormulaManager pBmgr,
-      ShutdownNotifier pShutdownNotifier) {
+      ShutdownNotifier pShutdownNotifier,
+      ApronSolverContext pApronSolverContext) throws ApronException {
     super(pSet, pBmgr, pShutdownNotifier);
+    this.solverContext  = pApronSolverContext;
+    this.abstract1 = new Abstract1(pApronSolverContext.getManager(),
+        pApronSolverContext.getFormulaCreator().getEnvironment());
   }
 
   @Override
@@ -64,10 +75,19 @@ public int size() {
   }
 
   @Override
-  public boolean isUnsat() throws SolverException, InterruptedException {
-    return false;
+  public boolean isUnsat() throws SolverException, InterruptedException{
+    return isUnsatApron();
   }
 
+  private boolean isUnsatApron(){
+    try {
+      return abstract1.isBottom(solverContext.getManager());
+    } catch (ApronException pApronException){
+      System.out.println(pApronException.toString());
+      System.exit(0);
+      return false;
+    }
+  }
   @Override
   public Model getModel() throws SolverException {
     return null;
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/types/ApronFormulaType.java b/src/org/sosy_lab/java_smt/solvers/apron/types/ApronFormulaType.java
new file mode 100644
index 0000000000..dfaa98537d
--- /dev/null
+++ b/src/org/sosy_lab/java_smt/solvers/apron/types/ApronFormulaType.java
@@ -0,0 +1,62 @@
+/*
+ *  JavaSMT is an API wrapper for a collection of SMT solvers.
+ *  This file is part of JavaSMT.
+ *
+ *  Copyright (C) 2007-2016  Dirk Beyer
+ *  All rights reserved.
+ *
+ *  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
+ *
+ *      http://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.
+ */
+
+package org.sosy_lab.java_smt.solvers.apron.types;
+
+import org.sosy_lab.java_smt.solvers.apron.ApronIntegerFormulaManager;
+
+public interface ApronFormulaType {
+
+  enum Type{
+    BOOLEAN,
+    INTEGER,
+    RATIONAL
+  }
+
+  Type getType();
+  class ApronIntegerType implements ApronFormulaType{
+
+    public ApronIntegerType(){}
+    @Override
+    public Type getType(){
+      return Type.INTEGER;
+    }
+
+  }
+
+  class ApronRationalType implements ApronFormulaType{
+
+    public ApronRationalType(){}
+    @Override
+    public Type getType(){
+      return Type.RATIONAL;
+    }
+  }
+
+  class ApronBooleanType implements ApronFormulaType{
+
+    public ApronBooleanType(){
+    }
+    @Override
+    public Type getType(){
+      return Type.BOOLEAN;
+    }
+  }
+}
diff --git a/src/org/sosy_lab/java_smt/solvers/apron/types/ApronFormulas.java b/src/org/sosy_lab/java_smt/solvers/apron/types/ApronFormulas.java
new file mode 100644
index 0000000000..e66ce46010
--- /dev/null
+++ b/src/org/sosy_lab/java_smt/solvers/apron/types/ApronFormulas.java
@@ -0,0 +1,94 @@
+/*
+ *  JavaSMT is an API wrapper for a collection of SMT solvers.
+ *  This file is part of JavaSMT.
+ *
+ *  Copyright (C) 2007-2016  Dirk Beyer
+ *  All rights reserved.
+ *
+ *  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
+ *
+ *      http://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.
+ */
+
+package org.sosy_lab.java_smt.solvers.apron.types;
+
+import apron.Coeff;
+import apron.Linexpr1;
+import apron.Linterm1;
+import org.sosy_lab.java_smt.api.Formula;
+
+public interface ApronFormulas extends Formula {
+
+  enum ApronFormulaType {
+    VAR,
+    COEFF,
+    TERM,
+    EXPRESSION,
+    CONSTRAINT
+  }
+
+  ApronFormulaType getFormulaType();
+
+  class ApronVar implements ApronFormulas {
+
+    public ApronVar(){}
+    @Override
+    public ApronFormulaType getFormulaType() {
+      return ApronFormulaType.VAR;
+    }
+  }
+
+  class ApronCoeff implements ApronFormulas {
+
+    public ApronCoeff(){}
+    @Override
+    public ApronFormulaType getFormulaType() {
+      return ApronFormulaType.COEFF;
+    }
+  }
+
+  class ApronTerm implements ApronFormulas {
+    private Linterm1 linterm1;
+
+    public ApronTerm(String pVar,Coeff pCoeff){
+      this.linterm1 = new Linterm1(pVar,pCoeff);
+    }
+
+    @Override
+    public ApronFormulaType getFormulaType() {
+      return ApronFormulaType.TERM;
+    }
+  }
+
+  class ApronExpr implements ApronFormulas {
+    private Linexpr1 linexpr1;
+
+    public ApronExpr(){
+
+    }
+
+    @Override
+    public ApronFormulaType getFormulaType() {
+      return ApronFormulaType.EXPRESSION;
+    }
+  }
+
+  class ApronCons implements ApronFormulas {
+    public ApronCons(){
+
+    }
+
+    @Override
+    public ApronFormulaType getFormulaType() {
+      return ApronFormulaType.CONSTRAINT;
+    }
+  }
+}