Index: /trunk/nv/bullet/bullet_world.hh
===================================================================
--- /trunk/nv/bullet/bullet_world.hh	(revision 527)
+++ /trunk/nv/bullet/bullet_world.hh	(revision 528)
@@ -31,4 +31,6 @@
 		virtual collision_shape create_static_plane( const vec3& norm, float cst );
 		virtual collision_shape create_mesh( array_view< vec3 > vtx, array_view< uint32 > idx );
+		virtual void set_local_scaling( collision_shape shape, const vec3& value );
+		virtual vec3 get_local_scaling( collision_shape shape );
 		virtual rigid_body create_rigid_body( float mass, const transform& tr, collision_shape shape, const vec3& com_offset = vec3() );
 		virtual constraint create_hinge_constraint( rigid_body a, const transform& ta, rigid_body b, const transform& tb, const vec2& low_high, const vec3& params = vec3( 0.9f, 0.3f, 1.0f ) );
@@ -43,5 +45,6 @@
 		virtual void set_rigid_body_linear_velocity( rigid_body body, const vec3& velocity );
 		virtual void set_rigid_body_ccd( rigid_body body, float radius, float threshold );
-
+		virtual vec3 get_rigid_body_linear_velocity( rigid_body body );
+		virtual void apply_central_impulse( rigid_body body, const vec3& impulse );
 		virtual nv::transform get_world_transform( rigid_body body );
 		virtual void set_world_transform( rigid_body body, const nv::transform& tr );
Index: /trunk/nv/interface/physics_world.hh
===================================================================
--- /trunk/nv/interface/physics_world.hh	(revision 527)
+++ /trunk/nv/interface/physics_world.hh	(revision 528)
@@ -74,4 +74,6 @@
 		virtual collision_shape create_box( const vec3& half_extens ) = 0;
 		virtual collision_shape create_static_plane( const vec3& norm, float cst ) = 0;
+		virtual void set_local_scaling( collision_shape shape, const vec3& value ) = 0;
+		virtual vec3 get_local_scaling( collision_shape shape ) = 0;
 		virtual rigid_body create_rigid_body( float mass, const transform& tr, collision_shape shape, const vec3& com_offset = vec3() ) = 0;
 		virtual constraint create_hinge_constraint( rigid_body a, const transform& ta, rigid_body b, const transform& tb, const vec2& low_high, const vec3& params = vec3( 0.9f, 0.3f, 1.0f ) ) = 0;
@@ -87,5 +89,7 @@
 		virtual void set_rigid_body_linear_velocity( rigid_body body, const vec3& velocity ) = 0;
 		virtual void set_rigid_body_ccd( rigid_body body, float radius, float threshold ) = 0;
+		virtual vec3 get_rigid_body_linear_velocity( rigid_body body ) = 0;
 		virtual transform get_world_transform( rigid_body body ) = 0;
+		virtual void apply_central_impulse( rigid_body body, const vec3& impulse ) = 0;
 		virtual void set_world_transform( rigid_body body, const transform& tr ) = 0;
 		virtual int get_collision_flags( rigid_body body ) = 0;
Index: /trunk/src/bullet/bullet_world.cc
===================================================================
--- /trunk/src/bullet/bullet_world.cc	(revision 527)
+++ /trunk/src/bullet/bullet_world.cc	(revision 528)
@@ -140,4 +140,16 @@
 }
 
+void nv::bullet_world::set_local_scaling( collision_shape shape, const vec3& value )
+{
+	btCollisionShape* sh = static_cast<btCollisionShape*>( shape.internal );
+	sh->setLocalScaling( n2b( value ) );
+}
+
+vec3 nv::bullet_world::get_local_scaling( collision_shape shape )
+{
+	btCollisionShape* sh = static_cast<btCollisionShape*>( shape.internal );
+	return b2n( sh->getLocalScaling() );
+}
+
 constraint nv::bullet_world::create_hinge_constraint( rigid_body a, const transform& ta, rigid_body b, const transform& tb, const vec2& low_high, const vec3& params /*= vec3( 0.9f, 0.3f, 1.0f ) */ )
 {
@@ -203,4 +215,17 @@
 	rb->setCcdMotionThreshold( threshold );
 	rb->setCcdSweptSphereRadius( radius );
+}
+
+vec3 nv::bullet_world::get_rigid_body_linear_velocity( rigid_body body )
+{
+	btRigidBody* rb = static_cast<btRigidBody*>( body.internal );
+	return b2n( rb->getLinearVelocity() );
+}
+
+void nv::bullet_world::apply_central_impulse( rigid_body body, const vec3& impulse )
+{
+	btRigidBody* rb = static_cast<btRigidBody*>( body.internal );
+	rb->applyCentralImpulse( n2b( impulse ) );
+	rb->forceActivationState( ACTIVE_TAG );
 }
 
