diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 587666b17ea8db4ca58c77888cf81e7de9bd91df..cd745ea5577b5fbfc3884bc691134ae05127c353 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -43,6 +43,8 @@ pages:
     - mkdir -p public/ && cp -r index.html public/
     - mkdir -p public/Tests_Results && cp -r build/reports/tests/test/* public/Tests_Results/
     - mkdir -p public/Jacoco && cp -r build/jacocoHtml/* public/Jacoco/
+    - mkdir -p public/Javadoc && cp -r build/docs/* public/Javadoc/
+    - cp -r build/libs/ImmutableComplex-1.0.0.jar public/
   artifacts:
     paths:
       - public
diff --git a/.gradle/4.7/fileHashes/fileHashes.bin b/.gradle/4.7/fileHashes/fileHashes.bin
index 438aae799b055d99f2a6d0efdb533e0b837854d3..cf5cd21555901c821d3e3937a49e6f7db09d713e 100644
Binary files a/.gradle/4.7/fileHashes/fileHashes.bin and b/.gradle/4.7/fileHashes/fileHashes.bin differ
diff --git a/.gradle/4.7/fileHashes/fileHashes.lock b/.gradle/4.7/fileHashes/fileHashes.lock
index 479ff4a9a45c565631a879bb3e09522a9879efc8..e507b952a87e5dbe44d700c593bf33da89c5823c 100644
Binary files a/.gradle/4.7/fileHashes/fileHashes.lock and b/.gradle/4.7/fileHashes/fileHashes.lock differ
diff --git a/.gradle/4.7/taskHistory/taskHistory.bin b/.gradle/4.7/taskHistory/taskHistory.bin
index 777af9ed4228bd0fc9336df5aa80e9f72298dbcc..36d176c25546d99e901c432ebfc25a1a6aee6a86 100644
Binary files a/.gradle/4.7/taskHistory/taskHistory.bin and b/.gradle/4.7/taskHistory/taskHistory.bin differ
diff --git a/.gradle/4.7/taskHistory/taskHistory.lock b/.gradle/4.7/taskHistory/taskHistory.lock
index 81669c8aaee0c8dbb7fda6f894aee61ae7be2d87..be1f2aa9426d225b547fcecea22208d00f8824b2 100644
Binary files a/.gradle/4.7/taskHistory/taskHistory.lock and b/.gradle/4.7/taskHistory/taskHistory.lock differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 1a5409034bef115610829e9d8a11cb332ac6f7ea..dc90c13fbc01bd2630f7c7d55d843bb2e9147b42 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
index 905a8e1a1bcac2618118b73bce8f65eec5ae67bd..cb8236e705283786c1128912b1dc58517210d9ba 100644
Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/build.gradle b/build.gradle
index aa3dd8a9b3ddd164548ca0a269c71117da665b28..20822aa54b879908f38b7a81ae69b14742009bbc 100644
--- a/build.gradle
+++ b/build.gradle
@@ -9,39 +9,26 @@ jacoco {
 
 version = '1.0.0'
 applicationName = "ImmutableComplex"
-mainClassName = "main.java.Main"
+mainClassName = "Main"
 
 repositories {
 	jcenter()
-	//flatDir {dirs 'lib'}
 }
 
 dependencies {
-	//compile "hamcrest:hamcrest-all:1.3"
-	testCompile "junit:junit:4.11"
-//	testCompile name: 'junit-4.11'
+	testCompile "junit:junit:4+"
 }
 
-// Local path for Maven depository
-uploadArchives {
-    repositories {
-       flatDir {
-           dirs 'repos'
-       }
-    }
-}
-
-// Local installation task. 
-//'installDir' is property that should be defined with : "gradle installLocally -PinstallDir="/install/path""
-task installLocally(type: Copy){
-    from installDist
-    into project.hasProperty('installDir') ? file(project.getProperty('installDir')) : file('install')
-}
-
-installLocally.onlyIf {
-	project.hasProperty('installDir')
+// Specify the jar manifest to make it executable
+jar {
+	manifest {
+	attributes 'Implementation-Title': applicationName,
+	'Implementation-Version': version,
+	'Main-Class': mainClassName
+	}
 }
 
+// Jacoco configuration
 jacocoTestReport {
     reports {
         xml.enabled false
diff --git a/index.html b/index.html
index 7d662c922bdacf6e243fee9256ca698aff35ab88..f3deed50af144ca51bc2abc4d1114ac8146ff871 100644
--- a/index.html
+++ b/index.html
@@ -7,6 +7,8 @@
 <ul>
 <li><a href="http://denis.arrivault.pages.lis-lab.fr/Test_Project/Tests_Results/">See the unit tests report</a></li>
 <li><a href="http://denis.arrivault.pages.lis-lab.fr/Test_Project/Jacoco/">See the Jacoco coverage report</a></li>
+<li><a href="http://denis.arrivault.pages.lis-lab.fr/Test_Project/Javadoc/">See the javadoc</a></li>
+<li><a href="http://denis.arrivault.pages.lis-lab.fr/ImmutableComplex-1.0.0.jar" download="ImmutableComplex-1.0.0.jar">Download the executable jar</a>
 </ul>
 </body>
 </html>
\ No newline at end of file
diff --git a/src/main/java/Complex.java b/src/main/java/Complex.java
index a3aa1fc118abdeca067ebce91a35631130ffc08a..79513a9eac88dc7f5ac99d6e8cb0ae7fd487d4f7 100644
--- a/src/main/java/Complex.java
+++ b/src/main/java/Complex.java
@@ -1,7 +1,7 @@
 /**
  * Complex class file
  */
