diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/AbstractConnectionPolicy.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/AbstractConnectionPolicy.scala
index e6fde115cd8dac787441907950bc8a4fe9a9e1cd..018da9c661195293d185a74c0010f8f1a0a64ed3 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/AbstractConnectionPolicy.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/AbstractConnectionPolicy.scala
@@ -56,7 +56,11 @@ trait ConnectionPolicy extends AbstractConnectionPolicy {
   }
 
   def generate(from : NeuronGroupRef, to : NeuronGroupRef) : Traversable[Connection]
-  def generate(from : NeuronIterable, to : NeuronIterable) : Traversable[Connection]
+  def generate(from : NeuronIterable, to : NeuronIterable) : Traversable[Connection] = {
+    // Throw exception by default
+    // This is to allow cleaning subclasses from non used behaviour and remove static dependencies
+    throw new UnsupportedOperationException()
+  }
 
  /********************************************************************************************************************
   * Testing
diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ConvolutionalConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ConvolutionalConnection.scala
index eb45a59ab3d6dec01b123cb7e1aeb3c369b1236e..e0789046f09e0e177fb709866a03986a4c170c79 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ConvolutionalConnection.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ConvolutionalConnection.scala
@@ -16,7 +16,7 @@ import scala.collection.mutable
   */
 class ConvolutionalConnection[A](filters : Traversable[Filter2D], connectionConstructor : A => SharedNeuronConnection[A], sharedObjConstructor : () => A) extends ConnectionPolicy {
 
-  def generate(from: NeuronIterable, to: NeuronIterable): Traversable[Connection] = {
+  override def generate(from: NeuronIterable, to: NeuronIterable): Traversable[Connection] = {
     assert(from.shape.dimensionNumber == 2 && to.shape.dimensionNumber == 3)
 
     val sharedObj = (for (filter <- filters) yield {
diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullConnection.scala
index b4ffce30cb6fe7a71b9d22ea70d59e3ab96ca51e..ec2358ed341476fa2d257c01ccf8762f51f1a776 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullConnection.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullConnection.scala
@@ -24,8 +24,7 @@ class FullConnection(neuronConnectionConstructor : Option[() => NeuronConnection
     }
   }
 
-
-  def generate(from : NeuronIterable, to : NeuronIterable) = {
+  override def generate(from : NeuronIterable, to : NeuronIterable) = {
     for {
       in <- from
       out <- to
diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/InternalConvolutionCompetition.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/InternalConvolutionCompetition.scala
index 45697df63ad2eb88dc8cfc4d9c0f8bc5a0fafefb..ee1cf88a0b6519f7db3306cc17b5d80e4f79ffaf 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/InternalConvolutionCompetition.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/InternalConvolutionCompetition.scala
@@ -7,6 +7,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connecti
 /**
   * Created by falezp on 31/05/16.
   */
+@deprecated("Should be replaced by external connection policies", "4/8/2016")
 class InternalConvolutionCompetition(inhibitorConnection : () => NeuronConnection) extends InternalConnectionPolicy {
 
   def generate(layer: NeuronIterable) = {
diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ManualConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ManualConnection.scala
index a00ea76be261554b415899287bf3b660a1cc494c..db2db6958a7ea7c1050e277e950d4fd2eb770e61 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ManualConnection.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ManualConnection.scala
@@ -1,23 +1,14 @@
 package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types
 
 import fr.univ_lille.cristal.emeraude.n2s3.core.NeuronConnection
+import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ConnectionPolicy}
 import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef}
-import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{InternalConnectionPolicy, Connection, ConnectionPolicy}
 
 /**
   * Connects two neuron groups using an explicit list of connections
-  * @param connections
   */
 class ManualConnection(connections : Traversable[(Int, Int, Option[NeuronConnection])]) extends ConnectionPolicy {
 
-  def generate(from : NeuronIterable, to : NeuronIterable) = {
-    throw new UnsupportedOperationException
-    /*
-    connections.map{ case(in, out, connection) =>
-      Connection(from.get(in), to.get(out), connection)
-    }*/
-  }
-
   override def generate(from: NeuronGroupRef, to: NeuronGroupRef): Traversable[Connection] = {
     connections.map{ case(in, out, connection) =>
       Connection(from.neurons(in).actorPath.get, to.neurons(out).actorPath.get, connection)
diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/MaxPoolingConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/MaxPoolingConnection.scala
index 9b8104045f31b73896be15ffded057439dd6a496..be65a3718ae22d7e9fab6c70353552713505664a 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/MaxPoolingConnection.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/MaxPoolingConnection.scala
@@ -9,7 +9,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.features.io.input.Shape
   */
 class MaxPoolingConnection(reduceFactors : Int*) extends ConnectionPolicy {
 
-  def generate(from : NeuronIterable, to : NeuronIterable) : Traversable[Connection] = {
+  override def generate(from : NeuronIterable, to : NeuronIterable) : Traversable[Connection] = {
     assert(from.shape.dimensionNumber == to.shape.dimensionNumber && to.shape.dimensions.zip(reduceFactors).map(e => e._1*e._2) == from.shape)
 
     def innerConnection(remainDim : Shape, fromIndex : Seq[Int], toIndex : Seq[Int], remainReduceFactor : Seq[Int]) : Traversable[Connection] = {
diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/OneToOneConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/OneToOneConnection.scala
index 7fce1516c05f2437b0ffef7a617d89e4dfcda4bc..1c315dd2bb8d91a17c37f6a660707644d84a8505 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/OneToOneConnection.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/OneToOneConnection.scala
@@ -8,7 +8,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, Neu
 import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ConnectionPolicy}
 
 class OneToOneConnection extends ConnectionPolicy {
-	def generate(from : NeuronIterable, to : NeuronIterable) = {
+	override def generate(from : NeuronIterable, to : NeuronIterable) = {
 		assert(from.size == to.size)
 		from.toSeq.zip(to.toSeq).map{ case (in, out) => Connection(in, out)}
 	}
diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/RandomConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/RandomConnection.scala
index 695ce76f589f9639220bd210e468c5dbfb293259..15199e1f30548db507b0c9f4db34e4ed8599f37a 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/RandomConnection.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/RandomConnection.scala
@@ -10,7 +10,7 @@ import scala.util.Random
   * Created by falezp on 07/07/16.
   */
 class RandomConnection(connectionRate : Float, connectionConstructor : () => NeuronConnection) extends ConnectionPolicy {
-  def generate(from : NeuronIterable, to : NeuronIterable) = {
+  override def generate(from : NeuronIterable, to : NeuronIterable) = {
     for {
       in <- from
       out <- to
diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/WinnerTakeAllConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/WinnerTakeAllConnection.scala
index e012c3cbffbad5a9d13910b857f73492d5aaf11d..de0085660b1a4184d72422c1075685c760b11366 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/WinnerTakeAllConnection.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/WinnerTakeAllConnection.scala
@@ -9,7 +9,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connecti
   */
 class WinnerTakeAllConnection(inhibitoryConnection : () => NeuronConnection) extends ConnectionPolicy {
 
-  def generate(from : NeuronIterable, to : NeuronIterable) = {
+  override def generate(from : NeuronIterable, to : NeuronIterable) = {
     new OneToOneConnection().generate(from, to)++
       new FullConnection().generate(to, from).map(co => Connection(co.from, co.to, Some(inhibitoryConnection())))
   }