diff --git a/include/usgscsm/UsgsAstroFrameSensorModel.h b/include/usgscsm/UsgsAstroFrameSensorModel.h
index c07d317a3e85afdc366cd76c30153c8b745bdba3..10c4e6c3953dbf7c5f9ec44b15914d71f7ffb608 100644
--- a/include/usgscsm/UsgsAstroFrameSensorModel.h
+++ b/include/usgscsm/UsgsAstroFrameSensorModel.h
@@ -6,6 +6,7 @@
 #include <iostream>
 #include <vector>
 #include "RasterGM.h"
+#include <SettableEllipsoid.h>
 #include "CorrelationModel.h"
 #include "Distortion.h"
 #include "Utilities.h"
@@ -18,7 +19,7 @@
 using json = nlohmann::json;
 
 
-class UsgsAstroFrameSensorModel : public csm::RasterGM {
+class UsgsAstroFrameSensorModel : public csm::RasterGM, virtual public csm::SettableEllipsoid {
   // UsgsAstroFramePlugin needs to access private members
   friend class UsgsAstroFramePlugin;
 
@@ -288,6 +289,16 @@ class UsgsAstroFrameSensorModel : public csm::RasterGM {
       //  If the argument state string is empty, the model remains unchanged.
       //<
 
+      // Implement methods from the SettableEllipsoid class
+
+      virtual csm::Ellipsoid getEllipsoid() const;
+      //> This method returns the planetary ellipsoid.
+      //<
+
+      virtual void setEllipsoid(const csm::Ellipsoid &ellipsoid);
+      //> This method sets the planetary ellipsoid.
+      //<
+
     // IMPLEMENT GEOMETRICMODEL PURE VIRTUALS
     // See GeometricModel.h for documentation
     virtual csm::EcefCoord getReferencePoint() const;
diff --git a/src/UsgsAstroFrameSensorModel.cpp b/src/UsgsAstroFrameSensorModel.cpp
index dc27565c7b76d4cb6aec3c9fb4a887ce3ff44eda..86562d2d1e269af57eb57e09730a92acda977e75 100644
--- a/src/UsgsAstroFrameSensorModel.cpp
+++ b/src/UsgsAstroFrameSensorModel.cpp
@@ -1170,6 +1170,21 @@ std::vector<double> UsgsAstroFrameSensorModel::getCrossCovarianceMatrix(
 }
 
 
+csm::Ellipsoid UsgsAstroFrameSensorModel::getEllipsoid() const {
+   MESSAGE_LOG(this->m_logger, "Accessing ellipsoid radii {} {}",
+               m_majorAxis, m_minorAxis);
+   return csm::Ellipsoid(m_majorAxis, m_minorAxis);
+}
+
+
+void UsgsAstroFrameSensorModel::setEllipsoid(const csm::Ellipsoid &ellipsoid) {
+   MESSAGE_LOG(this->m_logger, "Setting ellipsoid radii {} {}",
+               ellipsoid.getSemiMajorRadius(), ellipsoid.getSemiMinorRadius());
+   m_majorAxis = ellipsoid.getSemiMajorRadius();
+   m_minorAxis = ellipsoid.getSemiMinorRadius();
+}
+
+
 void UsgsAstroFrameSensorModel::calcRotationMatrix(
     double m[3][3]) const {
   MESSAGE_LOG(this->m_logger, "Calculating rotation matrix");
diff --git a/tests/FrameCameraTests.cpp b/tests/FrameCameraTests.cpp
index 31fd953646f4f77d240218d3c5b22ee31011f267..3b49b67dbda2a51259708811b8d35f13e6dbf8c7 100644
--- a/tests/FrameCameraTests.cpp
+++ b/tests/FrameCameraTests.cpp
@@ -95,6 +95,20 @@ TEST_F(OrbitalFrameSensorModel, Center) {
    EXPECT_DOUBLE_EQ(groundPt.z, 0);
 }
 
+TEST_F(FrameSensorModel, Radii) {
+   csm::Ellipsoid ellipsoid = sensorModel->getEllipsoid();
+   EXPECT_DOUBLE_EQ(ellipsoid.getSemiMajorRadius(), 10);
+   EXPECT_DOUBLE_EQ(ellipsoid.getSemiMinorRadius(), 10);
+}
+
+TEST_F(FrameSensorModel, SetRadii) {
+   csm::Ellipsoid ellipsoid1(1000, 1500);
+   sensorModel->setEllipsoid(ellipsoid1);
+   csm::Ellipsoid ellipsoid2 = sensorModel->getEllipsoid();
+   EXPECT_DOUBLE_EQ(ellipsoid2.getSemiMajorRadius(), 1000);
+   EXPECT_DOUBLE_EQ(ellipsoid2.getSemiMinorRadius(), 1500);
+}
+
 TEST_F(OrbitalFrameSensorModel, GroundPartials) {
    csm::EcefCoord groundPt(1000000.0, 0.0, 0.0);
    std::vector<double> partials = sensorModel->computeGroundPartials(groundPt);