diff --git a/CMakeLists.txt b/CMakeLists.txt
index 22991513c66cc410187dc37d04317adeef2c16b7..e778048ed72f6985121ace66b9b9261588745273 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -45,6 +45,12 @@ IF (HPP_DEBUG)
   SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHPP_DEBUG")
 ENDIF()
 
+# search for python
+IF(NOT DEFINED PYTHON_DESIRED_VERSION)
+  SET(PYTHON_DESIRED_VERSION 2.7)
+ENDIF()
+FINDPYTHON(${PYTHON_DESIRED_VERSION} EXACT)
+
 ADD_DOC_DEPENDENCY("hpp-core >= 4.3")
 ADD_REQUIRED_DEPENDENCY("hpp-corbaserver >= 4.3")
 ADD_REQUIRED_DEPENDENCY("hpp-rbprm >= 4.3")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e92f9596c1697ef24ed5f30d9b53f8eb55d9b342..05caec46481f3d1dbbb0a0b0cf8144ffe7b79503 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -24,9 +24,6 @@ OMNIIDL_INCLUDE_DIRECTORIES(
   ${HPP_CORBASERVER_DATAROOTDIR}/idl ${CMAKE_SOURCE_DIR}/idl
   )
 
-# search for python
-FINDPYTHON(2.7 EXACT REQUIRED)
-
 INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src)
 FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/hpp/corbaserver/rbprm)
 
diff --git a/src/hpp/corbaserver/rbprm/__init__.py b/src/hpp/corbaserver/rbprm/__init__.py
index 32c1be5fec19deb386b588745a7a265145f5e529..3ff722bf11996f80e40cc1a236b5b39d00fd3306 100644
--- a/src/hpp/corbaserver/rbprm/__init__.py
+++ b/src/hpp/corbaserver/rbprm/__init__.py
@@ -1 +1 @@
-from client import Client
+from .client import Client
diff --git a/src/hpp/corbaserver/rbprm/rbprmfullbody.py b/src/hpp/corbaserver/rbprm/rbprmfullbody.py
index 95f43ffad138968dd9cb9da5f0acb482329bb1f2..07e43a6a35271cd7a1f4a7bfca32cfa6f186c8ba 100755
--- a/src/hpp/corbaserver/rbprm/rbprmfullbody.py
+++ b/src/hpp/corbaserver/rbprm/rbprmfullbody.py
@@ -407,7 +407,7 @@ class FullBody (Robot):
                           Ns.append({})
                      if(len(P[i]) > 0):
                           targetName = limb
-                          if(dicEffector.has_key(limb)):
+                          if(limb in dicEffector):
                                 targetName = dicEffector[limb]['effector']
                           Ps[i][targetName] = P[i]
                           Ns[i][targetName] = N[i]
@@ -829,7 +829,7 @@ class FullBody (Robot):
      # \param viewer gepetto viewer instance
      def draw(self, configuration, viewer):
           viewer(configuration)
-          for limb, groupid in self.octrees.iteritems():
+          for limb, groupid in self.octrees.items():
                 transform = self.clientRbprm.rbprm.getOctreeTransform(limb, configuration)
                 viewer.client.gui.applyConfiguration(groupid,transform)
           viewer.client.gui.refresh()
diff --git a/src/hpp/corbaserver/rbprm/state_alg.py b/src/hpp/corbaserver/rbprm/state_alg.py
index 2490f07d46f5a66afa3e9e34ec8ab32f1ea964c8..62ef1cfb76127b01afe214e11fddc36e935ea941 100644
--- a/src/hpp/corbaserver/rbprm/state_alg.py
+++ b/src/hpp/corbaserver/rbprm/state_alg.py
@@ -16,6 +16,7 @@
 # hpp-manipulation-corba.  If not, see
 # <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
 from hpp.corbaserver.rbprm.rbprmstate import State
 from lp_find_point import find_valid_c_cwc, find_valid_c_cwc_qp, lp_ineq_4D
 from hpp.corbaserver.rbprm.tools.com_constraints import *
