Index: game/Entity.cpp
===================================================================
--- game/Entity.cpp	(revision 6103)
+++ game/Entity.cpp	(working copy)
@@ -125,6 +125,14 @@
 	"direction of this vector defines the axis of rotation and the magnitude\n" \
 	"defines the rate of rotation about the axis in radians per second.");
 
+// tels #2897
+const idEventDef EV_ApplyImpulse( "applyImpulse", EventArgs(
+	'e', "source", "Pass $null_entity or the entity that applies the impulse", 
+	'd', "bodyid", "For articulated figures, ID of the body, 0 for the first (main) body. Otherwise use 0.", 
+	'v',"point", "Point on the body where the impulse is applied to",
+	'v',"impulse","Vector of the impulse"
+	), EV_RETURNS_VOID, "Applies an impulse to the entity. Example: entity.applyImpulse($player1, 0, entity.getOrigin(), '0 0 2');" ); 
+
 // greebo: Accessor events for the clipmask/contents flags
 const idEventDef EV_SetContents( "setContents", EventArgs('f', "contents", ""), EV_RETURNS_VOID, "Sets the contents of the physics object.");
 const idEventDef EV_GetContents( "getContents", EventArgs(), 'f', "Returns the contents of the physics object." );
@@ -538,6 +546,7 @@
 	EVENT( EV_SetLinearVelocity,	idEntity::Event_SetLinearVelocity )
 	EVENT( EV_GetAngularVelocity,	idEntity::Event_GetAngularVelocity )
 	EVENT( EV_SetAngularVelocity,	idEntity::Event_SetAngularVelocity )
+	EVENT( EV_ApplyImpulse,			idEntity::Event_ApplyImpulse )
 
 	EVENT( EV_SetContents,			idEntity::Event_SetContents )
 	EVENT( EV_GetContents,			idEntity::Event_GetContents )
@@ -7704,6 +7713,17 @@
 
 /*
 ================
+idEntity::Event_ApplyImpulse
+
+Tels #2897
+================
+*/
+void idEntity::Event_ApplyImpulse( idEntity *ent, const int id, const idVec3 &point, const idVec3 &impulse ) {
+		ApplyImpulse( ent, id, point, impulse );
+}
+
+/*
+================
 idEntity::Event_SetSize
 ================
 */
Index: game/Entity.h
===================================================================
--- game/Entity.h	(revision 6103)
+++ game/Entity.h	(working copy)
@@ -84,6 +84,7 @@
 extern const idEventDef EV_SetOwner;
 extern const idEventDef EV_GetAngles;
 extern const idEventDef EV_SetAngles;
+extern const idEventDef EV_ApplyImpulse;
 extern const idEventDef EV_SetLinearVelocity;
 extern const idEventDef EV_SetAngularVelocity;
 extern const idEventDef EV_SetSkin;
@@ -526,8 +527,8 @@
 
 	// Tels: If LOD is enabled on this entity, call ThinkAboutLOD, computing new LOD level and new
 	// alpha value, then do the right things like Hide/Show, SetAlpha, switch models/skin etc.
-	// We pass in a pointer to the data (so the LODE can use shared data) as well as the distance,
-	// so the lode can pre-compute the distance.
+	// We pass in a pointer to the data (so LOD can use shared data) as well as the distance,
+	// so the distance can be pre-computed.
 	// SteveL #3770: Params removed. They are now determined in SwitchLOD itself to avoid code repetition
 	// as multiple classes now use LOD.
 	virtual	bool			SwitchLOD();
@@ -1587,6 +1588,7 @@
 	void					Event_GetLinearVelocity( void );
 	void					Event_SetAngularVelocity( const idVec3 &velocity );
 	void					Event_GetAngularVelocity( void );
+	void					Event_ApplyImpulse( idEntity *ent, const int id, const idVec3 &point, const idVec3 &impulse );
 
 	void					Event_SetContents(const int contents);
 	void					Event_GetContents();