-package main.java;
+
 
 
 /**
@@ -20,30 +20,55 @@ public final class Complex {
 		this.im = im;
 	}
 	
-	//Accessors without mutator
+	/**
+	 * Accessor on real part
+	 * @return double real part
+	 */
 	public double realPart(){return re;}
+	/**
+	 * Accessor on imaginary part
+	 * @return double imaginary part
+	 */
 	public double imaginaryPart(){return im;}
 	
-	//Arithmetic operators
+	/**
+	 * Arithmetic operator : addition
+	 * @param c complex to add to this
+	 * @return Complex this + c
+	 */
 	public Complex add(Complex c){
 		return new Complex(re + c.re, im + c.im);
 	}
 	
+	/**
+	 * Arithmetic operator : substraction
+	 * @param c complex to substract from this
+	 * @return Complex this - c
+	 */
 	public Complex subtract(Complex c){
 		return new Complex(re - c.re, im - c.im);
 	}
 	
+	/**
+	 * Arithmetic operator : multiplication
+	 * @param c complex to multiply by this
+	 * @return Complex this * c
+	 */
 	public Complex multiply(Complex c){
 		return new Complex(re * c.re - im * c.im, re * c.im + im * c.re);
 	}
 	
+	/**
+	 * Arithmetic operator : division
+	 * @param c complex that divides this
+	 * @return Complex this / c
+	 */
 	public Complex divide(Complex c){
 		double tmp = c.re * c.re + c.im * c.im;
 		return new Complex((re * c.re + im * c.im) / tmp,
 				(im * c.re - re * c.im) / tmp);
 	}
 
-	//Comparison operator
 	@Override 
 	public boolean equals(Object o){
 		if (o == this)
@@ -68,13 +93,16 @@ public final class Complex {
 		return (int) (longBits ^ (longBits >>> 32));
 	}
 	
-	//Display
+
 	@Override
 	public String toString() {
 		return "(" + re + " + " + im + "i)";
 	}
 	
-	//Conjugate
+	/**
+	 * Return the conjugate of this
+	 * @return Complex cojugate of this
+	 */
 	public Complex conj(){
 		return new Complex(re,-im);
 	}
diff --git a/src/main/java/Main.java b/src/main/java/Main.java
index 3a5abfcdac5abda4b4a80e4ffa6b1c0dd3fdd98c..c136f755b583d4534e422d05afe1e627d6c9b7c3 100644
--- a/src/main/java/Main.java
+++ b/src/main/java/Main.java
@@ -1,4 +1,3 @@
-package main.java;
 
 public class Main {
 
diff --git a/src/test/java/ComplexTest.java b/src/test/java/ComplexTest.java
index c7075e799894d88f230ea803928e55584568b164..4a8be9e998f19b65004117ee92c931a1726fee7a 100644
--- a/src/test/java/ComplexTest.java
+++ b/src/test/java/ComplexTest.java
@@ -1,7 +1,6 @@
 /**
  * Test file for Complex class
  */
-package test.java;
 
 import org.junit.Assert;
 
@@ -11,8 +10,6 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import main.java.Complex;
-
 /**
  * Junit test case for my immutable complex class.
  * @author arrivault
@@ -41,7 +38,7 @@ public class ComplexTest {
 	}
 
 	/**
-	 * Test method for {@link main.java.Complex#Complex(double, double)}.
+	 * Test method for {@link Complex#Complex(double, double)}.
 	 */
 	@Test
 	public final void testComplex() {
@@ -51,7 +48,7 @@ public class ComplexTest {
 	}
 
 	/**
-	 * Test method for {@link main.java.Complex#realPart()}.
+	 * Test method for {@link Complex#realPart()}.
 	 */
 	@Test
 	public final void testRealPart() {
@@ -62,7 +59,7 @@ public class ComplexTest {
 	}
 
 	/**
-	 * Test method for {@link main.java.Complex#imaginaryPart()}.
+	 * Test method for {@link Complex#imaginaryPart()}.
 	 */
 	@Test
 	public final void testImaginaryPart() {
@@ -73,7 +70,7 @@ public class ComplexTest {
 	}
 
 	/**
-	 * Test method for {@link main.java.Complex#add(main.java.Complex)}.
+	 * Test method for {@link Complex#add(Complex)}.
 	 */
 	@Test
 	public final void testAdd() {
@@ -90,7 +87,7 @@ public class ComplexTest {
 	}
 
 	/**
-	 * Test method for {@link main.java.Complex#subtract(main.java.Complex)}.
+	 * Test method for {@link Complex#subtract(Complex)}.
 	 */
 	@Test
 	public final void testSubtract() {
@@ -107,7 +104,7 @@ public class ComplexTest {
 	}
 
 	/**
-	 * Test method for {@link main.java.Complex#multiply(main.java.Complex)}.
+	 * Test method for {@link Complex#multiply(Complex)}.
 	 */
 	@Test
 	public final void testMulptiply() {
@@ -124,7 +121,7 @@ public class ComplexTest {
 	}
 
 	/**
-	 * Test method for {@link main.java.Complex#divide(main.java.Complex)}.
+	 * Test method for {@link Complex#divide(Complex)}.
 	 */
 	@Test
 	public final void testDivide() {
@@ -147,7 +144,7 @@ public class ComplexTest {
 	}
 
 	/**
-	 * Test method for {@link main.java.Complex#equals(java.lang.Object)}.
+	 * Test method for {@link Complex#equals(java.lang.Object)}.
 	 */
 	@Test
 	public final void testEqualsObject() {
@@ -161,7 +158,7 @@ public class ComplexTest {
 	}
 
 	/**
-	 * Test method for {@link main.java.Complex#toString()}.
+	 * Test method for {@link Complex#toString()}.
 	 */
 	@Test
 	public final void testToString() {