diff --git a/libraries/AP_AHRS/AP_AHRS.h b/libraries/AP_AHRS/AP_AHRS.h
index 883c158a530a1830485c553ede66d7ece57bec3d..10e2b90381a92bfcca0826a59bc338a1edb5e0ed 100644
--- a/libraries/AP_AHRS/AP_AHRS.h
+++ b/libraries/AP_AHRS/AP_AHRS.h
@@ -82,6 +82,8 @@ public:
 	// attitude
 	virtual Matrix3f get_dcm_matrix(void) = 0;
 
+	static const struct AP_Param::GroupInfo var_info[];
+
 protected:
 	// pointer to compass object, if enabled
 	Compass 	* _compass;
diff --git a/libraries/AP_AHRS/AP_AHRS_DCM.cpp b/libraries/AP_AHRS/AP_AHRS_DCM.cpp
index b6fa2e1f4596de5ac8f194fd5388c3fa605d2435..2cf29b3249ef2adfe679ca98220ff730b63edf51 100644
--- a/libraries/AP_AHRS/AP_AHRS_DCM.cpp
+++ b/libraries/AP_AHRS/AP_AHRS_DCM.cpp
@@ -23,6 +23,12 @@
 // from the GPS and wait for the ground speed to get above GPS_SPEED_MIN
 #define GPS_SPEED_RESET 100
 
+// table of user settable parameters
+const AP_Param::GroupInfo AP_AHRS::var_info[] PROGMEM = {
+    AP_GROUPINFO("YAW_P", 0, AP_AHRS_DCM, _kp_yaw),
+    AP_GROUPEND
+};
+
 // run a full DCM update round
 void
 AP_AHRS_DCM::update(void)
@@ -453,7 +459,7 @@ AP_AHRS_DCM::drift_correction(float deltat)
 	// allow the yaw reference source to affect all 3 components
 	// of _omega_yaw_P as we need to be able to correctly hold a
 	// heading when roll and pitch are non-zero
-	_omega_yaw_P = error * _kp_yaw;
+	_omega_yaw_P = error * _kp_yaw.get();
 
 	// add yaw correction to integrator correction vector, but
 	// only for the z gyro. We rely on the accelerometers for x
diff --git a/libraries/AP_AHRS/AP_AHRS_DCM.h b/libraries/AP_AHRS/AP_AHRS_DCM.h
index 5952380c7e938f9f50bef1401a1480fdf1975eff..600592d8e5682d933a4379e16131210a9fe8c32c 100644
--- a/libraries/AP_AHRS/AP_AHRS_DCM.h
+++ b/libraries/AP_AHRS/AP_AHRS_DCM.h
@@ -17,7 +17,7 @@ public:
 	AP_AHRS_DCM(IMU *imu, GPS *&gps) : AP_AHRS(imu, gps)
 	{
 		_kp_roll_pitch = 0.13;
-		_kp_yaw        = 0.4;
+		_kp_yaw.set(0.4);
 		_dcm_matrix(Vector3f(1, 0, 0),
 			    Vector3f(0, 1, 0),
 			    Vector3f(0, 0, 1));
@@ -42,10 +42,12 @@ public:
 	float		get_error_rp(void);
 	float		get_error_yaw(void);
 
+	// settable parameters
+	AP_Float	_kp_yaw;
+
 private:
 	float		_kp_roll_pitch;
 	float		_ki_roll_pitch;
-	float		_kp_yaw;
 	float		_ki_yaw;
 	bool		_have_initial_yaw;