diff --git a/core/modules/breakpoint/breakpoint.module b/core/modules/breakpoint/breakpoint.module
index a2450f9..03470a6 100644
--- a/core/modules/breakpoint/breakpoint.module
+++ b/core/modules/breakpoint/breakpoint.module
@@ -84,7 +84,7 @@ function _breakpoint_delete_breakpoints($list, $source_type) {
   $breakpoint_groups = entity_load_multiple('breakpoint_group', $ids);
 
   foreach ($breakpoint_groups as $breakpoint_group) {
-    if ($breakpoint_group->sourceType == $source_type && in_array($breakpoint_group->source, $list)) {
+    if ($breakpoint_group->getSourceType() == $source_type && in_array($breakpoint_group->getSource(), $list)) {
       // Delete the automatically created breakpoint group.
       $breakpoint_group->delete();
 
@@ -126,7 +126,7 @@ function _breakpoint_delete_breakpoints($list, $source_type) {
 function _breakpoint_delete_breakpoint_groups($group_id, $source_type) {
   $breakpoint_groups = entity_load_multiple('breakpoint_group');
   foreach ($breakpoint_groups as $breakpoint_group) {
-    if ($breakpoint_group->sourceType == $source_type && $breakpoint_group->source == $group_id) {
+    if ($breakpoint_group->getSourceType() == $source_type && $breakpoint_group->getSource() == $group_id) {
       $breakpoint_group->delete();
     }
   }
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroupInterface.php b/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroupInterface.php
index 3bb877b..73e710f 100644
--- a/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroupInterface.php
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroupInterface.php
@@ -15,6 +15,99 @@
 interface BreakpointGroupInterface extends ConfigEntityInterface {
 
   /**
+   * Returns the breakpoint group machine name.
+   *
+   * @return string
+   *   The breakpoint group machine name
+   */
+  public function getName();
+
+  /**
+   * Sets the breakpoint group machine name.
+   *
+   * @param string $name
+   *   The breakpoint group machine name
+   *
+   * @return \Drupal\breakpoint\BreakpointGroup\Interface
+   *   The called breakpoint group entity
+   */
+  public function setName($name);
+
+  /**
+   * Sets the breakpoint group label.
+   *
+   * @param string $label
+   *   The breakpoint group label
+   *
+   * @return \Drupal\breakpoint\BreakpointGroup\Interface
+   *   The called breakpoint group entity
+   */
+  public function setLabel($label);
+
+  /**
+   * Gets the array of breakpoints for the breakpoint group.
+   *
+   * @return array
+   *   The array of breakpoints for the breakpoint group.
+   */
+  public function getBreakpoints();
+
+  /**
+   * Sets the breakpoint group breakpoints.
+   *
+   * @param array $breakpoints
+   *   The breakpoint group breakpoints
+   *
+   * @return \Drupal\breakpoint\BreakpointGroup\Interface
+   *   The called breakpoint group entity
+   */
+  public function setBreakpoints(array $breakpoints);
+
+  /**
+   * Returns the breakpoint group source.
+   *
+   * @return string
+   *   The breakpoint group source: theme or module name, or
+   *   'user' for user-created groups.
+   */
+  public function getSource();
+
+  /**
+   * Sets the breakpoint group source: theme or module name,
+   * or 'user' for user-created groups.
+   *
+   * @param string $source
+   *   The breakpoint group source
+   *
+   * @return \Drupal\breakpoint\BreakpointGroup\Interface
+   *   The called breakpoint group entity
+   */
+  public function setSource($source);
+
+  /**
+   * Returns the breakpoint group source type.
+   *
+   * @return string
+   *   The breakpoint group source type
+   */
+  public function getSourceType();
+
+  /**
+   * Sets the breakpoint group source type.
+   *
+   * @param string $source_type
+   *   The breakpoint group source
+   *   Allowed values:
+   *     Breakpoint::SOURCE_TYPE_THEME
+   *     Breakpoint::SOURCE_TYPE_MODULE
+   *     Breakpoint::SOURCE_TYPE_USER_DEFINED
+   *
+   * @return \Drupal\breakpoint\BreakpointGroup\Interface
+   *   The called breakpoint group entity
+   */
+  public function setSourceType($sourceType);
+
+  /**
    * Checks if the breakpoint group is valid.
    *
    * @throws \Drupal\breakpoint\InvalidBreakpointSourceTypeException
@@ -41,7 +134,7 @@ public function addBreakpointFromMediaQuery($name, $media_query);
    * The breakpoint name is either the machine_name or the ID of a breakpoint.
    *
    * @param array $breakpoints
-   *   Array containing breakpoint objects
+   *   Array containing breakpoint objects or names.
    *
    * @return \Drupal\breakpoint\Entity\BreakpointGroup
    *   The breakpoint group object.
@@ -49,14 +142,6 @@ public function addBreakpointFromMediaQuery($name, $media_query);
   public function addBreakpoints($breakpoints);
 
   /**
-   * Gets the array of breakpoints for the breakpoint group.
-   *
-   * @return array
-   *   The array of breakpoints for the breakpoint group.
-   */
-  public function getBreakpoints();
-
-  /**
    * Gets a breakpoint from the breakpoint group by ID.
    *
    * @param string $id
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
index 61c1ea6..a7ff132 100644
--- a/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
@@ -9,8 +9,10 @@
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
 use Drupal\breakpoint\BreakpointGroupInterface;
+use Drupal\breakpoint\BreakpointInterface;
 use Drupal\breakpoint\InvalidBreakpointSourceException;
 use Drupal\breakpoint\InvalidBreakpointSourceTypeException;
+use Drupal\breakpoint\InvalidBreakpointNameException;
 use Drupal\Core\Entity\Annotation\EntityType;
 use Drupal\Core\Annotation\Translation;
 
@@ -93,10 +95,10 @@ class BreakpointGroup extends ConfigEntityBase implements BreakpointGroupInterfa
    * The breakpoint group source type.
    *
    * @var string
-   *   Allowed values:
-   *     Breakpoint::SOURCE_TYPE_THEME
-   *     Breakpoint::SOURCE_TYPE_MODULE
-   *     Breakpoint::SOURCE_TYPE_USER_DEFINED
+   * Allowed values:
+   * Breakpoint::SOURCE_TYPE_THEME
+   * Breakpoint::SOURCE_TYPE_MODULE
+   * Breakpoint::SOURCE_TYPE_USER_DEFINED
    *
    * @see \Drupal\breakpoint\Entity\Breakpoint
    */
@@ -110,6 +112,84 @@ public function __construct(array $values, $entity_type) {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function getName() {
+    return $this->get('name');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setName($name) {
+    $this->set('name', $name);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setLabel($label) {
+    $this->set('label', $label);
+    return $this;
+  }
+
+   /**
+   * {@inheritdoc}
+   */
+  public function getBreakpoints() {
+    $breakpoints = $this->get('breakpoints');
+    $breakpoint_ids = $this->get('breakpoint_ids');
+    if (empty($breakpoints) && !empty($breakpoint_ids)) {
+      $this->setBreakpoints(entity_load_multiple('breakpoint', $breakpoint_ids));
+    }
+    return $this->get('breakpoints');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBreakpoints(array $breakpoints = array()) {
+    $this->set('breakpoints', $breakpoints);
+    $breakpoint_ids = array();
+    foreach ($breakpoints as $breakpoint) {
+      $breakpoint_ids[] = $breakpoint->id();
+    }
+    $this->set('breakpoint_ids', $breakpoint_ids);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getSource() {
+    return $this->get('source');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setSource($source = 'user') {
+    $this->set('source', $source);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getSourceType() {
+    return $this->get('sourceType');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setSourceType($sourceType) {
+    $this->set('sourceType', $sourceType);
+    return $this;
+  }
+
+  /**
    * Overrides Drupal\Core\Entity\Entity::save().
    */
   public function save() {
@@ -118,7 +198,7 @@ public function save() {
       throw new InvalidBreakpointException('Invalid data detected.');
     }
     if (empty($this->id)) {
-      $this->id = $this->sourceType . '.' . $this->source . '.' . $this->name;
+      $this->id = $this->getSourceType() . '.' . $this->getSource() . '.' . $this->getName();
     }
     parent::save();
   }
@@ -128,22 +208,28 @@ public function save() {
    */
   public function isValid() {
     // Check for illegal values in breakpoint group source type.
-    if (!in_array($this->sourceType, array(
-        Breakpoint::SOURCE_TYPE_USER_DEFINED,
-        Breakpoint::SOURCE_TYPE_MODULE,
-        Breakpoint::SOURCE_TYPE_THEME)
-      )) {
+    if (!in_array($this->getSourceType(), array(
+          Breakpoint::SOURCE_TYPE_USER_DEFINED,
+          Breakpoint::SOURCE_TYPE_MODULE,
+          Breakpoint::SOURCE_TYPE_THEME,
+        ))) {
       throw new InvalidBreakpointSourceTypeException(format_string('Invalid source type @source_type', array(
-        '@source_type' => $this->sourceType,
+        '@source_type' => $this->getSourceType(),
       )));
     }
     // Check for illegal characters in breakpoint group source.
-    if (preg_match('/[^a-z_]+/', $this->source) || empty($this->source)) {
-      throw new InvalidBreakpointSourceException(format_string("Invalid value '@source' for breakpoint group source property. Breakpoint group source property can only contain lowercase letters and underscores.", array('@source' => $this->source)));
+    $source = $this->getSource();
+    if (preg_match('/[^a-z_]+/', $source) || empty($source)) {
+      throw new InvalidBreakpointSourceException(format_string("Invalid value '@source' for breakpoint group source property. Breakpoint group source property can only contain lowercase letters and underscores.", array(
+        '@source' => $this->getSource(),
+      )));
     }
     // Check for illegal characters in breakpoint group name.
-    if (preg_match('/[^a-z0-9_]+/', $this->name || empty($this->name))) {
-      throw new InvalidBreakpointNameException(format_string("Invalid value '@name' for breakpoint group name property. Breakpoint group name property can only contain lowercase letters, numbers and underscores.", array('@name' => $this->name)));
+    $name = $this->getName();
+    if (preg_match('/[^a-z0-9_]+/', $name) || empty($name)) {
+      throw new InvalidBreakpointNameException(format_string("Invalid value '@name' for breakpoint group name property. Breakpoint group name property can only contain lowercase letters, numbers and underscores.", array(
+        '@name' => $this->getName(),
+      )));
     }
     return TRUE;
   }
@@ -153,16 +239,16 @@ public function isValid() {
    */
   public function addBreakpointFromMediaQuery($name, $media_query) {
     // Use the existing breakpoint if it exists.
-    $breakpoint = entity_load('breakpoint', $this->sourceType . '.' . $this->name . '.' . $name);
+    $breakpoint = entity_load('breakpoint', $this->getSourceType() . '.' . $this->getName() . '.' . $name);
     if (!$breakpoint) {
       // Build a new breakpoint.
       $breakpoint = entity_create('breakpoint', array(
         'name' => $name,
         'label' => $name,
         'mediaQuery' => $media_query,
-        'source' => $this->name,
-        'sourceType' => $this->sourceType,
-        'weight' => count($this->breakpoint_ids),
+        'source' => $this->getName(),
+        'sourceType' => $this->getSourceType(),
+        'weight' => count($this->getBreakpoints()),
       ));
       $breakpoint->save();
     }
@@ -173,27 +259,29 @@ public function addBreakpointFromMediaQuery($name, $media_query) {
    * {@inheritdoc}
    */
   public function addBreakpoints($breakpoints) {
-    foreach ($breakpoints as $breakpoint) {
-      // Add breakpoint to group.
-      $this->breakpoints[$breakpoint->id()] = $breakpoint;
-      $this->breakpoint_ids[] = $breakpoint->id();
-    }
-    return $this;
-  }
+    $new_breakpoints = array();
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getBreakpoints() {
-    if (empty($this->breakpoints)) {
-      foreach ($this->breakpoint_ids as $breakpoint_id) {
-        $breakpoint = breakpoint_load($breakpoint_id);
-        if ($breakpoint) {
-          $this->breakpoints[$breakpoint_id] = $breakpoint;
-        }
+    foreach ($breakpoints as $breakpoint_name) {
+      if ($breakpoint_name instanceof BreakpointInterface) {
+        // Don't add unsaved breakpoints, check if we can load them.
+        $breakpoint_name = $breakpoint_name->id();
+      }
+      // Check if breakpoint exists, assume $breakpoint_name is a machine name.
+      $breakpoint = entity_load('breakpoint', $this->getSourceType() . '.' . $this->getSource() . '.' . $breakpoint_name);
+      // If the breakpoint doesn't exist, assume $breakpoint_name is an id.
+      if (!$breakpoint) {
+        $breakpoint = entity_load('breakpoint', $breakpoint_name);
+      }
+
+      // If the breakpoint doesn't exists, do not add it.
+      if ($breakpoint) {
+        // Add breakpoint to array holding new breakpoints.
+        $new_breakpoints[$breakpoint->id()] = $breakpoint;
       }
     }
-    return $this->breakpoints;
+    // Add new breakpoints.
+    $breakpoints = $this->getBreakpoints() + $new_breakpoints;
+    return $this->setBreakpoints($breakpoints);
   }
 
   /**
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupAPITest.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupAPITest.php
index 3751c81..4bda37d 100644
--- a/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupAPITest.php
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupAPITest.php
@@ -49,9 +49,9 @@ public function testConfigName() {
     $this->assertTrue($exception, 'An exception is thrown when an invalid sourceType is entered.');
 
     // Try an invalid source.
-    $breakpoint_group->name = '';
-    $breakpoint_group->sourceType = Breakpoint::SOURCE_TYPE_USER_DEFINED;
-    $breakpoint_group->source = 'custom*_module source';
+    $breakpoint_group->setName('');
+    $breakpoint_group->setSourceType(Breakpoint::SOURCE_TYPE_USER_DEFINED);
+    $breakpoint_group->setSource('custom*_module source');
 
     $exception = FALSE;
     try {
@@ -63,8 +63,8 @@ public function testConfigName() {
     $this->assertTrue($exception, 'An exception is thrown when an invalid source is entered.');
 
     // Try a valid breakpoint_group.
-    $breakpoint_group->name = 'test';
-    $breakpoint_group->source = 'custom_module_source';
+    $breakpoint_group->setName('test');
+    $breakpoint_group->setSource('custom_module_source');
 
     $exception = FALSE;
     try {
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupTestBase.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupTestBase.php
index 95141e3..c0a8941 100644
--- a/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupTestBase.php
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupTestBase.php
@@ -44,17 +44,17 @@ public function verifyBreakpointGroup(BreakpointGroup $group, BreakpointGroup $c
         '%group' => $group->label(),
         '%property' => $property,
       );
-      if (is_array($compare_set->{$property})) {
-        $this->assertEqual(array_keys($compare_set->{$property}), array_keys($group->{$property}), format_string('breakpoint_group_load: Proper %property for breakpoint group %group.', $t_args), 'Breakpoint API');
+      if (is_array($compare_set->get($property))) {
+        $this->assertEqual(array_keys($compare_set->get($property)), array_keys($group->get($property)), format_string('breakpoint_group_load: Proper %property for breakpoint group %group.', $t_args), 'Breakpoint API');
       }
       else {
         $t_args = array(
           '%group' => $group->label(),
           '%property' => $property,
-          '%property1' => $compare_set->{$property},
-          '%property2' => $group->{$property},
+          '%property1' => $compare_set->get($property),
+          '%property2' => $group->get($property),
         );
-        $this->assertEqual($compare_set->{$property}, $group->{$property}, format_string('breakpoint_group_load: Proper %property: %property1 == %property2 for breakpoint group %group.', $t_args), 'Breakpoint API');
+        $this->assertEqual($compare_set->get($property), $group->get($property), format_string('breakpoint_group_load: Proper %property: %property1 == %property2 for breakpoint group %group.', $t_args), 'Breakpoint API');
       }
     }
 
diff --git a/core/modules/picture/lib/Drupal/picture/Tests/PictureAdminUITest.php b/core/modules/picture/lib/Drupal/picture/Tests/PictureAdminUITest.php
index 3b908db..951bc45 100644
--- a/core/modules/picture/lib/Drupal/picture/Tests/PictureAdminUITest.php
+++ b/core/modules/picture/lib/Drupal/picture/Tests/PictureAdminUITest.php
@@ -48,6 +48,7 @@ public function setUp() {
 
     // Add breakpoint_group and breakpoints.
     $breakpoint_group = entity_create('breakpoint_group', array(
+      'name' => 'atestset',
       'id' => 'atestset',
       'label' => 'A test set',
       'sourceType' => Breakpoint::SOURCE_TYPE_USER_DEFINED,
diff --git a/core/modules/picture/lib/Drupal/picture/Tests/PictureFieldDisplayTest.php b/core/modules/picture/lib/Drupal/picture/Tests/PictureFieldDisplayTest.php
index 7c11a6f..05bc5ed 100644
--- a/core/modules/picture/lib/Drupal/picture/Tests/PictureFieldDisplayTest.php
+++ b/core/modules/picture/lib/Drupal/picture/Tests/PictureFieldDisplayTest.php
@@ -58,6 +58,7 @@ public function setUp() {
 
     // Add breakpoint_group and breakpoints.
     $breakpoint_group = entity_create('breakpoint_group', array(
+      'name' => 'atestset',
       'id' => 'atestset',
       'label' => 'A test set',
       'sourceType' => Breakpoint::SOURCE_TYPE_USER_DEFINED,
