diff --git a/payment/uc_2checkout/uc_2checkout.module b/payment/uc_2checkout/uc_2checkout.module
index f971e32..7a855d4 100644
--- a/payment/uc_2checkout/uc_2checkout.module
+++ b/payment/uc_2checkout/uc_2checkout.module
@@ -180,7 +180,7 @@ function uc_2checkout_form($form, &$form_state, $order) {
     'city' => Unicode::substr($order->billing_city, 0, 64),
     'state' => $order->billing_zone,
     'zip' => Unicode::substr($order->billing_postal_code, 0, 16),
-    'country' => $country ? $country->alpha_3 : 'USA',
+    'country' => $country ? $country->getAlpha3() : 'USA',
     'email' => Unicode::substr($order->getEmail(), 0, 64),
     'phone' => Unicode::substr($order->billing_phone, 0, 16),
     'id_type' => 1,
diff --git a/uc_country/src/CountryInterface.php b/uc_country/src/CountryInterface.php
new file mode 100644
index 0000000..c47aa33
--- /dev/null
+++ b/uc_country/src/CountryInterface.php
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\uc_country\CountryInterface.
+ */
+
+namespace Drupal\uc_country;
+
+use Drupal\Core\Config\Entity\ConfigEntityInterface;
+
+/**
+ * Defines the uc_country type configuration entity.
+ */
+interface CountryInterface extends ConfigEntityInterface {
+
+  /**
+   * Returns the 3-character ISO 3166-1 code of the country.
+   *
+   * @return string
+   *   The 3-character ISO 3166-1 code of the country.
+   */
+  public function getAlpha3();
+
+  /**
+   * Returns the ISO 3166-1 English short name of the country.
+   *
+   * @return string
+   *   The ISO 3166-1 English short name of the country.
+   */
+  public function getName();
+
+  /**
+   * Returns the numeric ISO 3166-1 code of the country.
+   *
+   * @return int
+   *   The numeric ISO 3166-1 code of the country.
+   */
+  public function getNumeric();
+
+  /**
+   * Gets the ISO 3166-2 zone codes for this country.
+   *
+   * @return array
+   *   An associative array of zone names, keyed by ISO 3166-2 zone code.
+   */
+  public function getZones();
+
+  /**
+   * Returns the address format template.
+   *
+   * @return string
+   */
+  public function getAddressFormat();
+
+  /**
+   * Sets the address format template.
+   *
+   * @param string $address_format
+   *   A string with placeholders for address elements.
+   *
+   * @return $this
+   */
+  public function setAddressFormat($address_format);
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function sort(ConfigEntityInterface $a, ConfigEntityInterface $b);
+
+}
diff --git a/uc_country/src/CountryManager.php b/uc_country/src/CountryManager.php
index d366c7e..32a14f4 100644
--- a/uc_country/src/CountryManager.php
+++ b/uc_country/src/CountryManager.php
@@ -65,7 +65,7 @@ class CountryManager implements CountryManagerInterface {
     $countries = $this->entityManager->getStorage('uc_country')->loadMultiple(NULL);
     $country_names = [];
     foreach ($countries as $alpha_2 => $country) {
-      $country_names[$alpha_2] = t($country->name);
+      $country_names[$alpha_2] = t($country->getName());
     }
     natcasesort($country_names);
     $this->moduleHandler->alter('countries', $country_names);
@@ -79,7 +79,7 @@ class CountryManager implements CountryManagerInterface {
     $countries = $this->entityManager->getStorage('uc_country')->loadByProperties(['status' => TRUE]);
     $country_names = [];
     foreach ($countries as $alpha_2 => $country) {
-      $country_names[$alpha_2] = t($country->name);
+      $country_names[$alpha_2] = t($country->getName());
     }
     natcasesort($country_names);
     $this->moduleHandler->alter('countries', $country_names);
@@ -100,7 +100,7 @@ class CountryManager implements CountryManagerInterface {
     $countries = $this->entityManager->getStorage('uc_country')->loadByProperties($properties);
     $country_names = [];
     foreach ($countries as $alpha_2 => $country) {
-      $country_names[$alpha_2] = t($country->name);
+      $country_names[$alpha_2] = t($country->getName());
     }
     natcasesort($country_names);
     return $country_names;
@@ -111,7 +111,7 @@ class CountryManager implements CountryManagerInterface {
    */
   public function getZoneList($alpha_2) {
     if ($country = $this->entityManager->getStorage('uc_country')->load($alpha_2)) {
-      return $country->zones;
+      return $country->getZones();
     }
     return array();
   }
diff --git a/uc_country/src/Entity/Country.php b/uc_country/src/Entity/Country.php
index 188052e..415e066 100644
--- a/uc_country/src/Entity/Country.php
+++ b/uc_country/src/Entity/Country.php
@@ -9,6 +9,7 @@ namespace Drupal\uc_country\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
 use Drupal\Core\Config\Entity\ConfigEntityInterface;
+use Drupal\uc_country\CountryInterface;
 
 /**
  * Defines the uc_country type configuration entity.
@@ -37,49 +38,50 @@ use Drupal\Core\Config\Entity\ConfigEntityInterface;
  *   }
  * )
  */
-class Country extends ConfigEntityBase {
+class Country extends ConfigEntityBase implements CountryInterface {
 
   /**
    * The 2-character ISO 3166-1 code identifying the country.
    *
    * @var string
    */
-  public $alpha_2;
+  protected $alpha_2;
 
   /**
    * The 3-character ISO 3166-1 code identifying the country.
    *
    * @var string
    */
-  public $alpha_3;
+  protected $alpha_3;
 
   /**
    * The human-readable name of the country.
    *
    * @var string
    */
-  public $name;
+  protected $name;
 
   /**
    * The numeric ISO 3166-1 code of the country.
    *
    * @var int
    */
-  public $numeric;
+  protected $numeric;
 
   /**
-   * The address format string for the country.
+   * An associative array of zone names, keyed by ISO 3166-2 zone code.
    *
    * @var array
    */
-  public $address_format;
+  protected $zones = [];
 
   /**
-   * An associative array of zone names, keyed by ISO 3166-2 zone code.
+   * The address format string for the country.
    *
    * @var array
    */
-  public $zones = array();
+  protected $address_format;
+
 
   /**
    * {@inheritdoc}
@@ -91,6 +93,49 @@ class Country extends ConfigEntityBase {
   /**
    * {@inheritdoc}
    */
+  public function getAlpha3() {
+    return $this->alpha_3;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getName() {
+    return $this->label();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getNumeric() {
+    return $this->numeric;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getZones() {
+    return $this->zones;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAddressFormat() {
+    return $this->address_format;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setAddressFormat($address_format) {
+    $this->address_format = $address_format;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public static function sort(ConfigEntityInterface $a, ConfigEntityInterface $b) {
     $a_status = (int) $a->status();
     $b_status = (int) $b->status();
diff --git a/uc_country/src/Form/CountryForm.php b/uc_country/src/Form/CountryForm.php
index 4c9ba97..0f9bec3 100644
--- a/uc_country/src/Form/CountryForm.php
+++ b/uc_country/src/Form/CountryForm.php
@@ -34,7 +34,7 @@ class CountryForm extends EntityForm {
     $form['address_format'] = array(
       '#type' => 'textarea',
       '#title' => $this->t('Address format'),
-      '#default_value' => implode("\r\n", $country->address_format),
+      '#default_value' => implode("\r\n", $country->getAddressFormat()),
       '#rows' => 7,
     );
 
@@ -82,7 +82,7 @@ class CountryForm extends EntityForm {
   public function save(array $form, FormStateInterface $form_state) {
     // Save address_format as an array
     $address_format = $form_state->getValue('address_format');
-    $this->entity->address_format = explode("\r\n", $address_format);
+    $this->entity->setAddressFormat(explode("\r\n", $address_format));
 
     $this->entity->save();
     drupal_set_message($this->t('Country settings saved.'));
diff --git a/uc_store/src/Address.php b/uc_store/src/Address.php
index 0eb648c..bcedc50 100644
--- a/uc_store/src/Address.php
+++ b/uc_store/src/Address.php
@@ -132,12 +132,12 @@ class Address {
     if ($country) {
       $variables += array(
         '!zone_code' => $this->zone ?: t('N/A'),
-        '!zone_name' => isset($country->zones[$this->zone]) ? $country->zones[$this->zone] : t('Unknown'),
-        '!country_name' => t($country->name),
-        '!country_code2' => $country->alpha_2,
-        '!country_code3' => $country->alpha_3,
+        '!zone_name' => isset($country->getZones()[$this->zone]) ? $country->getZones()[$this->zone] : t('Unknown'),
+        '!country_name' => t($country->getName()),
+        '!country_code2' => $country->id(),
+        '!country_code3' => $country->getAlpha3(),
       );
-      $format = implode("\r\n", $country->address_format);
+      $format = implode("\r\n", $country->getAddressFormat());
     }
     else {
       $variables += array(
diff --git a/uc_store/src/Tests/UbercartTestBase.php b/uc_store/src/Tests/UbercartTestBase.php
index a7a8114..3e00904 100644
--- a/uc_store/src/Tests/UbercartTestBase.php
+++ b/uc_store/src/Tests/UbercartTestBase.php
@@ -218,9 +218,9 @@ abstract class UbercartTestBase extends WebTestBase {
       );
 
       // Don't try to set the zone unless the store country has zones!
-      if (!empty($country->zones)) {
+      if (!empty($country->getZones())) {
         $edit += array(
-          $prefix . '[zone]' => array_rand($country->zones),
+          $prefix . '[zone]' => array_rand($country->getZones()),
         );
       }
     }