@@ -53,7 +54,7 @@ def isContactReachable(state, limbName, p, n, limbsCOMConstraints):
     res_ineq = [np.vstack([new_ineq[0],active_ineq[0]]), np.hstack([new_ineq[1],active_ineq[1]])]
     success, status_ok , res = lp_ineq_4D(res_ineq[0],-res_ineq[1])
     if not success:
-        print "In isContactReachable no stability, Lp failed (should not happen) ", status_ok
+        print("In isContactReachable no stability, Lp failed (should not happen) ", status_ok)
         return False, [-1,-1,-1]
     return (res[3] >= 0), res[0:3]
     
@@ -134,8 +135,8 @@ def projectToFeasibleCom(state,  ddc =[0.,0.,0.], max_num_samples = 10, friction
     ps = state.getContactPosAndNormals()
     p = ps[0][0]
     N = ps[1][0]
-    print "p", p
-    print "N", N
+    print("p", p)
+    print("N", N)
     #~ try:
     H = compute_CWC(p, N, state.fullBody.client.basic.robot.getMass(), mu = friction, simplify_cones = False)
     c_ref = state.getCenterOfMass()
@@ -150,12 +151,12 @@ def projectToFeasibleCom(state,  ddc =[0.,0.,0.], max_num_samples = 10, friction
         x[2] += 0.35
         for i in range(10):
             if state.fullBody.projectStateToCOM(state.sId ,x, max_num_samples):
-                print "success after " + str(i) + " trials"
+                print("success after " + str(i) + " trials")
                 return True
             else:
                 x[2]-=0.05
     else:
-        print "qp failed"
+        print("qp failed")
     return False;
     
 def isContactCreated(s1, s2):
diff --git a/src/hpp/corbaserver/rbprm/tools/com_constraints.py b/src/hpp/corbaserver/rbprm/tools/com_constraints.py
index d9b6b00d6e936bc1d5c51e83db3f09adb2848a86..c3927b1faa52d81ff6027db8c43e64381ff4dc54 100644
--- a/src/hpp/corbaserver/rbprm/tools/com_constraints.py
+++ b/src/hpp/corbaserver/rbprm/tools/com_constraints.py
@@ -1,9 +1,10 @@
+from __future__ import print_function
 import matplotlib
 #~ matplotlib.use('Agg')
 import matplotlib.pyplot as plt
 from mpl_toolkits.mplot3d import Axes3D
 from cwc import cone_optimization
-from obj_to_constraints import ineq_from_file, rotate_inequalities
+from .obj_to_constraints import ineq_from_file, rotate_inequalities
 import numpy as np
 import math
 from numpy.linalg import norm
@@ -45,8 +46,8 @@ def get_com_constraint(fullBody, state, config, limbsCOMConstraints, interm = Fa
     As = [];    bs = []
     fullBody.setCurrentConfig(config)
     contacts = []
-    for i, v in limbsCOMConstraints.iteritems():
-        if not constraintsComLoaded.has_key(i):
+    for i, v in limbsCOMConstraints.items():
+        if i not in constraintsComLoaded:
             constraintsComLoaded[i] = ineq_from_file(ineqPath+v['file'])
         contact = (interm and fullBody.isLimbInContactIntermediary(i, state)) or (not interm and fullBody.isLimbInContact(i, state))
         if(contact):
@@ -65,12 +66,12 @@ def get_com_constraint(fullBody, state, config, limbsCOMConstraints, interm = Fa
     if(len(As) > 0):
         return [np.vstack(As), np.hstack(bs)]
     else:
-        print "Warning: no active contact in get_com_constraint"
+        print("Warning: no active contact in get_com_constraint")
         return [np.zeros([3,3]), np.zeros(3)]
     
 def get_com_constraint_at_transform(pos_quat, limb, limbsCOMConstraints):
     global constraintsLoaded
-    if not constraintsComLoaded.has_key(limb):
+    if limb not in constraintsComLoaded:
             constraintsComLoaded[limb] = ineq_from_file(ineqPath+limbsCOMConstraints[limb]['file'])
     tr = quaternion_matrix(pos_quat[3:7])            
     tr[:3,3] = np.array(pos_quat[0:3])
diff --git a/src/hpp/corbaserver/rbprm/tools/cwc_trajectory.py b/src/hpp/corbaserver/rbprm/tools/cwc_trajectory.py
index 58a52957589c9a2105483b52a34ff9b834236c95..1897cbff9fc8a94370a2e8052294df3deb42effb 100644
--- a/src/hpp/corbaserver/rbprm/tools/cwc_trajectory.py
+++ b/src/hpp/corbaserver/rbprm/tools/cwc_trajectory.py
@@ -1,13 +1,14 @@
+from __future__ import print_function
 import matplotlib
 #~ matplotlib.use('Agg')
 import matplotlib.pyplot as plt
 from mpl_toolkits.mplot3d import Axes3D
 from cwc import cone_optimization
-from obj_to_constraints import ineq_from_file, rotate_inequalities
+from .obj_to_constraints import ineq_from_file, rotate_inequalities
 import numpy as np
 import math
 from numpy.linalg import norm
-from com_constraints import get_com_constraint
+from .com_constraints import get_com_constraint
 import time
 
 import hpp.corbaserver.rbprm.data.com_inequalities as ine
@@ -43,7 +44,7 @@ lastspeed = np.array([0,0,0])
 
 		
 def compute_state_info(fullBody,states, state_id, phase_dt, mu, computeCones, limbsCOMConstraints, pathId = 0):
-	print "phase dt in compute_state_info:",phase_dt
+	print("phase dt in compute_state_info:",phase_dt)
 	init_com = __get_com(fullBody, states[state_id])
 	end_com = __get_com(fullBody, states[state_id+1])
 	p, N = fullBody.computeContactPoints(state_id)
@@ -70,7 +71,7 @@ def compute_state_info(fullBody,states, state_id, phase_dt, mu, computeCones, li
 			COMConstraints.append(get_com_constraint(fullBody, state_id, states[state_id], limbsCOMConstraints, True))
 		if(len(p) > len(COMConstraints)):
 			COMConstraints.append(get_com_constraint(fullBody, state_id + 1, states[state_id + 1], limbsCOMConstraints))
-	print 'num cones ', len(cones)
+	print('num cones ', len(cones))
 	return p, N, init_com, end_com, t_end_phases, cones, COMConstraints
 
 def compute_initial_guess(fullBody,t_end_phases,pathId,state_id,dt=0.01):
@@ -117,8 +118,8 @@ reduce_ineq = True, verbose = False, limbsCOMConstraints = None, profile = False
 		t_end_phases += [t_end_phases[-1] + t for t in t_end_phases1[1:]]
 	initial_guess = compute_initial_guess(fullBody,t_end_phases,pathId,state_id,dt)
 	if (not profile):
-			print "num cones ", len(cones)
-			print "end_phases", t_end_phases
+			print("num cones ", len(cones))
+			print("end_phases", t_end_phases)
 	
 	timeelapsed = 0		
 	if (profile):
@@ -129,10 +130,10 @@ reduce_ineq = True, verbose = False, limbsCOMConstraints = None, profile = False
 	else:
 		init_vel=[0,0,0]
 		end_vel=[0,0,0]
-	print "init_vel ="
-	print init_vel
-	print "end_vel = "
-	print end_vel
+	print("init_vel =")
+	print(init_vel)
+	print("end_vel = ")
+	print(end_vel)
 	var_final, params = cone_optimization(p, N, [init_com + init_vel, end_com + end_vel], t_end_phases[1:], dt, cones, COMConstraints, mu, mass, 9.81, reduce_ineq, verbose,
 	constraints, param_constraints,initial_guess = initial_guess)
 	#~ print "end_com ", end_com , "computed end come", var_final['c'][-1], var_final['c_end']
@@ -148,20 +149,20 @@ reduce_ineq = True, verbose = False, limbsCOMConstraints = None, profile = False
 		var_final['dc'] = var_final['dc'][:init_waypoint_time+1]
 		var_final['ddc'] = var_final['ddc'][:init_waypoint_time+1]
 		params["t_init_phases"] = params["t_init_phases"][:4]
-		print "trying to project on com (from, to) ", init_end_com, var_final['c'][-1]
+		print("trying to project on com (from, to) ", init_end_com, var_final['c'][-1])
 		if (fullBody.projectStateToCOM(state_id+1, (var_final['c'][-1]).tolist())):
 			#~ print "PROJECTED", init_end_com, var_final['c'][-1]
 			states[state_id+1] = fullBody.getConfigAtState(state_id+1) #updating config from python side)
 			lastspeed = var_final['dc'][init_waypoint_time]		
-			print "init speed", lastspeed
+			print("init speed", lastspeed)
 		else:
 			use_window = 0
-			print "reached com is not good, restarting problem with window = ",use_window
+			print("reached com is not good, restarting problem with window = ",use_window)
 			return gen_trajectory(fullBody, states, state_id, computeCones, mu, dt, phase_dt, reduce_ineq, verbose, limbsCOMConstraints, profile, use_window = use_window, pathId = pathId)
 	else:		
 		if norm(np.array(var_final['c'][-1]) - np.array(__get_com(fullBody, states[state_id+1]))) > 0.00001:
-			print "error in com desired: obtained ", __get_com(fullBody, states[state_id+1]), var_final['c'][-1]
-			print "restarting problem with windows = ",use_window+1
+			print("error in com desired: obtained ", __get_com(fullBody, states[state_id+1]), var_final['c'][-1])
+			print("restarting problem with windows = ",use_window+1)
 			return gen_trajectory(fullBody, states, state_id, computeCones, mu, dt, phase_dt ,reduce_ineq, verbose, limbsCOMConstraints, profile , use_window + 1,use_velocity, pathId)
 	lastspeed = np.array([0,0,0])
 		
@@ -194,8 +195,8 @@ def draw_trajectory(fullBody, states, state_id, computeCones = False, mu = 1,  d
 	#plt.show()
 	plt.savefig('/tmp/figCWC/c'+ str(state_id)+ '.png')
 	
-	print "plotting speed "
-	print "end target ",  params['x_end']
+	print("plotting speed ")
+	print("end target ",  params['x_end'])
 	fig = plt.figure()
 	ax = fig.add_subplot(111)
 	if(use_window > 0):
@@ -213,7 +214,7 @@ def draw_trajectory(fullBody, states, state_id, computeCones = False, mu = 1,  d
 	#~ plt.show()
 	plt.savefig('/tmp/figCWC/dc'+ str(state_id)+ '.png')
 	
-	print "plotting acceleration "
+	print("plotting acceleration ")
 	fig = plt.figure()
 	ax = fig.add_subplot(111)
 	if(use_window > 0):
@@ -229,7 +230,7 @@ def draw_trajectory(fullBody, states, state_id, computeCones = False, mu = 1,  d
 		#~ plt.show()
 	plt.savefig('/tmp/figCWC/ddc'+ str(state_id)+ '.png')
 	
-	print "plotting Dl "
+	print("plotting Dl ")
 	fig = plt.figure()
 	ax = fig.add_subplot(111)
 	points = var_final['dL']
@@ -244,7 +245,7 @@ def draw_trajectory(fullBody, states, state_id, computeCones = False, mu = 1,  d
 	
 def __cVarPerPhase(var, dt, t, final_state, addValue):
 	varVals = addValue + [v.tolist() for v in final_state[var]]
-	print "cVarPerPhase : t = ", t
+	print("cVarPerPhase : t = ", t)
 	varPerPhase = [[varVals[(int)(round(t_id/dt)) ] for t_id in np.arange(t[index],t[index+1]-_EPS,dt)] for index, _ in enumerate(t[:-1])  ]
 	#print "varperPhase ="
 	#print varPerPhase
@@ -264,15 +265,15 @@ def __cVarPerPhase(var, dt, t, final_state, addValue):
 	
 def __optim__threading_ok(fullBody, states, state_id, computeCones = False, mu = 1, dt =0.1, phase_dt = [0.4, 1], reduce_ineq = True,
  num_optims = 0, draw = False, verbose = False, limbsCOMConstraints = None, profile = False, use_window = 0,use_velocity=False, pathId = 0):
-	print "callgin gen ",state_id
+	print("callgin gen ",state_id)
 	if(draw):
 		res = draw_trajectory(fullBody, states, state_id, computeCones, mu, dt, phase_dt, reduce_ineq, verbose, limbsCOMConstraints, use_window,use_velocity, pathId)
 	else:
 		res = gen_trajectory(fullBody, states, state_id, computeCones, mu, dt, phase_dt, reduce_ineq, verbose, limbsCOMConstraints, profile, use_window,use_velocity, pathId)
 	alpha = res[1]['alpha']
-	print "t in optim_threading :",res[1]["t_init_phases"]
+	print("t in optim_threading :",res[1]["t_init_phases"])
 	t = [ti * alpha for ti in res[1]["t_init_phases"]]
-	print "t after alpha in optim_threading :",t
+	print("t after alpha in optim_threading :",t)
 	dt = res[1]["dt"] * alpha
 	final_state = res[0]
 	c0 =  res[1]["x_init"][0:3]
@@ -289,22 +290,22 @@ def solve_com_RRT(fullBody, states, state_id, computeCones = False, mu = 1, dt =
 reduce_ineq = True, num_optims = 0, draw = False, verbose = False, limbsCOMConstraints = None, profile = False, use_window = 0, trackedEffectors = [],use_velocity=False,pathId = 0):
 	comPosPerPhase, timeElapsed, final_state = __optim__threading_ok(fullBody, states, state_id, computeCones, mu, dt, phase_dt,
 	reduce_ineq, num_optims, draw, verbose, limbsCOMConstraints, profile, use_window,use_velocity, pathId)
-	print "done. generating state trajectory ",state_id	
+	print("done. generating state trajectory ",state_id)	
 	paths_ids = [int(el) for el in fullBody.comRRTFromPos(state_id,comPosPerPhase[0],comPosPerPhase[1],comPosPerPhase[2],num_optims)]
-	print "done. computing final trajectory to display ",state_id, "path ids ", paths_ids[-1], " ," , paths_ids[:-1]
+	print("done. computing final trajectory to display ",state_id, "path ids ", paths_ids[-1], " ," , paths_ids[:-1])
 	return paths_ids[-1], paths_ids[:-1], timeElapsed, final_state
 	
 def solve_effector_RRT(fullBody, states, state_id, computeCones = False, mu = 1, dt =0.1, phase_dt = [0.4, 1],
 reduce_ineq = True, num_optims = 0, draw = False, verbose = False, limbsCOMConstraints = None, profile = False, use_window = 0, trackedEffectors = [],use_velocity=False,pathId = 0):
 	comPosPerPhase, timeElapsed, final_state = __optim__threading_ok(fullBody, states, state_id, computeCones, mu, dt, phase_dt,
 	reduce_ineq, num_optims, draw, verbose, limbsCOMConstraints, profile, use_window,use_velocity, pathId)
-	print "done. generating state trajectory ",state_id		
+	print("done. generating state trajectory ",state_id)		
 	if(len(trackedEffectors) == 0):
 		paths_ids = [int(el) for el in fullBody.effectorRRT(state_id,comPosPerPhase[0],comPosPerPhase[1],comPosPerPhase[2],num_optims)]
 	else:
-		print "handling extra effector constraints"
+		print("handling extra effector constraints")
 		refPathId = trackedEffectors[0]; path_start = trackedEffectors[1]; path_to  = trackedEffectors[2]; effectorstracked = trackedEffectors[3]
 		paths_ids = [int(el) for el in fullBody.effectorRRTFromPath(state_id, refPathId, path_start, path_to, comPosPerPhase[0],comPosPerPhase[1],comPosPerPhase[2],num_optims, effectorstracked)]
-	print "done. computing final trajectory to display ",state_id, "path ids ", paths_ids[-1], " ," , paths_ids[:-1]
+	print("done. computing final trajectory to display ",state_id, "path ids ", paths_ids[-1], " ," , paths_ids[:-1])
 	return paths_ids[-1], paths_ids[:-1], timeElapsed, final_state
 	
diff --git a/src/hpp/corbaserver/rbprm/tools/cwc_trajectory_helper.py b/src/hpp/corbaserver/rbprm/tools/cwc_trajectory_helper.py
index 9a965e2071da5551d090a156d5e0020b5f1568f9..50e4612c20fdcacf38d1fc01bb54f7005d970270 100644
--- a/src/hpp/corbaserver/rbprm/tools/cwc_trajectory_helper.py
+++ b/src/hpp/corbaserver/rbprm/tools/cwc_trajectory_helper.py
@@ -1,4 +1,4 @@
-
+from __future__ import print_function
 from hpp.corbaserver.rbprm.tools.cwc_trajectory import *
 from hpp.corbaserver.rbprm.tools.path_to_trajectory import *
 from cwc import OptimError, cone_optimization
@@ -35,7 +35,7 @@ def displayComPath(pp, pathId,color=[0.,0.75,0.15,0.9]) :
 
 def genPandNperFrame(fullBody, stateid, limbsCOMConstraints, pp, path_ids, times, dt_framerate=1./24.):
 	p, N= fullBody.computeContactPointsPerLimb(stateid, limbsCOMConstraints.keys(), limbsCOMConstraints)
-	freeEffectors = [ [limbsCOMConstraints[limb]['effector'] for limb in limbsCOMConstraints.keys() if not p[i].has_key(limbsCOMConstraints[limb]['effector'])] for i in range(len(p))]
+	freeEffectors = [ [limbsCOMConstraints[limb]['effector'] for limb in limbsCOMConstraints.keys() if limbsCOMConstraints[limb]['effector'] not in p[i]] for i in range(len(p))]
 	config_size = len(fullBody.getCurrentConfig())
 	interpassed = False
 	pRes = []
@@ -127,9 +127,9 @@ def __getTimes(fullBody, configs, i, time_scale):
 def __getTimes(fullBody, configs, i, time_scale,use_window=0):
 		t = fullBody.getTimeAtState(i+1) - fullBody.getTimeAtState(i)
                 dt = 0.02
-		print "t = ",t
+		print("t = ",t)
 		t = time_scale*t
-		print "after scale, t = ",t
+		print("after scale, t = ",t)
 		trunk_distance =  np.linalg.norm(np.array(configs[i+1][0:3]) - np.array(configs[i][0:3]))
 		distance = max(fullBody.getEffectorDistance(i,i+1), trunk_distance)
 		# TODO : si t = 0, hardcoded ...
@@ -146,7 +146,7 @@ def __getTimes(fullBody, configs, i, time_scale,use_window=0):
                 """
 		times[1] = t - 2*times[0]
 		times[1] = float((int)(math.floor(times[1]*100.))) / 100.
-		print "times : ",times
+		print("times : ",times)
 		return times, dt, distance,use_window
 
 
@@ -154,30 +154,30 @@ from hpp import Error as hpperr
 import sys, time
 def step(fullBody, configs, i, optim, pp, limbsCOMConstraints,  friction = 0.5, optim_effectors = True, time_scale = 20., useCOMConstraints = False, use_window = 0, verbose = False, draw = False,
 trackedEffectors = [],use_velocity=False,pathId = 0):
-	print "##########################################"
+	print("##########################################")
 	global errorid
 	global stat_data	
 	fail = 0
 	#~ try:
-	print "Use window = ",use_window
+	print("Use window = ",use_window)
 	if(True):
 		times = [];
 		dt = 1000;
 		times, dt, distance,use_window = __getTimes(fullBody, configs, i, time_scale,use_window)
-		print "Use window = ",use_window
+		print("Use window = ",use_window)
 		if distance == 0:
 				use_window = use_window+1
 		use_window = max(0, min(use_window,  (len(configs) - 1) - (i + 2))) # can't use preview if last state is reached
 		w = 0
 		while w < (use_window+1):
 			times2, dt2, dist2,use_window = __getTimes(fullBody, configs, i+w, time_scale,use_window)
-			print "Use window = ",use_window
+			print("Use window = ",use_window)
 			times += times2
 			dt = min(dt, dt2)
 			w = w+1
 		time_per_path = [times[0]] + [times[1]] + [times [0]]
-		print 'time per path', times, time_per_path
-		print 'dt', dt
+		print('time per path', times, time_per_path)
+		print('dt', dt)
 		if(distance > 0.0001):		
 			stat_data["num_trials"] += 1
 			if(useCOMConstraints):
@@ -200,9 +200,9 @@ trackedEffectors = [],use_velocity=False,pathId = 0):
 			#~ if(len(trajec) > 0):
 				#~ frame_rate = 1./25.
 				#~ frame_rate_andrea = 1./1001.
-			print "first traj :"
+			print("first traj :")
 			new_traj = gen_trajectory_to_play(fullBody, pp, trajectory, time_per_path, frame_rate)
-			print "traj Andrea : "
+			print("traj Andrea : ")
 			new_traj_andrea = gen_trajectory_to_play(fullBody, pp, trajectory, time_per_path,frame_rate_andrea)
 			#~ new_contacts = gencontactsPerFrame(fullBody, i, limbsCOMConstraints, pp, trajectory, times, frame_rate_andrea)	
 			Ps, Ns, freeEffectorsPerPhase = genPandNperFrame(fullBody, i, limbsCOMConstraints, pp, trajectory, time_per_path, frame_rate_andrea)
@@ -231,7 +231,7 @@ trackedEffectors = [],use_velocity=False,pathId = 0):
 			#assert(len(trajec_mil) == len(pos) and len(normals) == len(pos) and len(normals) == len(coms) and len(coms) == len(pEffs))
 			stat_data["num_success"] += 1
 		else:
-			print "TODO, NO CONTACT VARIATION, LINEAR INTERPOLATION REQUIRED"
+			print("TODO, NO CONTACT VARIATION, LINEAR INTERPOLATION REQUIRED")
 	#~ except hpperr as e:		
 		#~ print "hpperr failed at id " + str(i) , e.strerror
 		#~ if (use_window == 0 and (len(configs) - 1) - (i + 2) > 0):
@@ -335,27 +335,27 @@ def step_profile(fullBody, configs, i, optim, limbsCOMConstraints,  friction = 0
 			__update_cwc_time(timeelapsed)	
 			stat_data["num_success"] += 1
 		else:
-			print "TODO, NO CONTACT VARIATION, LINEAR INTERPOLATION REQUIRED"
+			print("TODO, NO CONTACT VARIATION, LINEAR INTERPOLATION REQUIRED")
 	except hpperr as e:
-		print "hpperr failed at id " + str(i) , e.strerror
+		print("hpperr failed at id " + str(i) , e.strerror)
 		stat_data["error_com_proj"] += 1
 		stat_data["num_errors"] += 1
 		errorid += [i]
 		fail+=1
 	except OptimError as e:
-		print "OptimError failed at id " + str(i) , e.strerror
+		print("OptimError failed at id " + str(i) , e.strerror)
 		stat_data["error_optim_fail"] += 1
 		stat_data["num_errors"] += 1
 		errorid += [i]
 		fail+=1
 	except ValueError as e:
-		print "ValueError failed at id " + str(i) , e
+		print("ValueError failed at id " + str(i) , e)
 		stat_data["error_unknown"] += 1
 		stat_data["num_errors"] += 1
 		errorid += [i]
 		fail+=1
 	except IndexError as e:
-		print "IndexError failed at id " + str(i) , e
+		print("IndexError failed at id " + str(i) , e)
 		stat_data["error_unknown"] += 1
 		stat_data["num_errors"] += 1
 		errorid += [i]
@@ -363,7 +363,7 @@ def step_profile(fullBody, configs, i, optim, limbsCOMConstraints,  friction = 0
 	except Exception as e:
 		stat_data["error_unknown"] += 1
 		stat_data["num_errors"] += 1
-		print e
+		print(e)
 		errorid += [i]
 		fail+=1
 	except:
@@ -472,7 +472,7 @@ def write_stats(filename):
 def profile(fullBody, configs, i_start, i_end, limbsCOMConstraints,  friction = 0.5, optim_effectors = False, time_scale = 20., useCOMConstraints = False, filename ="log.txt"):	
 	global stat_data		
 	if(i_end > len(configs)-1):
-		print "ERROR: i_end < len_configs ", i_end, len(configs)-1
+		print("ERROR: i_end < len_configs ", i_end, len(configs)-1)
 		return # no point in trying optim, path was not fully computed
 	for i in range(i_start, i_end):		
 		step_profile(fullBody, configs, i, 0, limbsCOMConstraints,  friction, optim_effectors, time_scale, useCOMConstraints)
diff --git a/src/hpp/corbaserver/rbprm/tools/path_to_trajectory.py b/src/hpp/corbaserver/rbprm/tools/path_to_trajectory.py
index 848313e1ecee4342ab2d80f78c1b5615d2fc0d58..25ee323342485384348aa819e57940e783ba911e 100644
--- a/src/hpp/corbaserver/rbprm/tools/path_to_trajectory.py
+++ b/src/hpp/corbaserver/rbprm/tools/path_to_trajectory.py
@@ -1,5 +1,6 @@
 __24fps = 1. / 24.
 __EPS = 0.00001
+from __future__ import print_function
 from numpy.linalg import norm
 
 def __linear_interpolation(p0,p1,dist_p0_p1, val):
@@ -29,7 +30,7 @@ def __find_q_t(robot, path_player, path_id, t):
 		q = pp.client.problem.configAtParam (path_id, u)
 		current_t = q[-1]
 		if(a >= b):
-			print "ERROR, a > b, t does not exist"
+			print("ERROR, a > b, t does not exist")
 		if abs(current_t - t) < __EPS:
 			#print "last config q = ",q[-1]
 			return q[:-1]
@@ -50,7 +51,7 @@ def linear_interpolate_path(robot, path_player, path_id, total_time, dt_framerat
 	
 def follow_trajectory_path(robot, path_player, path_id, total_time, dt_framerate=__24fps):
 	pp = path_player
-	print "total_times in follow path : ",total_time
+	print("total_times in follow path : ",total_time)
 	length = pp.client.problem.pathLength (path_id)
 	num_frames_required = total_time / dt_framerate
 	dt = float(length) / num_frames_required
@@ -60,12 +61,12 @@ def follow_trajectory_path(robot, path_player, path_id, total_time, dt_framerate
 	return[__find_q_t(robot, path_player, path_id, t) for t in dt_finals]
 	
 def gen_trajectory_to_play(robot, path_player, path_ids, total_time_per_paths, dt_framerate=__24fps):
-	print "gen_trajectory : dt = ",dt_framerate
+	print("gen_trajectory : dt = ",dt_framerate)
 	config_size = len(robot.getCurrentConfig())
 	res = []
 	pp = path_player
 	activeid = 0
-	print "path_ids = ", path_ids
+	print("path_ids = ", path_ids)
 	for i, path_id in enumerate(path_ids):
 		config_size_path = len(path_player.client.problem.configAtParam (int(path_id), 0))
 		if(config_size_path > config_size):
diff --git a/src/hpp/corbaserver/rbprm/tools/time_out.py b/src/hpp/corbaserver/rbprm/tools/time_out.py
index 08a6dcdb8035f76677ba36ba7921ed3cf053cbdc..58ec3c5a92d47ece96a54d3c0450d037e37b87b5 100644
--- a/src/hpp/corbaserver/rbprm/tools/time_out.py
+++ b/src/hpp/corbaserver/rbprm/tools/time_out.py
@@ -1,3 +1,4 @@
+from __future__ import print_function
 import signal
 
 # Register an handler for the timeout
@@ -19,17 +20,17 @@ if __name__ == '__main__':
 	def loop(dt1, dt2):
 		import time
 		for i in range(dt1 + dt2):
-			print "sec"
+			print("sec")
 			time.sleep(1)
         
 	try:
 		run_time_out(loop, 3, 3, 2)
-	except Exception, exc: 
-		print exc
-		print "exception caught, ok"
+	except Exception as exc: 
+		print(exc)
+		print("exception caught, ok")
 		
 	try:
 		run_time_out(loop, 6, 3, 2)
-	except Exception, exc: 
-		print exc
-		print "exception should NOT becaught"
+	except Exception as exc: 
+		print(exc)
+		print("exception should NOT becaught")