diff --git a/examples/jump.py b/examples/jump.py
index b34d2f9000b4aed23570213c4ccc30ab4e066791..da3f5d8d054c665c73be4264eed7b8299587475d 100644
--- a/examples/jump.py
+++ b/examples/jump.py
@@ -35,6 +35,25 @@ import pinocchio
 from pinocchio.utils import *
 from numpy.linalg import norm,inv,pinv,eig,svd
 
+# Number of iterations in each phase. If 0, try to load.
+PHASE_ITERATIONS = { \
+                     "initial": 100,
+                     "landing": 100,
+                     "frontal": 100,
+                     "lateral": 100,
+                     "twist"  : 100
+                     }
+PHASE_ITERATIONS = { k: 0 for k in PHASE_ITERATIONS }
+PHASE_BACKUP = { \
+                     "initial": True,
+                     "landing": True,
+                     "frontal": True,
+                     "lateral": True,
+                     "twist"  : True
+               }
+BACKUP_PATH = "npydata/jump."
+DISPLAY = True
+
 robot = loadTalosLegs()
 robot.model.armature[6:] = .3
 robot.initDisplay(loadModel=True)
@@ -195,6 +214,8 @@ models[-1].differential.costs['xreg'].cost.activation.weights[:] = 1
 # ---------------------------------------------------------------------------------------------
 # Solve both take-off and landing.
 # Solve the initial phase (take-off).
+PHASE_NAME = "initial"
+
 problem = ShootingProblem(initialState=x0,runningModels=models[:imp],terminalModel=models[imp])
 ddp = SolverDDP(problem)
 ddp.callback = [ CallbackDDPLogger(), CallbackDDPVerbose() ]#, CallbackSolverDisplay(robot,rate=5) ]
