diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp
index 792fcb99eeb547cda5c37bfff70a3905f232faec..8e756d2d9eb3624af84674a565ee384e56326e3c 100644
--- a/indra/newview/llviewerpartsource.cpp
+++ b/indra/newview/llviewerpartsource.cpp
@@ -706,8 +706,6 @@ void LLViewerPartSourceBeam::setColor(const LLColor4 &color)
 
 void LLViewerPartSourceBeam::updatePart(LLViewerPart &part, const F32 dt)
 {
-	F32 frac = part.mLastUpdateTime/part.mMaxAge;
-
 	LLViewerPartSource *ps = (LLViewerPartSource*)part.mPartSourcep;
 	LLViewerPartSourceBeam *psb = (LLViewerPartSourceBeam *)ps;
 	if (psb->mSourceObjectp.isNull())
@@ -736,6 +734,7 @@ void LLViewerPartSourceBeam::updatePart(LLViewerPart &part, const F32 dt)
 		target_pos_agent = psb->mTargetObjectp->getRenderPosition();
 	}
 
+	F32 frac = part.mLastUpdateTime / part.mMaxAge;
 	part.mPosAgent = (1.f - frac) * source_pos_agent;
 	if (psb->mTargetObjectp.isNull())
 	{
@@ -796,7 +795,7 @@ void LLViewerPartSourceBeam::update(const F32 dt)
 		}
 
 		LLViewerPart* part = new LLViewerPart();
-		part->init(this, mImagep, NULL);
+		part->init(this, mImagep, updatePart);
 
 		part->mFlags = LLPartData::LL_PART_INTERP_COLOR_MASK |
 						LLPartData::LL_PART_INTERP_SCALE_MASK |