@@ -204,13 +225,20 @@ us0 = [ m.differential.quasiStatic(d.differential,rmodel.defaultState) \
             +[np.zeros(0)]+[ m.differential.quasiStatic(d.differential,rmodel.defaultState) \
                              for m,d in zip(ddp.models(),ddp.datas())[imp+1:-1] ]
 
-ddp.solve(maxiter=20,regInit=.1,
+ddp.solve(maxiter=PHASE_ITERATIONS[PHASE_NAME],regInit=.1,
           init_xs=[rmodel.defaultState]*len(ddp.models()),
           init_us=us0[:imp])
-disp(ddp.xs)
+
+if PHASE_ITERATIONS[PHASE_NAME] == 0:
+    ddp.xs = [ x for x in np.load(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME)]
+    ddp.us = [ u for u in np.load(BACKUP_PATH+'%s.us.npy' % PHASE_NAME)]
+elif PHASE_BACKUP[PHASE_NAME]:
+    np.save(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME,ddp.xs)
+    np.save(BACKUP_PATH+'%s.us.npy' % PHASE_NAME,ddp.us)
 
 # ---------------------------------------------------------------------------------------------
 # Solve both take-off and landing.
+PHASE_NAME = "landing"
 xsddp = ddp.xs
 usddp = ddp.us
 
@@ -223,22 +251,31 @@ ddp.us = usddp + [ np.zeros(0) if isinstance(m,ActionModelImpact) else \
                m.differential.quasiStatic(d.differential,rmodel.defaultState) \
                                for m,d in zip(ddp.models(),ddp.datas())[len(usddp):-1] ]
 
-ddp.th_stop = 1e-1
-ddp.solve(init_xs=ddp.xs,init_us=ddp.us)
-
+#ddp.th_stop = 1e-1
+#ddp.solve(init_xs=ddp.xs,init_us=ddp.us,maxiter=)
 
 ddp.th_stop = 5e-4
 impact.costs['track30'].weight = 1e6
 impact.costs['track16'].weight = 1e6
-ddp.solve(init_xs=ddp.xs,init_us=ddp.us,maxiter=100,isFeasible=True)
-disp(ddp.xs)
+ddp.solve(init_xs=ddp.xs,init_us=ddp.us,maxiter=PHASE_ITERATIONS[PHASE_NAME],isFeasible=True)
+
+if PHASE_ITERATIONS[PHASE_NAME] == 0:
+    ddp.xs = [ x for x in np.load(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME)]
+    ddp.us = [ u for u in np.load(BACKUP_PATH+'%s.us.npy' % PHASE_NAME)]
+elif PHASE_BACKUP[PHASE_NAME]:
+    np.save(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME,ddp.xs)
+    np.save(BACKUP_PATH+'%s.us.npy' % PHASE_NAME,ddp.us)
 
+if DISPLAY: disp(ddp.xs)
 
+# Save for future use in initialization of advanced jumps
 xjump0 = [ x.copy() for x in ddp.xs ]
 ujump0 = [ u.copy() for u in ddp.us ]
 
-'''
+# ---------------------------------------------------------------------------------------------
 ### Jump with frontal scissors.
+PHASE_NAME = "frontal"
+
 fig = high+2
 x = x0.copy()
 x[9 ] =  1.
@@ -250,15 +287,24 @@ for i in range(6,9):
     impact.costs['track30'].weight = 10**i
     impact.costs['track16'].weight = 10**i
     models[fig].differential.costs.costs['xreg'].weight  = 10**i
-    ddp.solve(init_xs=ddp.xs,init_us=ddp.us,maxiter=100,isFeasible=True)
-    disp(ddp.xs)
+    ddp.solve(init_xs=ddp.xs,init_us=ddp.us,maxiter=PHASE_ITERATIONS[PHASE_NAME],isFeasible=True)
+
+if PHASE_ITERATIONS[PHASE_NAME] == 0:
+    ddp.xs = [ x for x in np.load(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME)]
+    ddp.us = [ u for u in np.load(BACKUP_PATH+'%s.us.npy' % PHASE_NAME)]
+elif PHASE_BACKUP[PHASE_NAME]:
+    np.save(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME,ddp.xs)
+    np.save(BACKUP_PATH+'%s.us.npy' % PHASE_NAME,ddp.us)
+
+if DISPLAY: disp(ddp.xs)
+
+# ---------------------------------------------------------------------------------------------
+### Jump with lateral scissors.
+PHASE_NAME = "lateral"
 
-xjump1 = [ x.copy() for x in ddp.xs ]
-ujump1 = [ u.copy() for u in ddp.us ]
 ddp.xs = xjump0
 ddp.us = ujump0
 
-### Jump with lateral scissors.
 fig = high+2
 x = x0.copy()
 x[8 ] =  .8
@@ -266,100 +312,44 @@ x[14] = -.8
 models[fig].differential.costs.costs['xreg'].cost.ref=x.copy()
 models[fig].differential.costs.costs['xreg'].cost.activation.weights[rmodel.nv:] = 0
 
-for i in range(6,9):
-    impact.costs['track30'].weight = 10**i
-    impact.costs['track16'].weight = 10**i
-    models[fig].differential.costs.costs['xreg'].weight  = 10**i
-    ddp.solve(init_xs=ddp.xs,init_us=ddp.us,maxiter=100,isFeasible=True)
-    disp(ddp.xs)
-    
-xjump2 = [ x.copy() for x in ddp.xs ]
-ujump2 = [ u.copy() for u in ddp.us ]
-ddp.xs = xjump0
-ddp.us = ujump0
+impact.costs['track30'].weight = 10**6
+impact.costs['track16'].weight = 10**6
+models[fig].differential.costs.costs['xreg'].weight  = 10**6
+ddp.solve(init_xs=ddp.xs,init_us=ddp.us,maxiter=PHASE_ITERATIONS[PHASE_NAME],isFeasible=True)
+
+if PHASE_ITERATIONS[PHASE_NAME] == 0:
+    ddp.xs = [ x for x in np.load(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME)]
+    ddp.us = [ u for u in np.load(BACKUP_PATH+'%s.us.npy' % PHASE_NAME)]
+elif PHASE_BACKUP[PHASE_NAME]:
+    np.save(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME,ddp.xs)
+    np.save(BACKUP_PATH+'%s.us.npy' % PHASE_NAME,ddp.us)
+if DISPLAY: disp(ddp.xs)
 
-models[fig].differential.costs.costs['xreg'].weight  = 100
+models[fig].differential.costs.costs['xreg'].weight  = 0.1
 models[fig].differential.costs.costs['xreg'].cost.ref=x0.copy()
 models[fig].differential.costs.costs['xreg'].cost.activation.weights[rmodel.nv:] = 10
-'''
 
-'''
+# ---------------------------------------------------------------------------------------------
 ### Jump with twist PI/2
+PHASE_NAME = "twist"
+
+ddp.xs = xjump0
+ddp.us = ujump0
+
 impact.costs['track16'].cost.ref = SE3(rotate('z',1.5),zero(3))*impact.costs['track16'].cost.ref
 impact.costs['track30'].cost.ref = SE3(rotate('z',1.5),zero(3))*impact.costs['track30'].cost.ref
 models[-1].differential.costs.costs['xreg'].cost.activation.weights[5] = 0
 
-for i in range(4,9):
+for i in range(6,7):
     impact.costs['track30'].weight = 10**i
     impact.costs['track16'].weight = 10**i
-    ddp.solve(init_xs=ddp.xs,init_us=ddp.us,maxiter=100,isFeasible=True)
-    disp(ddp.xs)
-    
-xjump3 = [ x.copy() for x in ddp.xs ]
-ujump3 = [ u.copy() for u in ddp.us ]
-#ddp.xs = xjump0
-#ddp.us = ujump0
-
-### Jump with twist PI
-impact.costs['track16'].cost.ref = SE3(rotate('z',3.15),zero(3))*impact.costs['track16'].cost.ref
-impact.costs['track30'].cost.ref = SE3(rotate('z',3.15),zero(3))*impact.costs['track30'].cost.ref
-models[-1].differential.costs.costs['xreg'].cost.activation.weights[5] = 0
+    ddp.solve(init_xs=ddp.xs,init_us=ddp.us,maxiter=PHASE_ITERATIONS[PHASE_NAME],isFeasible=True)
 
-for i in range(4,9):
-    impact.costs['track30'].weight = 10**i
-    impact.costs['track16'].weight = 10**i
-    ddp.solve(init_xs=ddp.xs,init_us=ddp.us,maxiter=100,isFeasible=True)
-    disp(ddp.xs)
-    
-xjump4 = [ x.copy() for x in ddp.xs ]
-ujump4 = [ u.copy() for u in ddp.us ]
-ddp.xs = xjump0
-ddp.us = ujump0
+if PHASE_ITERATIONS[PHASE_NAME] == 0:
+    ddp.xs = [ x for x in np.load(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME)]
+    ddp.us = [ u for u in np.load(BACKUP_PATH+'%s.us.npy' % PHASE_NAME)]
+elif PHASE_BACKUP[PHASE_NAME]:
+    np.save(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME,ddp.xs)
+    np.save(BACKUP_PATH+'%s.us.npy' % PHASE_NAME,ddp.us)
+if DISPLAY: disp(ddp.xs)
 
-'''
-
-### Salto!
-impact.costs['track16'].cost.ref = SE3(eye(3),left0)
-impact.costs['track30'].cost.ref = SE3(eye(3),right0)
-models[-1].differential.costs.costs['xreg'].cost.activation.weights[5] = 1
-
-xsalto = models[high].differential.costs.costs['xreg'].cost.ref.copy()
-xsalto[3]=1
-xsalto[6]=0
-models[high].differential.costs.costs['xreg'].cost.ref = xsalto
-models[high].differential.costs.costs['xreg'].cost.activation.weights[3:5] = 100
-
-impact.costs['track30'].weight = 0.1
-impact.costs['track16'].weight = 0.1
-ddp.xs = [x.copy() for x in xjump0]
-ddp.us = [u.copy() for u in ujump0]
-
-# from pinocchio.utils import se3ToXYZQUAT
-# D = 2*np.pi/(imp-9)
-# for i,x in enumerate(ddp.xs[9:imp]):
-#     '''
-#     oM1 1_p
-#     p st [ R p ] 0^c = c = R c + p   => p = c-Rc
-#     '''
-#     q = a2m(x)[:rmodel.nq]
-#     pinocchio.centerOfMass(rmodel,rdata,q)
-#     R = rotate('y',D*i)
-#     c = rdata.com[0].copy()
-#     p = c-R*c
-#     M = SE3(R,p)
-#     x[:7] = se3ToXYZQUAT(M*rdata.oMi[1])
-    
-    
-
-
-for i in range(1,9):
-    # impact.costs['track30'].weight = 10**i
-    # impact.costs['track16'].weight = 10**i
-    models[high].differential.costs.costs['xreg'].weight = 10**i
-    ddp.solve(init_xs=ddp.xs,init_us=ddp.us,maxiter=100,isFeasible=False)
-    disp(ddp.xs)
-    
-xjump5 = [ x.copy() for x in ddp.xs ]
-ujump5 = [ u.copy() for u in ddp.us ]
-ddp.xs = xjump0
-ddp.us = ujump0
diff --git a/examples/npydata/jump.frontal.us.npy b/examples/npydata/jump.frontal.us.npy
new file mode 100644
index 0000000000000000000000000000000000000000..07b4e75a465f286f3b8afa198d1acec4a0abe130
Binary files /dev/null and b/examples/npydata/jump.frontal.us.npy differ
diff --git a/examples/npydata/jump.frontal.xs.npy b/examples/npydata/jump.frontal.xs.npy
new file mode 100644
index 0000000000000000000000000000000000000000..fb237217df0b653b7070655ab3848bb5d3884173
Binary files /dev/null and b/examples/npydata/jump.frontal.xs.npy differ
diff --git a/examples/npydata/jump.initial.us.npy b/examples/npydata/jump.initial.us.npy
new file mode 100644
index 0000000000000000000000000000000000000000..471a214638ed4b7e459f26819831c3e988d295aa
Binary files /dev/null and b/examples/npydata/jump.initial.us.npy differ
diff --git a/examples/npydata/jump.initial.xs.npy b/examples/npydata/jump.initial.xs.npy
new file mode 100644
index 0000000000000000000000000000000000000000..d0b987f2bf3fc78fc6622c1272e3291124398cab
Binary files /dev/null and b/examples/npydata/jump.initial.xs.npy differ
diff --git a/examples/npydata/jump.landing.us.npy b/examples/npydata/jump.landing.us.npy
new file mode 100644
index 0000000000000000000000000000000000000000..baedbe399b5c8e8d2c1a20da5f0bd78bf61272ce
Binary files /dev/null and b/examples/npydata/jump.landing.us.npy differ
diff --git a/examples/npydata/jump.landing.xs.npy b/examples/npydata/jump.landing.xs.npy
new file mode 100644
index 0000000000000000000000000000000000000000..8eaaf9a3a9d5bd41f479b1601541a45e176cc96e
Binary files /dev/null and b/examples/npydata/jump.landing.xs.npy differ
diff --git a/examples/npydata/jump.lateral.us.npy b/examples/npydata/jump.lateral.us.npy
new file mode 100644
index 0000000000000000000000000000000000000000..45a861a605868713ce4c62e0cd3dcd5d698177b7
Binary files /dev/null and b/examples/npydata/jump.lateral.us.npy differ
diff --git a/examples/npydata/jump.lateral.xs.npy b/examples/npydata/jump.lateral.xs.npy
new file mode 100644
index 0000000000000000000000000000000000000000..bb11d4b5a9b419e11f0c7d0d371883c651d34b1b
Binary files /dev/null and b/examples/npydata/jump.lateral.xs.npy differ
diff --git a/examples/npydata/jump.twist.us.npy b/examples/npydata/jump.twist.us.npy
new file mode 100644
index 0000000000000000000000000000000000000000..abf49a23a2205a43d25fe58edce2dcffdbe46b0f
Binary files /dev/null and b/examples/npydata/jump.twist.us.npy differ
diff --git a/examples/npydata/jump.twist.xs.npy b/examples/npydata/jump.twist.xs.npy
new file mode 100644
index 0000000000000000000000000000000000000000..2834bae5e9cca61dc175d3efa0df7af0981021f2
Binary files /dev/null and b/examples/npydata/jump.twist.xs.npy differ
diff --git a/examples/salto.py b/examples/salto.py
index 936a31c5f8aff9be79439bbe3d0b68e12968c314..a7a546533cb3137251e6e9802fc314ea1e5a1cc4 100644
--- a/examples/salto.py
+++ b/examples/salto.py
@@ -35,7 +35,7 @@ from numpy.linalg import norm,inv,pinv,eig,svd
 PHASE_ITERATIONS = { \
                      "initial": 0,
                      "angle":  0,
-                     "landing": 100
+                     "landing": 0
                      }
 PHASE_BACKUP = { "initial": True,
                  "angle":   True,
@@ -222,7 +222,7 @@ ddp.solve(maxiter=PHASE_ITERATIONS[PHASE_NAME],regInit=.1,
 if PHASE_ITERATIONS[PHASE_NAME] == 0:
     ddp.xs = [ x for x in np.load(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME)]
     ddp.us = [ u for u in np.load(BACKUP_PATH+'%s.us.npy' % PHASE_NAME)]
-elif PHASE_BACKUP["initial"]:
+elif PHASE_BACKUP[PHASE_NAME]:
     np.save(BACKUP_PATH+'%s.xs.npy' % PHASE_NAME,ddp.xs)
     np.save(BACKUP_PATH+'%s.us.npy' % PHASE_NAME,ddp.us)