Merge "Cleanup lint baseline in ConstraintLayout" into androidx-master-dev
diff --git a/activity/activity/src/androidTest/AndroidManifest.xml b/activity/activity/src/androidTest/AndroidManifest.xml
index 993f729..12d6eee 100644
--- a/activity/activity/src/androidTest/AndroidManifest.xml
+++ b/activity/activity/src/androidTest/AndroidManifest.xml
@@ -24,6 +24,7 @@
         <activity android:name="androidx.activity.ViewModelActivity"/>
         <activity android:name="androidx.activity.SavedStateActivity"/>
         <activity android:name="androidx.activity.ContentViewActivity"/>
+        <activity android:name="androidx.activity.EmptyContentActivity" />
         <activity android:name="androidx.activity.AutoRestarterActivity"/>
     </application>
 
diff --git a/activity/activity/src/androidTest/java/androidx/activity/ContentViewTest.kt b/activity/activity/src/androidTest/java/androidx/activity/ContentViewTest.kt
index ce319d6..b0f8bb0 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/ContentViewTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/ContentViewTest.kt
@@ -16,13 +16,18 @@
 
 package androidx.activity
 
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
 import android.widget.TextView
 import androidx.activity.test.R
+import androidx.lifecycle.ViewTreeLifecycleOwner
 import androidx.test.core.app.ActivityScenario
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import androidx.testutils.withActivity
 import com.google.common.truth.Truth.assertThat
+import com.google.common.truth.Truth.assertWithMessage
 import org.junit.Test
 import org.junit.runner.RunWith
 
@@ -38,6 +43,56 @@
                 .isNotNull()
         }
     }
+
+    @Test
+    fun testViewTreeLifecycleOwnerInflation() {
+        with(ActivityScenario.launch(ContentViewActivity::class.java)) {
+            val inflatedTextView: TextView = withActivity { findViewById(R.id.inflated_text_view) }
+
+            withActivity {
+                assertWithMessage("inflated view has correct ViewTreeLifecycleOwner")
+                    .that(ViewTreeLifecycleOwner.get(inflatedTextView))
+                    .isSameInstanceAs(this@withActivity)
+            }
+        }
+    }
+
+    @Test
+    fun testViewTreeLifecycleAttachment() {
+        runAttachTest("setContentView view only") { setContentView(it) }
+        runAttachTest("setContentView with LayoutParams") {
+            setContentView(it, ViewGroup.LayoutParams(WRAP_CONTENT, WRAP_CONTENT))
+        }
+        runAttachTest("addContentView") {
+            addContentView(it, ViewGroup.LayoutParams(WRAP_CONTENT, WRAP_CONTENT))
+        }
+    }
+
+    private fun runAttachTest(
+        message: String,
+        attach: ComponentActivity.(View) -> Unit
+    ) {
+        with(ActivityScenario.launch(EmptyContentActivity::class.java)) {
+            withActivity {
+                val view = View(this)
+
+                var attachedResult: Any? = "did not attach"
+                view.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
+                    override fun onViewDetachedFromWindow(v: View?) {
+                        // Do nothing
+                    }
+
+                    override fun onViewAttachedToWindow(v: View?) {
+                        attachedResult = ViewTreeLifecycleOwner.get(view)
+                    }
+                })
+                attach(view)
+                assertWithMessage("$message: ViewTreeLifecycleOwner was set correctly")
+                    .that(attachedResult).isSameInstanceAs(this)
+            }
+        }
+    }
 }
 
 class ContentViewActivity : ComponentActivity(R.layout.activity_inflates_res)
+class EmptyContentActivity : ComponentActivity()
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
index 56a1cc3..ffa253a 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
+++ b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
@@ -18,9 +18,11 @@
 
 import static android.os.Build.VERSION.SDK_INT;
 
+import android.annotation.SuppressLint;
 import android.os.Build;
 import android.os.Bundle;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.Window;
 
 import androidx.annotation.CallSuper;
@@ -39,6 +41,7 @@
 import androidx.lifecycle.ViewModelProvider;
 import androidx.lifecycle.ViewModelStore;
 import androidx.lifecycle.ViewModelStoreOwner;
+import androidx.lifecycle.ViewTreeLifecycleOwner;
 import androidx.savedstate.SavedStateRegistry;
 import androidx.savedstate.SavedStateRegistryController;
 import androidx.savedstate.SavedStateRegistryOwner;
@@ -229,6 +232,42 @@
         return nc != null ? nc.custom : null;
     }
 
+    @Override
+    public void setContentView(@LayoutRes int layoutResID) {
+        // Set the VTLO before setting the content view so that the inflation process
+        // and attach listeners will see it already present
+        ViewTreeLifecycleOwner.set(getWindow().getDecorView(), this);
+        super.setContentView(layoutResID);
+    }
+
+    @Override
+    public void setContentView(@SuppressLint({"UnknownNullness", "MissingNullability"}) View view) {
+        // Set the VTLO before setting the content view so that attach listeners
+        // will see it already present
+        ViewTreeLifecycleOwner.set(getWindow().getDecorView(), this);
+        super.setContentView(view);
+    }
+
+    @Override
+    public void setContentView(@SuppressLint({"UnknownNullness", "MissingNullability"}) View view,
+            @SuppressLint({"UnknownNullness", "MissingNullability"})
+                    ViewGroup.LayoutParams params) {
+        // Set the VTLO before setting the content view so that attach listeners
+        // will see it already present
+        ViewTreeLifecycleOwner.set(getWindow().getDecorView(), this);
+        super.setContentView(view, params);
+    }
+
+    @Override
+    public void addContentView(@SuppressLint({"UnknownNullness", "MissingNullability"}) View view,
+            @SuppressLint({"UnknownNullness", "MissingNullability"})
+                    ViewGroup.LayoutParams params) {
+        // Set the VTLO before setting the content view so that attach listeners
+        // will see it already present.
+        ViewTreeLifecycleOwner.set(getWindow().getDecorView(), this);
+        super.addContentView(view, params);
+    }
+
     /**
      * {@inheritDoc}
      * <p>
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index 81f02c1..1a08e10 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -30,11 +30,6 @@
 apply from: "out.gradle"
 init.chooseOutDir()
 
-def runningInBuildServer = System.env.DIST_DIR != null
-if (runningInBuildServer) {
-    System.setProperty("kotlin.compiler.execution.strategy", "in-process")
-}
-
 ext.supportRootFolder = project.projectDir.getParentFile()
 apply from: 'repos.gradle'
 apply from: "build_dependencies.gradle"
diff --git a/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt b/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
index 823a59b..43b298a 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
@@ -138,16 +138,6 @@
                     textReport = false
                     lintBaseline.delete()
                     System.setProperty(LINT_BASELINE_CONTINUE, "true")
-                } else {
-                    // Number of currently ignored UnknownNullness errors
-                    val count = lintBaseline.readText().split("UnknownNullness").size - 1
-                    if (count > 0) {
-                        lintDebugTask.configure {
-                            it.doLast {
-                                logger.warn(getIgnoreNullnessError(count))
-                            }
-                        }
-                    }
                 }
                 baseline(lintBaseline)
             }
@@ -156,16 +146,3 @@
 }
 
 val Project.lintBaseline get() = File(projectDir, "/lint-baseline.xml")
-
-private fun Project.getIgnoreNullnessError(count: Int): String = (
-        "\n${pluralizeMessage(count)} currently whitelisted in " +
-                "$projectDir/lint-baseline.xml - these warnings should ideally be fixed before " +
-                "this library moves to a stable release. Run " +
-                "'./gradlew $name:lintDebug -PcheckUnknownNullness' to fail lint on these warnings."
-        )
-
-private fun pluralizeMessage(count: Int) = if (count > 1) {
-    "$count UnknownNullness issues are"
-} else {
-    " UnknownNullness issue is"
-}
diff --git a/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt b/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
index f4052b7..303f0ff 100644
--- a/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
@@ -27,8 +27,10 @@
 import org.gradle.api.plugins.JavaPluginConvention
 import org.gradle.api.tasks.TaskProvider
 import org.gradle.api.tasks.bundling.Jar
+import org.gradle.kotlin.dsl.extra
 import org.gradle.kotlin.dsl.getPlugin
 import org.gradle.kotlin.dsl.named
+import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
 
 /**
  * Sets up a source jar task for an Android library project.
@@ -41,6 +43,26 @@
         }
         registerSourcesVariant(sourceJar)
     }
+    project.afterEvaluate {
+        // we can only tell if a project is multiplatform after it is configured
+        if (it.multiplatformExtension != null && it.extra.has("publish")) {
+            extension.defaultPublishVariant { variant ->
+                val kotlinExt = project.extensions.getByName("kotlin") as KotlinProjectExtension
+                val sourceJar =
+                    project.tasks.named("sourceJar${variant.name.capitalize()}", Jar::class.java)
+                // multiplatform projects use different source sets, so we need to modify the task
+                sourceJar.configure { sourceJarTask ->
+                    // use a whitelist of source sets, because that is the preferred policy
+                    sourceJarTask.from(kotlinExt.sourceSets.getByName("commonMain").kotlin.srcDirs)
+                    sourceJarTask.from(kotlinExt.sourceSets.getByName("androidMain").kotlin.srcDirs)
+                }
+            }
+            // Disable the builtin maven-publish for kotlin multiplatform, as it doesn't work
+            // and can't be feasibly modified. It may not be present in MPP samples.
+            project.tasks.findByName("publishKotlinMultiplatformPublicationToMavenRepository")
+                ?.enabled = false
+        }
+    }
 }
 
 /**
@@ -92,4 +114,4 @@
     if (javaComponent is AdhocComponentWithVariants) {
         javaComponent.addVariantsFromConfiguration(gradleVariant) { }
     }
-}
\ No newline at end of file
+}
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
index 15f20b3..f4a4a55 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
@@ -87,7 +87,7 @@
 const val XPP3 = "xpp3:xpp3:1.1.4c"
 const val XMLPULL = "xmlpull:xmlpull:1.1.3.1"
 
-const val ROBOLECTRIC = "org.robolectric:robolectric:4.1"
+const val ROBOLECTRIC = "org.robolectric:robolectric:4.3"
 
 const val PROTOBUF = "com.google.protobuf:protobuf-java:3.4.0"
 
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeDiagnosticSuppressor.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeDiagnosticSuppressor.kt
index b73d45f..7a41ed0 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeDiagnosticSuppressor.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeDiagnosticSuppressor.kt
@@ -70,10 +70,9 @@
                     "trace to resolve ktx call",
                     functionCall
                 )
-                if (call != null) return ComposableAnnotationChecker.get(
-                    diagnostic.psiElement.project
-                ).shouldInvokeAsTag(temporaryTrace, call)
-                return false
+                if (call != null) {
+                    return ComposableAnnotationChecker().shouldInvokeAsTag(temporaryTrace, call)
+                }
             }
         }
         return false
diff --git a/compose/compose-runtime/build.gradle b/compose/compose-runtime/build.gradle
index fa9d11f..2f0088f 100644
--- a/compose/compose-runtime/build.gradle
+++ b/compose/compose-runtime/build.gradle
@@ -65,24 +65,3 @@
     inceptionYear = "2019"
     description = "Contains support code for tree composition"
 }
-
-//TODO: figure out the trigger for this logic being needed and move it to AndroidX(UI)Plugin
-// or else decide we *should* be making jars and get other people to not break. b/142408067
-afterEvaluate {
-    configurations.archives.artifacts.each {
-        if (it.file.name.endsWith('jar') && !it.file.name.endsWith('sources.jar')) {
-            configurations.archives.artifacts.remove(it)
-        }
-    }
-}
-
-//TODO: decide whether and how to move this to AndroidX(UI)Plugin
-task sourcesJar(type: Jar) {
-    classifier = 'sources'
-    from kotlin.sourceSets.commonMain.kotlin
-    from kotlin.sourceSets.androidMain.kotlin
-}
-
-artifacts {
-    archives sourcesJar
-}
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DbMonsterBenchmark.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DbMonsterBenchmark.kt
index a9787c1..10b5555 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DbMonsterBenchmark.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DbMonsterBenchmark.kt
@@ -22,7 +22,7 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -60,7 +60,7 @@
         val list = DatabaseList(count, random)
         measureRecompose {
             compose {
-                Column(ExpandedHeight) {
+                Column(LayoutExpandedHeight) {
                     for (db in list.databases) {
                         DatabaseRow(db = db)
                     }
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/dbmonster/DbMonster.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/dbmonster/DbMonster.kt
index 8f8b11e..4ee000c 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/dbmonster/DbMonster.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/dbmonster/DbMonster.kt
@@ -20,8 +20,8 @@
 import androidx.compose.Model
 import androidx.ui.core.Text
 import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
 import androidx.ui.layout.Row
 
 import kotlin.random.Random
@@ -73,7 +73,7 @@
 @Composable
 fun QueryColumn(query: Query) {
     // TODO: we could do some conditional styling here which would make the test better
-    Column(ExpandedHeight) {
+    Column(LayoutExpandedHeight) {
         Text(text = "${query.elapsed}")
         Text(text = query.query)
     }
@@ -84,9 +84,9 @@
     println(db)
     val columns = 5
     val topQueries = db.topQueries(columns)
-    Row(ExpandedWidth) {
-        Column(ExpandedHeight) { Text(text = db.name) }
-        Column(ExpandedHeight) { Text(text = "${db.queries.size}") }
+    Row(LayoutExpandedWidth) {
+        Column(LayoutExpandedHeight) { Text(text = db.name) }
+        Column(LayoutExpandedHeight) { Text(text = "${db.queries.size}") }
         topQueries.forEach { query ->
             QueryColumn(query = query)
         }
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt
index 77fadad..857d678 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt
@@ -21,8 +21,8 @@
 import androidx.ui.foundation.ColoredRect
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
 import androidx.ui.layout.FlexScope
 import androidx.ui.layout.Row
 
@@ -39,9 +39,9 @@
 @Composable
 fun Stack(vertical: Boolean, children: @Composable() FlexScope.() -> Unit) {
     if (vertical) {
-        Column(ExpandedHeight, children = children)
+        Column(LayoutExpandedHeight, children = children)
     } else {
-        Row(ExpandedWidth, children = children)
+        Row(LayoutExpandedWidth, children = children)
     }
 }
 
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
index b333cb0..17bf161 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
@@ -24,8 +24,8 @@
 import androidx.ui.foundation.ColoredRect
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
 import androidx.ui.layout.Row
 import androidx.ui.text.TextStyle
 import kotlin.random.Random
@@ -37,7 +37,7 @@
         1 -> Color.Black
         else -> Color.Magenta
     }
-    Row(ExpandedWidth) {
+    Row(LayoutExpandedWidth) {
         ColoredRect(color = color, width = 16.dp, height = 16.dp)
         Text(text = "${item.id}", style = TextStyle(color = color))
     }
@@ -53,7 +53,7 @@
         1 -> Color.Black
         else -> Color.Magenta
     }
-    Row(ExpandedWidth) {
+    Row(LayoutExpandedWidth) {
         ColoredRect(color = color, width = 16.dp, height = 16.dp)
         Text(text = "${item.id}", style = TextStyle(color = color))
     }
@@ -102,7 +102,7 @@
 
 @Composable
 fun SiblingManagement(identity: IdentityType, items: List<Item>) {
-    Column(ExpandedHeight) {
+    Column(LayoutExpandedHeight) {
         when (identity) {
             IdentityType.Pivotal -> {
                 for (item in items) {
diff --git a/core/core/api/1.3.0-alpha01.txt b/core/core/api/1.3.0-alpha01.txt
index 6d7b82a..c912574 100644
--- a/core/core/api/1.3.0-alpha01.txt
+++ b/core/core/api/1.3.0-alpha01.txt
@@ -828,6 +828,10 @@
 
 package androidx.core.content {
 
+  public final class ContentProviderCompat {
+    method public static android.content.Context requireContext(android.content.ContentProvider);
+  }
+
   public final class ContentResolverCompat {
     method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
   }
@@ -1674,6 +1678,17 @@
     method public void onActionProviderVisibilityChanged(boolean);
   }
 
+  public final class DisplayCompat {
+    method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+  }
+
+  public static final class DisplayCompat.ModeCompat {
+    method public int getPhysicalHeight();
+    method public int getPhysicalWidth();
+    method public boolean isNative();
+    method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+  }
+
   public final class DisplayCutoutCompat {
     ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
     method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/api/current.txt b/core/core/api/current.txt
index 6d7b82a..c912574 100644
--- a/core/core/api/current.txt
+++ b/core/core/api/current.txt
@@ -828,6 +828,10 @@
 
 package androidx.core.content {
 
+  public final class ContentProviderCompat {
+    method public static android.content.Context requireContext(android.content.ContentProvider);
+  }
+
   public final class ContentResolverCompat {
     method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
   }
@@ -1674,6 +1678,17 @@
     method public void onActionProviderVisibilityChanged(boolean);
   }
 
+  public final class DisplayCompat {
+    method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+  }
+
+  public static final class DisplayCompat.ModeCompat {
+    method public int getPhysicalHeight();
+    method public int getPhysicalWidth();
+    method public boolean isNative();
+    method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+  }
+
   public final class DisplayCutoutCompat {
     ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
     method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/api/public_plus_experimental_1.3.0-alpha01.txt b/core/core/api/public_plus_experimental_1.3.0-alpha01.txt
index 6d7b82a..c912574 100644
--- a/core/core/api/public_plus_experimental_1.3.0-alpha01.txt
+++ b/core/core/api/public_plus_experimental_1.3.0-alpha01.txt
@@ -828,6 +828,10 @@
 
 package androidx.core.content {
 
+  public final class ContentProviderCompat {
+    method public static android.content.Context requireContext(android.content.ContentProvider);
+  }
+
   public final class ContentResolverCompat {
     method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
   }
@@ -1674,6 +1678,17 @@
     method public void onActionProviderVisibilityChanged(boolean);
   }
 
+  public final class DisplayCompat {
+    method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+  }
+
+  public static final class DisplayCompat.ModeCompat {
+    method public int getPhysicalHeight();
+    method public int getPhysicalWidth();
+    method public boolean isNative();
+    method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+  }
+
   public final class DisplayCutoutCompat {
     ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
     method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/api/public_plus_experimental_current.txt b/core/core/api/public_plus_experimental_current.txt
index 6d7b82a..c912574 100644
--- a/core/core/api/public_plus_experimental_current.txt
+++ b/core/core/api/public_plus_experimental_current.txt
@@ -828,6 +828,10 @@
 
 package androidx.core.content {
 
+  public final class ContentProviderCompat {
+    method public static android.content.Context requireContext(android.content.ContentProvider);
+  }
+
   public final class ContentResolverCompat {
     method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
   }
@@ -1674,6 +1678,17 @@
     method public void onActionProviderVisibilityChanged(boolean);
   }
 
+  public final class DisplayCompat {
+    method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+  }
+
+  public static final class DisplayCompat.ModeCompat {
+    method public int getPhysicalHeight();
+    method public int getPhysicalWidth();
+    method public boolean isNative();
+    method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+  }
+
   public final class DisplayCutoutCompat {
     ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
     method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/api/restricted_1.3.0-alpha01.txt b/core/core/api/restricted_1.3.0-alpha01.txt
index ccd38ce..3413875 100644
--- a/core/core/api/restricted_1.3.0-alpha01.txt
+++ b/core/core/api/restricted_1.3.0-alpha01.txt
@@ -923,6 +923,10 @@
 
 package androidx.core.content {
 
+  public final class ContentProviderCompat {
+    method public static android.content.Context requireContext(android.content.ContentProvider);
+  }
+
   public final class ContentResolverCompat {
     method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
   }
@@ -2050,6 +2054,17 @@
     method public void onActionProviderVisibilityChanged(boolean);
   }
 
+  public final class DisplayCompat {
+    method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+  }
+
+  public static final class DisplayCompat.ModeCompat {
+    method public int getPhysicalHeight();
+    method public int getPhysicalWidth();
+    method public boolean isNative();
+    method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+  }
+
   public final class DisplayCutoutCompat {
     ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
     method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/api/restricted_current.txt b/core/core/api/restricted_current.txt
index ccd38ce..3413875 100644
--- a/core/core/api/restricted_current.txt
+++ b/core/core/api/restricted_current.txt
@@ -923,6 +923,10 @@
 
 package androidx.core.content {
 
+  public final class ContentProviderCompat {
+    method public static android.content.Context requireContext(android.content.ContentProvider);
+  }
+
   public final class ContentResolverCompat {
     method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
   }
@@ -2050,6 +2054,17 @@
     method public void onActionProviderVisibilityChanged(boolean);
   }
 
+  public final class DisplayCompat {
+    method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+  }
+
+  public static final class DisplayCompat.ModeCompat {
+    method public int getPhysicalHeight();
+    method public int getPhysicalWidth();
+    method public boolean isNative();
+    method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+  }
+
   public final class DisplayCutoutCompat {
     ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
     method public java.util.List<android.graphics.Rect!>! getBoundingRects();
diff --git a/core/core/build.gradle b/core/core/build.gradle
index 51e31d9..bbf46bc 100644
--- a/core/core/build.gradle
+++ b/core/core/build.gradle
@@ -31,9 +31,16 @@
         exclude group: 'androidx.core', module: 'core'
     }
     annotationProcessor(project(":versionedparcelable-annotation"))
+
+
+    testImplementation(ANDROIDX_TEST_CORE)
+    testImplementation(ANDROIDX_TEST_RUNNER)
+    testImplementation(TRUTH)
+    testImplementation(ROBOLECTRIC)
 }
 
 android {
+    testOptions.unitTests.includeAndroidResources = true
     compileOptions {
         sourceCompatibility = JavaVersion.VERSION_1_7
         targetCompatibility = JavaVersion.VERSION_1_7
diff --git a/core/core/src/main/java/androidx/core/content/ContentProviderCompat.java b/core/core/src/main/java/androidx/core/content/ContentProviderCompat.java
new file mode 100644
index 0000000..0d4f8b4
--- /dev/null
+++ b/core/core/src/main/java/androidx/core/content/ContentProviderCompat.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.content;
+
+import android.content.ContentProvider;
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Helper for accessing features in {@link android.content.ContentProvider} in a backwards
+ * compatible fashion.
+ */
+public final class ContentProviderCompat {
+    private ContentProviderCompat() {
+        /* Hide constructor */
+    }
+
+    /**
+     * Returns NonNull context associated with given {@link android.content.ContentProvider}.
+     *
+     * A provider must be declared in the manifest and created automatically by the system, and
+     * context is only available after {@link android.content.ContentProvider#onCreate}
+     * is called.
+     *
+     * @param provider The {@link android.content.ContentProvider}.
+     * @return The {@link android.content.Context} object associated with the
+     * {@link android.content.ContentProvider}.
+     */
+    public static @NonNull Context requireContext(@NonNull final ContentProvider provider) {
+        final Context ctx = provider.getContext();
+        if (ctx == null) {
+            throw new IllegalStateException("Cannot find context from the provider.");
+        }
+        return ctx;
+    }
+}
diff --git a/core/core/src/main/java/androidx/core/view/DisplayCompat.java b/core/core/src/main/java/androidx/core/view/DisplayCompat.java
new file mode 100644
index 0000000..9057caf
--- /dev/null
+++ b/core/core/src/main/java/androidx/core/view/DisplayCompat.java
@@ -0,0 +1,320 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.view;
+
+import static android.content.Context.UI_MODE_SERVICE;
+
+import android.annotation.SuppressLint;
+import android.app.UiModeManager;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.graphics.Point;
+import android.os.Build;
+import android.text.TextUtils;
+import android.view.Display;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.util.Preconditions;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+/**
+ * A class for retrieving the physical display size from a device. This is necessary because
+ * Display.Mode.getPhysicalDisplaySize might not report the real physical display size
+ * because most ATV devices don't report all available modes correctly. In this case there is no
+ * way to find out whether a device is capable to display 4k content. This class offers a
+ * workaround for this problem.
+ */
+public final class DisplayCompat {
+    private static final int DISPLAY_SIZE_4K_WIDTH = 3840;
+    private static final int DISPLAY_SIZE_4K_HEIGHT = 2160;
+
+    private DisplayCompat() {
+        // This class is non-instantiable.
+    }
+
+    /**
+     * Gets the supported modes of the given display where at least one of the modes is flagged
+     * as isNative(). Note that a native mode might not wrap any Display.Mode object in case
+     * the display returns no mode with the physical display size.
+     *
+     * @return an array of supported modes where at least one of the modes is native which
+     * contains the physical display size
+     */
+    @NonNull
+    @SuppressLint("ArrayReturn")
+    public static ModeCompat[] getSupportedModes(@NonNull Context context,
+            @NonNull Display display) {
+        Point physicalDisplaySize = getPhysicalDisplaySize(context, display);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            // Display.Mode class and display.getSupportedModes() exist
+            Display.Mode[] supportedModes = display.getSupportedModes();
+            ArrayList<ModeCompat> supportedModesCompat = new ArrayList<>(supportedModes.length);
+            boolean nativeModeExists = false;
+            for (int i = 0; i < supportedModes.length; i++) {
+                if (physicalSizeEquals(supportedModes[i], physicalDisplaySize)) {
+                    // Current mode has native resolution, flag it accordingly
+                    supportedModesCompat.add(i,
+                            new ModeCompat(supportedModes[i], true));
+                    nativeModeExists = true;
+                } else {
+                    supportedModesCompat.add(i,
+                            new ModeCompat(supportedModes[i], false));
+                }
+            }
+            if (!nativeModeExists) {
+                // If no mode with physicalDisplaySize dimension exists, add the mode with the
+                // native display resolution
+                supportedModesCompat.add(new ModeCompat(physicalDisplaySize));
+            }
+            return supportedModesCompat.toArray(new ModeCompat[0]);
+        } else {
+            // previous to Android M Display.Mode and Display.getSupportedModes() did not exist,
+            // hence the only supported mode is the native display resolution
+            return new ModeCompat[] { new ModeCompat(physicalDisplaySize) };
+        }
+    }
+
+    /**
+     * Parses a string which represents the display-size which contains 'x' as a delimiter
+     * between two integers representing the display's width and height and returns the
+     * display size as a Point object.
+     *
+     * @param displaySize a string
+     * @return a Point object containing the size in x and y direction in pixels
+     * @throws NumberFormatException in case the integers cannot be parsed
+     */
+    private static Point parseDisplaySize(@NonNull String displaySize)
+            throws NumberFormatException {
+        String[] displaySizeParts = displaySize.trim().split("x", -1);
+        if (displaySizeParts.length == 2) {
+            int width = Integer.parseInt(displaySizeParts[0]);
+            int height = Integer.parseInt(displaySizeParts[1]);
+            if (width > 0 && height > 0) {
+                return new Point(width, height);
+            }
+        }
+        throw new NumberFormatException();
+    }
+
+    /**
+     * Reads a system property and returns its string value.
+     *
+     * @param name the name of the system property
+     * @return the result string or null if an exception occurred
+     */
+    @Nullable
+    private static String getSystemProperty(String name) {
+        try {
+            @SuppressLint("PrivateApi")
+            Class<?> systemProperties = Class.forName("android.os.SystemProperties");
+            Method getMethod = systemProperties.getMethod("get", String.class);
+            return (String) getMethod.invoke(systemProperties, name);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /**
+     * Returns true if mode.getPhysicalWidth and mode.getPhysicalHeight are equal to the given size
+     *
+     * @param mode a Display.Mode object
+     * @param size a Point object representing the size in horizontal and vertical direction
+     */
+    @RequiresApi(Build.VERSION_CODES.M)
+    private static boolean physicalSizeEquals(Display.Mode mode, Point size) {
+        return (mode.getPhysicalWidth() == size.x && mode.getPhysicalHeight() == size.y)
+                || (mode.getPhysicalWidth() == size.y && mode.getPhysicalHeight() == size.x);
+    }
+
+    /**
+     * Returns whether the app is running on a TV device
+     *
+     * @return true iff the app is running on a TV device
+     */
+    private static boolean isTv(@NonNull Context context) {
+        // See https://developer.android.com/training/tv/start/hardware.html#runtime-check.
+        UiModeManager uiModeManager = (UiModeManager) context.getSystemService(UI_MODE_SERVICE);
+        return uiModeManager != null
+                && uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION;
+    }
+
+    /**
+     * Helper function to determine the physical display size from the system properties only. On
+     * Android TVs it is common for the UI to be configured for a lower resolution than SurfaceViews
+     * can output. Before API 26 the Display object does not provide a way to identify this case,
+     * and up to and including API 28 many devices still do not correctly set their hardware
+     * composer output size.
+     *
+     * @return the physical display size, in pixels or null if the information is not available
+     */
+    @Nullable
+    private static Point parsePhysicalDisplaySizeFromSystemProperties(@NonNull String property,
+            @NonNull Display display) {
+        if (display.getDisplayId() == Display.DEFAULT_DISPLAY) {
+            // Check the system property for display size. From API 28 treble may prevent the
+            // system from writing sys.display-size so we check vendor.display-size instead.
+            String displaySize = getSystemProperty(property);
+            // If we managed to read the display size, attempt to parse it.
+            if (!TextUtils.isEmpty(displaySize)) {
+                try {
+                    return parseDisplaySize(displaySize);
+                } catch (NumberFormatException e) {
+                    // Do nothing for now, null is returned in the end
+                }
+            }
+        }
+        // Unable to determine display size from system properties
+        return null;
+    }
+
+    /**
+     * Gets the physical size of the given display in pixels. The size is collected in the
+     * following order:
+     * 1) sys.display-size if API < 28 (P) and the system-property is set
+     * 2) vendor.display-size if API >= 28 (P) and the system-property is set
+     * 3) physical width and height from display.getMode() for API >= 23
+     * 4) display.getRealSize() for API >= 17
+     * 5) display.getSize()
+     *
+     * @return the physical display size, in pixels
+     */
+    private static Point getPhysicalDisplaySize(@NonNull Context context,
+            @NonNull Display display) {
+        Point displaySize = Build.VERSION.SDK_INT < Build.VERSION_CODES.P
+                ? parsePhysicalDisplaySizeFromSystemProperties("sys.display-size", display)
+                : parsePhysicalDisplaySizeFromSystemProperties("vendor.display-size", display);
+        if (displaySize != null) {
+            return displaySize;
+        } else if (isSonyBravia4kTv(context)) {
+            // Sony Android TVs advertise support for 4k output via a system feature.
+            return new Point(DISPLAY_SIZE_4K_WIDTH, DISPLAY_SIZE_4K_HEIGHT);
+        } else {
+            // Unable to retrieve the physical display size from system properties, get display
+            // size from the framework API. Note that this might not be the actual physical
+            // display size but the, possibly down-scaled, UI size.
+            displaySize = new Point();
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+                Display.Mode mode = display.getMode();
+                displaySize.x = mode.getPhysicalWidth();
+                displaySize.y = mode.getPhysicalHeight();
+            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+                display.getRealSize(displaySize);
+            } else {
+                display.getSize(displaySize);
+            }
+        }
+        return displaySize;
+    }
+
+    /**
+     * Determines whether the connected display is a 4k capable Sony TV.
+     *
+     * @return true if the display is a Sony BRAVIA TV that supports 4k
+     */
+    private static boolean isSonyBravia4kTv(@NonNull Context context) {
+        return isTv(context)
+                && "Sony".equals(Build.MANUFACTURER)
+                && Build.MODEL.startsWith("BRAVIA")
+                && context.getPackageManager().hasSystemFeature(
+                "com.sony.dtv.hardware.panel.qfhd");
+    }
+
+    /**
+     * Compat class which provides an additional isNative() field. This field indicates whether a
+     * mode is native, which is important when searching for the highest possible native
+     * resolution of a display.
+     */
+    public static final class ModeCompat {
+
+        private final Display.Mode mMode;
+        private final Point mPhysicalDisplaySize;
+        private final boolean mIsNative;
+
+        /**
+         * Package private constructor which creates a native ModeCompat object that does not
+         * wrap any Display.Mode object but only contains the given display size
+         *
+         * @param physicalDisplaySize a Point object representing the display size in pixels
+         *                            (Point.x horizontal and Point.y vertical size)
+         */
+        ModeCompat(@NonNull Point physicalDisplaySize) {
+            Preconditions.checkNotNull(physicalDisplaySize, "physicalDisplaySize == null");
+            mIsNative = true;
+            mPhysicalDisplaySize = physicalDisplaySize;
+            mMode = null;
+        }
+
+        /**
+         * Package private constructor which creates a non-native ModeCompat and wraps the given
+         * Mode object
+         *
+         * @param mode a Display.Mode object
+         */
+        @RequiresApi(Build.VERSION_CODES.M)
+        ModeCompat(@NonNull Display.Mode mode, boolean isNative) {
+            Preconditions.checkNotNull(mode, "Display.Mode == null, can't wrap a null reference");
+            mIsNative = isNative;
+            // This simplifies the getPhysicalWidth() / getPhysicalHeight functions below
+            mPhysicalDisplaySize = new Point(mode.getPhysicalWidth(), mode.getPhysicalHeight());
+            mMode = mode;
+        }
+
+        /**
+         * Returns the physical width of the given display when configured in this mode
+         *
+         * @return the physical screen width in pixels
+         */
+        public int getPhysicalWidth() {
+            return mPhysicalDisplaySize.x;
+        }
+
+        /**
+         * Returns the physical height of the given display when configured in this mode
+         *
+         * @return the physical screen height in pixels
+         */
+        public int getPhysicalHeight() {
+            return mPhysicalDisplaySize.y;
+        }
+
+        /**
+         * Function to get the wrapped object
+         *
+         * @return the wrapped Display.Mode object or null if there was no matching mode for the
+         * native resolution.
+         */
+        @RequiresApi(Build.VERSION_CODES.M)
+        @Nullable
+        public Display.Mode toMode() {
+            return mMode;
+        }
+
+        /**
+         * This field indicates whether a mode is native, which is important when searching for
+         * the highest possible native resolution of a display.
+         *
+         * @return true if this is a native mode of the wrapped display
+         */
+        public boolean isNative() {
+            return mIsNative;
+        }
+    }
+}
diff --git a/core/core/src/test/java/androidx/core/view/DisplayCompatTest.java b/core/core/src/test/java/androidx/core/view/DisplayCompatTest.java
new file mode 100644
index 0000000..dc9d969
--- /dev/null
+++ b/core/core/src/test/java/androidx/core/view/DisplayCompatTest.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.view;
+
+import static android.content.Context.DISPLAY_SERVICE;
+import static android.content.Context.UI_MODE_SERVICE;
+import static android.content.Context.WINDOW_SERVICE;
+import static android.content.res.Configuration.UI_MODE_TYPE_NORMAL;
+import static android.content.res.Configuration.UI_MODE_TYPE_TELEVISION;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.robolectric.Shadows.shadowOf;
+
+import android.app.UiModeManager;
+import android.content.ContextWrapper;
+import android.hardware.display.DisplayManager;
+import android.os.Build;
+import android.view.Display;
+import android.view.WindowManager;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.internal.DoNotInstrument;
+import org.robolectric.shadows.ShadowDisplayManager;
+import org.robolectric.shadows.ShadowPackageManager;
+import org.robolectric.shadows.ShadowSystemProperties;
+import org.robolectric.shadows.ShadowUIModeManager;
+import org.robolectric.util.ReflectionHelpers;
+
+import java.util.Optional;
+
+@RunWith(RobolectricTestRunner.class)
+@DoNotInstrument
+@Config(
+        sdk = {Build.VERSION_CODES.LOLLIPOP, Build.VERSION_CODES.P},
+        // sets the display size for the tests (http://robolectric.org/device-configuration/)
+        qualifiers = "w2048dp-h4096dp"
+)
+public final class DisplayCompatTest {
+    private static final int DISPLAY_WIDTH = 2048;
+    private static final int DISPLAY_HEIGHT = 4096;
+    // Set SystemProperties to a different value s.t. the result can be distinguished
+    private static final int DISPLAY_WIDTH_VENDOR = DISPLAY_WIDTH + 1;
+    private static final int DISPLAY_HEIGHT_VENDOR = DISPLAY_HEIGHT + 1;
+    private static final int DISPLAY_WIDTH_VENDOR_P = DISPLAY_WIDTH + 2;
+    private static final int DISPLAY_HEIGHT_VENDOR_P = DISPLAY_HEIGHT + 2;
+    private final ContextWrapper mContext = ApplicationProvider.getApplicationContext();
+    private ShadowUIModeManager mUiModeManagerShadow;
+    private DisplayManager mDisplayManager;
+    private WindowManager mWindowManager;
+    private Display mDefaultDisplay;
+
+    private Optional<DisplayCompat.ModeCompat> findNativeMode(DisplayCompat.ModeCompat[] modes) {
+        for (DisplayCompat.ModeCompat modeCompat : modes) {
+            if (modeCompat.isNative()) {
+                return Optional.of(modeCompat);
+            }
+        }
+        return Optional.empty();
+    }
+
+    @Before
+    public void setup() {
+        mUiModeManagerShadow = shadowOf((UiModeManager) mContext.getSystemService(UI_MODE_SERVICE));
+        mUiModeManagerShadow.currentModeType = UI_MODE_TYPE_NORMAL;
+        mDisplayManager = (DisplayManager) mContext.getSystemService(DISPLAY_SERVICE);
+        mWindowManager = (WindowManager) mContext.getSystemService(WINDOW_SERVICE);
+        mDefaultDisplay = mWindowManager.getDefaultDisplay();
+        ShadowSystemProperties.reset();
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
+            // before treble
+            ShadowSystemProperties.override(
+                    "sys.display-size",
+                    String.format("%dx%d", DISPLAY_WIDTH_VENDOR, DISPLAY_HEIGHT_VENDOR));
+        } else {
+            ShadowSystemProperties.override(
+                    "vendor.display-size",
+                    String.format("%dx%d", DISPLAY_WIDTH_VENDOR_P, DISPLAY_HEIGHT_VENDOR_P));
+        }
+    }
+
+    @Test
+    public void defaultDisplay_sizeFromSystemProperty() {
+        Optional<DisplayCompat.ModeCompat> nativeMode =
+                findNativeMode(DisplayCompat.getSupportedModes(mContext, mDefaultDisplay));
+        assertThat(nativeMode.isPresent());
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
+            assertThat(nativeMode.get().getPhysicalWidth()).isEqualTo(DISPLAY_WIDTH_VENDOR);
+            assertThat(nativeMode.get().getPhysicalHeight()).isEqualTo(DISPLAY_HEIGHT_VENDOR);
+        } else {
+            assertThat(nativeMode.get().getPhysicalWidth()).isEqualTo(DISPLAY_WIDTH_VENDOR_P);
+            assertThat(nativeMode.get().getPhysicalHeight()).isEqualTo(DISPLAY_HEIGHT_VENDOR_P);
+        }
+    }
+
+    @Test
+    public void secondDisplay_sizeFromAccessorFunction() {
+        int displayWidth = 100;
+        int displayHeight = 200;
+        String displayQualifierString = String.format("w%ddp-h%ddp", displayWidth, displayHeight);
+        int secondDisplayId = ShadowDisplayManager.addDisplay(displayQualifierString);
+        Display secondDisplay = mDisplayManager.getDisplay(secondDisplayId);
+        Optional<DisplayCompat.ModeCompat> nativeMode =
+                findNativeMode(DisplayCompat.getSupportedModes(mContext, secondDisplay));
+        assertThat(nativeMode.isPresent());
+        assertThat(nativeMode.get().getPhysicalWidth()).isEqualTo(displayWidth);
+        assertThat(nativeMode.get().getPhysicalHeight()).isEqualTo(displayHeight);
+    }
+
+    @Test
+    public void emptySystemProperties_sizeFromAccessorFunction() {
+        ShadowSystemProperties.override("sys.display-size", "");
+        ShadowSystemProperties.override("vendor.display-size", "");
+        Optional<DisplayCompat.ModeCompat> nativeMode =
+                findNativeMode(DisplayCompat.getSupportedModes(mContext, mDefaultDisplay));
+        assertThat(nativeMode.isPresent());
+        assertThat(nativeMode.get().getPhysicalWidth()).isEqualTo(DISPLAY_WIDTH);
+        assertThat(nativeMode.get().getPhysicalHeight()).isEqualTo(DISPLAY_HEIGHT);
+    }
+
+    @Test
+    public void tvModeSonyBraviaSpecialCase_hardcodedSize() {
+        mUiModeManagerShadow.currentModeType = UI_MODE_TYPE_TELEVISION;
+        ReflectionHelpers.setStaticField(android.os.Build.class, "MANUFACTURER", "Sony");
+        ReflectionHelpers.setStaticField(android.os.Build.class, "MODEL", "BRAVIA-EX550");
+        ShadowPackageManager packageManagerShadow = new ShadowPackageManager();
+        packageManagerShadow.setSystemFeature("com.sony.dtv.hardware.panel.qfhd", true);
+        ShadowSystemProperties.override("sys.display-size", "");
+        ShadowSystemProperties.override("vendor.display-size", "");
+        Optional<DisplayCompat.ModeCompat> nativeMode =
+                findNativeMode(DisplayCompat.getSupportedModes(mContext, mDefaultDisplay));
+        assertThat(nativeMode.isPresent());
+        // assert that the returned displaySize is equal to the 4k display size
+        assertThat(nativeMode.get().getPhysicalWidth()).isEqualTo(3840);
+        assertThat(nativeMode.get().getPhysicalHeight()).isEqualTo(2160);
+    }
+}
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerViewModelTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerViewModelTest.kt
index ac4315d..e17ea7a 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerViewModelTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerViewModelTest.kt
@@ -44,6 +44,14 @@
     }
 
     @Test
+    fun testAddRetainedFragmentWhileStateIsSaved() {
+        val fragment = mock(Fragment::class.java)
+        viewModel.setIsStateSaved(true)
+        viewModel.addRetainedFragment(fragment)
+        assertThat(viewModel.retainedFragments).isEmpty()
+    }
+
+    @Test
     fun testRemoveRetainedFragment() {
         val fragment = mock(Fragment::class.java)
         viewModel.addRetainedFragment(fragment)
@@ -54,6 +62,17 @@
     }
 
     @Test
+    fun testRemoveRetainedFragmentWhileStateIsSaved() {
+        val fragment = mock(Fragment::class.java)
+        viewModel.addRetainedFragment(fragment)
+        assertThat(viewModel.retainedFragments).containsExactly(fragment)
+
+        viewModel.setIsStateSaved(true)
+        viewModel.removeRetainedFragment(fragment)
+        assertThat(viewModel.retainedFragments).containsExactly(fragment)
+    }
+
+    @Test
     fun testGetChildNonConfig() {
         val fragment = Fragment()
         val childNonConfig = viewModel.getChildNonConfig(fragment)
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStoreTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStoreTest.kt
index 9616410..9f84e27 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStoreTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStoreTest.kt
@@ -60,6 +60,21 @@
             .isEqualTo(1)
     }
 
+    @Suppress("DEPRECATION")
+    @Test
+    fun testMakeActiveRetained() {
+        val nonConfig = FragmentManagerViewModel(true)
+        fragmentStore.setNonConfig(nonConfig)
+        emptyFragment.retainInstance = true
+        fragmentStore.makeActive(emptyStateManager)
+        assertThat(fragmentStore.activeFragments)
+            .containsExactly(emptyFragment)
+        assertThat(fragmentStore.activeFragmentCount)
+            .isEqualTo(1)
+        assertThat(nonConfig.retainedFragments)
+            .containsExactly(emptyFragment)
+    }
+
     @Test
     fun testContainsActiveFragment() {
         fragmentStore.makeActive(emptyStateManager)
@@ -90,6 +105,33 @@
         fragmentStore.makeInactive(emptyStateManager)
         assertThat(fragmentStore.activeFragments)
             .containsExactly(null)
+        assertThat(fragmentStore.containsActiveFragment(emptyFragment.mWho))
+            .isFalse()
+
+        fragmentStore.burpActive()
+        assertThat(fragmentStore.activeFragments)
+            .isEmpty()
+    }
+
+    @Suppress("DEPRECATION")
+    @Test
+    fun testMakeInactiveBurpRetained() {
+        val nonConfig = FragmentManagerViewModel(true)
+        fragmentStore.setNonConfig(nonConfig)
+        emptyFragment.retainInstance = true
+        fragmentStore.makeActive(emptyStateManager)
+        assertThat(fragmentStore.activeFragments)
+            .containsExactly(emptyFragment)
+        assertThat(nonConfig.retainedFragments)
+            .containsExactly(emptyFragment)
+
+        fragmentStore.makeInactive(emptyStateManager)
+        assertThat(fragmentStore.activeFragments)
+            .containsExactly(null)
+        assertThat(fragmentStore.containsActiveFragment(emptyFragment.mWho))
+            .isFalse()
+        assertThat(nonConfig.retainedFragments)
+            .isEmpty()
 
         fragmentStore.burpActive()
         assertThat(fragmentStore.activeFragments)
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleTest.kt
index be3612c..9d2a203 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleTest.kt
@@ -20,6 +20,7 @@
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.FrameLayout
 import androidx.fragment.app.test.FragmentTestActivity
 import androidx.fragment.test.R
 import androidx.lifecycle.Lifecycle
@@ -27,6 +28,7 @@
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewTreeLifecycleOwner
 import androidx.test.annotation.UiThreadTest
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
@@ -241,6 +243,71 @@
             .that(fragment.liveData.hasActiveObservers()).isTrue()
     }
 
+    /**
+     * Test that the ViewTreeLifecycleOwner for a fragment's view is the fragment's own
+     * viewLifecycleOwner.
+     */
+    @Test
+    fun testFragmentViewTreeLifecycleOwner() {
+        val activity = activityRule.activity
+        val fm = activity.supportFragmentManager
+
+        val fragment = ViewTreeLifecycleOwnerCheckFragment()
+
+        var observedLifecycleOwner: Any? = "not set"
+        var observedTreeLifecycleOwner: Any? = "not set"
+
+        val latch = CountDownLatch(1)
+        activity.runOnUiThread {
+            fragment.viewLifecycleOwnerLiveData.observeForever { owner ->
+                // Don't check when we're destroying the fragment.
+                // We should never get more than one.
+                if (owner == null) return@observeForever
+
+                observedLifecycleOwner = owner
+                observedTreeLifecycleOwner = fragment.view?.let { ViewTreeLifecycleOwner.get(it) }
+            }
+
+            fm.beginTransaction().add(R.id.content, fragment).commitNow()
+            latch.countDown()
+        }
+
+        assertThat(latch.await(1, TimeUnit.SECONDS)).isTrue()
+
+        assertWithMessage("ViewTreeLifecycleOwner should match viewLifecycleOwner after commitNow")
+            .that(ViewTreeLifecycleOwner.get(fragment.view ?: error("no fragment view created")))
+            .isSameInstanceAs(fragment.viewLifecycleOwner)
+
+        assertWithMessage("ViewTreeLifecycleOwner should match viewLifecycleOwner in " +
+                "viewLifecycleOwnerLiveData observer")
+            .that(observedTreeLifecycleOwner)
+            .isSameInstanceAs(fragment.viewLifecycleOwner)
+
+        assertWithMessage("ViewTreeLifecycleOwner should match observed LifecycleOwner in " +
+                "viewLifecycleOwnerLiveData observer")
+            .that(observedTreeLifecycleOwner)
+            .isSameInstanceAs(observedLifecycleOwner)
+
+        assertWithMessage("ViewTreeLifecycleOwner should match viewLifecycleOwner in " +
+                "onViewCreated")
+            .that(fragment.onViewCreatedLifecycleOwner)
+            .isSameInstanceAs(fragment.viewLifecycleOwner)
+    }
+
+    class ViewTreeLifecycleOwnerCheckFragment : Fragment() {
+        var onViewCreatedLifecycleOwner: Any? = "not set"
+
+        override fun onCreateView(
+            inflater: LayoutInflater,
+            container: ViewGroup?,
+            savedInstanceState: Bundle?
+        ): View? = FrameLayout(inflater.context)
+
+        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+            onViewCreatedLifecycleOwner = ViewTreeLifecycleOwner.get(view)
+        }
+    }
+
     class ObserveInOnCreateViewFragment : Fragment() {
         private val liveData = MutableLiveData<Boolean>()
         private val onCreateViewObserver = Observer<Boolean> { }
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java b/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
index 6c6f54e..1cdddab 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
@@ -69,6 +69,7 @@
 import androidx.lifecycle.ViewModelProvider;
 import androidx.lifecycle.ViewModelStore;
 import androidx.lifecycle.ViewModelStoreOwner;
+import androidx.lifecycle.ViewTreeLifecycleOwner;
 import androidx.loader.app.LoaderManager;
 import androidx.savedstate.SavedStateRegistry;
 import androidx.savedstate.SavedStateRegistryController;
@@ -2732,6 +2733,10 @@
         if (mView != null) {
             // Initialize the view lifecycle
             mViewLifecycleOwner.initialize();
+            // Tell the fragment's new view about it before we tell anyone listening
+            // to mViewLifecycleOwnerLiveData and before onViewCreated, so that calls to
+            // ViewTreeLifecycleOwner.get() return something meaningful
+            ViewTreeLifecycleOwner.set(mView, mViewLifecycleOwner);
             // Then inform any Observers of the new LifecycleOwner
             mViewLifecycleOwnerLiveData.setValue(mViewLifecycleOwner);
         } else {
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
index 2b09e4e..4c2c493 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
@@ -894,29 +894,11 @@
     }
 
     void addRetainedFragment(@NonNull Fragment f) {
-        if (isStateSaved()) {
-            if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
-                Log.v(TAG, "Ignoring addRetainedFragment as the state is already saved");
-            }
-            return;
-        }
-        boolean added = mNonConfig.addRetainedFragment(f);
-        if (added && FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
-            Log.v(TAG, "Updating retained Fragments: Added " + f);
-        }
+        mNonConfig.addRetainedFragment(f);
     }
 
     void removeRetainedFragment(@NonNull Fragment f) {
-        if (isStateSaved()) {
-            if (isLoggingEnabled(Log.VERBOSE)) {
-                Log.v(TAG, "Ignoring removeRetainedFragment as the state is already saved");
-            }
-            return;
-        }
-        boolean removed = mNonConfig.removeRetainedFragment(f);
-        if (removed && isLoggingEnabled(Log.VERBOSE)) {
-            Log.v(TAG, "Updating retained Fragments: Removed " + f);
-        }
+        mNonConfig.removeRetainedFragment(f);
     }
 
     /**
@@ -1258,7 +1240,7 @@
                     if (newState < Fragment.CREATED) {
                         boolean beingRemoved = f.mRemoving && !f.isInBackStack();
                         if (beingRemoved || mNonConfig.shouldDestroy(f)) {
-                            makeInactive(fragmentStateManager);
+                            mFragmentStore.makeInactive(fragmentStateManager);
                         } else {
                             if (f.mTargetWho != null) {
                                 Fragment target = findActiveFragment(f.mTargetWho);
@@ -1508,46 +1490,33 @@
         }
     }
 
-    void makeActive(@NonNull Fragment f) {
-        if (mFragmentStore.containsActiveFragment(f.mWho)) {
-            return;
+    /**
+     * For a given Fragment, get any existing FragmentStateManager found in the
+     * {@link FragmentStore} or create a brand new FragmentStateManager if one does
+     * not exist.
+     *
+     * @param f The Fragment to create a FragmentStateManager for
+     * @return A valid FragmentStateManager
+     */
+    @NonNull
+    FragmentStateManager createOrGetFragmentStateManager(@NonNull Fragment f) {
+        FragmentStateManager existing = mFragmentStore.getFragmentStateManager(f.mWho);
+        if (existing != null) {
+            return existing;
         }
-
         FragmentStateManager fragmentStateManager = new FragmentStateManager(
                 mLifecycleCallbacksDispatcher, mNonConfig, f);
         // Restore state any state set via setInitialSavedState()
         fragmentStateManager.restoreState(mHost.getContext().getClassLoader());
-        mFragmentStore.makeActive(fragmentStateManager);
-        if (f.mRetainInstanceChangedWhileDetached) {
-            if (f.mRetainInstance) {
-                addRetainedFragment(f);
-            } else {
-                removeRetainedFragment(f);
-            }
-            f.mRetainInstanceChangedWhileDetached = false;
-        }
         // Catch the FragmentStateManager up to our current state
         fragmentStateManager.setFragmentManagerState(mCurState);
-        if (isLoggingEnabled(Log.VERBOSE)) Log.v(TAG, "Added fragment to active set " + f);
-    }
-
-    private void makeInactive(@NonNull FragmentStateManager fragmentStateManager) {
-        Fragment f = fragmentStateManager.getFragment();
-        if (!mFragmentStore.containsActiveFragment(f.mWho)) {
-            return;
-        }
-
-        if (isLoggingEnabled(Log.VERBOSE)) {
-            Log.v(TAG, "Removed fragment from active set " + f);
-        }
-
-        mFragmentStore.makeInactive(fragmentStateManager);
-        removeRetainedFragment(f);
+        return fragmentStateManager;
     }
 
     void addFragment(@NonNull Fragment fragment) {
         if (isLoggingEnabled(Log.VERBOSE)) Log.v(TAG, "add: " + fragment);
-        makeActive(fragment);
+        FragmentStateManager fragmentStateManager = createOrGetFragmentStateManager(fragment);
+        mFragmentStore.makeActive(fragmentStateManager);
         if (!fragment.mDetached) {
             mFragmentStore.addFragment(fragment);
             fragment.mRemoving = false;
@@ -2373,6 +2342,7 @@
         execPendingActions(true);
 
         mStateSaved = true;
+        mNonConfig.setIsStateSaved(true);
 
         // First collect all active fragments.
         ArrayList<FragmentState> active = mFragmentStore.saveActiveFragments();
@@ -2523,6 +2493,11 @@
         return mContainer;
     }
 
+    @NonNull
+    FragmentStore getFragmentStore() {
+        return mFragmentStore;
+    }
+
     void attachController(@NonNull FragmentHostCallback<?> host,
             @NonNull FragmentContainer container, @Nullable final Fragment parent) {
         if (mHost != null) throw new IllegalStateException("Already attached");
@@ -2552,11 +2527,15 @@
         } else {
             mNonConfig = new FragmentManagerViewModel(false);
         }
+        // Ensure that the state is in sync with FragmentManager
+        mNonConfig.setIsStateSaved(isStateSaved());
+        mFragmentStore.setNonConfig(mNonConfig);
     }
 
     void noteStateNotSaved() {
         mStateSaved = false;
         mStopped = false;
+        mNonConfig.setIsStateSaved(false);
         for (Fragment fragment : mFragmentStore.getFragments()) {
             if (fragment != null) {
                 fragment.noteStateNotSaved();
@@ -2567,24 +2546,28 @@
     void dispatchCreate() {
         mStateSaved = false;
         mStopped = false;
+        mNonConfig.setIsStateSaved(false);
         dispatchStateChange(Fragment.CREATED);
     }
 
     void dispatchActivityCreated() {
         mStateSaved = false;
         mStopped = false;
+        mNonConfig.setIsStateSaved(false);
         dispatchStateChange(Fragment.ACTIVITY_CREATED);
     }
 
     void dispatchStart() {
         mStateSaved = false;
         mStopped = false;
+        mNonConfig.setIsStateSaved(false);
         dispatchStateChange(Fragment.STARTED);
     }
 
     void dispatchResume() {
         mStateSaved = false;
         mStopped = false;
+        mNonConfig.setIsStateSaved(false);
         dispatchStateChange(Fragment.RESUMED);
     }
 
@@ -2594,6 +2577,7 @@
 
     void dispatchStop() {
         mStopped = true;
+        mNonConfig.setIsStateSaved(true);
         dispatchStateChange(Fragment.ACTIVITY_CREATED);
     }
 
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java
index dc7de27..2f24e8b 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java
@@ -64,6 +64,10 @@
     // Only used when mStateAutomaticallySaved is false
     private boolean mHasSavedSnapshot = false;
 
+    // Flag set by the FragmentManager to indicate when we should allow
+    // changes to the set of retained fragments
+    private boolean mIsStateSaved = false;
+
     /**
      * FragmentManagerViewModel simultaneously supports two modes:
      * <ol>
@@ -83,6 +87,15 @@
         mStateAutomaticallySaved = stateAutomaticallySaved;
     }
 
+    /**
+     * Set whether the FragmentManager has saved its state
+     *
+     * @param isStateSaved Whether the FragmentManager has saved its state
+     */
+    void setIsStateSaved(boolean isStateSaved) {
+        mIsStateSaved = isStateSaved;
+    }
+
     @Override
     protected void onCleared() {
         if (FragmentManager.isLoggingEnabled(Log.DEBUG)) {
@@ -95,12 +108,20 @@
         return mHasBeenCleared;
     }
 
-    boolean addRetainedFragment(@NonNull Fragment fragment) {
+    void addRetainedFragment(@NonNull Fragment fragment) {
+        if (mIsStateSaved) {
+            if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+                Log.v(TAG, "Ignoring addRetainedFragment as the state is already saved");
+            }
+            return;
+        }
         if (mRetainedFragments.containsKey(fragment.mWho)) {
-            return false;
+            return;
         }
         mRetainedFragments.put(fragment.mWho, fragment);
-        return true;
+        if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+            Log.v(TAG, "Updating retained Fragments: Added " + fragment);
+        }
     }
 
     @Nullable
@@ -129,8 +150,17 @@
         }
     }
 
-    boolean removeRetainedFragment(@NonNull Fragment fragment) {
-        return mRetainedFragments.remove(fragment.mWho) != null;
+    void removeRetainedFragment(@NonNull Fragment fragment) {
+        if (mIsStateSaved) {
+            if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+                Log.v(TAG, "Ignoring removeRetainedFragment as the state is already saved");
+            }
+            return;
+        }
+        boolean removed = mRetainedFragments.remove(fragment.mWho) != null;
+        if (removed && FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+            Log.v(TAG, "Updating retained Fragments: Removed " + fragment);
+        }
     }
 
     @NonNull
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStore.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStore.java
index 13a8e60..8699091 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStore.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStore.java
@@ -38,6 +38,12 @@
     private final ArrayList<Fragment> mAdded = new ArrayList<>();
     private final HashMap<String, FragmentStateManager> mActive = new HashMap<>();
 
+    private FragmentManagerViewModel mNonConfig;
+
+    void setNonConfig(@NonNull FragmentManagerViewModel nonConfig) {
+        mNonConfig = nonConfig;
+    }
+
     void resetActiveFragments() {
         mActive.clear();
     }
@@ -59,7 +65,22 @@
     }
 
     void makeActive(@NonNull FragmentStateManager newlyActive) {
-        mActive.put(newlyActive.getFragment().mWho, newlyActive);
+        Fragment f = newlyActive.getFragment();
+        if (containsActiveFragment(f.mWho)) {
+            return;
+        }
+        mActive.put(f.mWho, newlyActive);
+        if (f.mRetainInstanceChangedWhileDetached) {
+            if (f.mRetainInstance) {
+                mNonConfig.addRetainedFragment(f);
+            } else {
+                mNonConfig.removeRetainedFragment(f);
+            }
+            f.mRetainInstanceChangedWhileDetached = false;
+        }
+        if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+            Log.v(TAG, "Added fragment to active set " + f);
+        }
     }
 
     void addFragment(@NonNull Fragment fragment) {
@@ -99,6 +120,19 @@
 
     void makeInactive(@NonNull FragmentStateManager newlyInactive) {
         Fragment f = newlyInactive.getFragment();
+
+        // Don't remove yet. That happens in burpActive(). This prevents
+        // concurrent modification while iterating over mActive
+        FragmentStateManager removedStateManager = mActive.put(f.mWho, null);
+        if (removedStateManager == null) {
+            // It was already removed, so there's nothing more to do
+            return;
+        }
+
+        if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+            Log.v(TAG, "Removed fragment from active set " + f);
+        }
+
         // Ensure that any Fragment that had this Fragment as its
         // target Fragment retains a reference to the Fragment
         for (FragmentStateManager fragmentStateManager : mActive.values()) {
@@ -110,15 +144,15 @@
                 }
             }
         }
-        // Don't remove yet. That happens in burpActive(). This prevents
-        // concurrent modification while iterating over mActive
-        mActive.put(f.mWho, null);
-
         if (f.mTargetWho != null) {
             // Restore the target Fragment so that it can be accessed
             // even after the Fragment is removed.
             f.mTarget = findActiveFragment(f.mTargetWho);
         }
+
+        if (f.mRetainInstance) {
+            mNonConfig.removeRetainedFragment(f);
+        }
     }
 
     /**
@@ -243,7 +277,7 @@
     }
 
     boolean containsActiveFragment(@NonNull String who) {
-        return mActive.containsKey(who);
+        return mActive.get(who) != null;
     }
 
     @Nullable
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java
index a0a07d4..a8ed9d5 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransition.java
@@ -1242,7 +1242,9 @@
             FragmentManager manager = transaction.mManager;
             if (fragment.mState < Fragment.CREATED && manager.mCurState >= Fragment.CREATED
                     && !transaction.mReorderingAllowed) {
-                manager.makeActive(fragment);
+                FragmentStateManager fragmentStateManager =
+                        manager.createOrGetFragmentStateManager(fragment);
+                manager.getFragmentStore().makeActive(fragmentStateManager);
                 manager.moveToState(fragment, Fragment.CREATED);
             }
         }
diff --git a/fragment/fragment/src/main/res/anim/fragment_close_enter.xml b/fragment/fragment/src/main/res/anim/fragment_close_enter.xml
index 3b799e1..506fd30 100644
--- a/fragment/fragment/src/main/res/anim/fragment_close_enter.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_close_enter.xml
@@ -14,10 +14,17 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/activity_close_enter.xml-->
 <set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
+    <alpha
+        android:fromAlpha="0"
+        android:toAlpha="1.0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@android:anim/linear_interpolator"
+        android:startOffset="66"
+        android:duration="50"/>
     <scale
         android:fromXScale="1.1"
         android:toXScale="1"
@@ -29,5 +36,5 @@
         android:fillBefore="true"
         android:fillAfter="true"
         android:interpolator="@anim/fragment_fast_out_extra_slow_in"
-        android:duration="400"/>
+        android:duration="300"/>
 </set>
\ No newline at end of file
diff --git a/fragment/fragment/src/main/res/anim/fragment_close_exit.xml b/fragment/fragment/src/main/res/anim/fragment_close_exit.xml
index c540f93..be1dd7e69 100644
--- a/fragment/fragment/src/main/res/anim/fragment_close_exit.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_close_exit.xml
@@ -14,8 +14,6 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/activity_close_exit.xml-->
 <set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false"
     android:zAdjustment="top">
@@ -26,7 +24,7 @@
         android:fillBefore="true"
         android:fillAfter="true"
         android:interpolator="@android:anim/linear_interpolator"
-        android:startOffset="33"
+        android:startOffset="66"
         android:duration="50"/>
     <scale
         android:fromXScale="1"
@@ -39,5 +37,5 @@
         android:fillBefore="true"
         android:fillAfter="true"
         android:interpolator="@anim/fragment_fast_out_extra_slow_in"
-        android:duration="400"/>
+        android:duration="300"/>
 </set>
\ No newline at end of file
diff --git a/fragment/fragment/src/main/res/anim/fragment_fade_enter.xml b/fragment/fragment/src/main/res/anim/fragment_fade_enter.xml
index 8838794..939f446 100644
--- a/fragment/fragment/src/main/res/anim/fragment_fade_enter.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_fade_enter.xml
@@ -14,9 +14,7 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/fade_in.xml-->
 <alpha xmlns:android="http://schemas.android.com/apk/res/android"
-    android:interpolator="@android:anim/decelerate_interpolator"
+    android:interpolator="@android:anim/linear_interpolator"
     android:fromAlpha="0.0" android:toAlpha="1.0"
-    android:duration="@android:integer/config_longAnimTime" />
\ No newline at end of file
+    android:duration="150" />
\ No newline at end of file
diff --git a/fragment/fragment/src/main/res/anim/fragment_fade_exit.xml b/fragment/fragment/src/main/res/anim/fragment_fade_exit.xml
index d6c6f2b..3b4d7ae 100644
--- a/fragment/fragment/src/main/res/anim/fragment_fade_exit.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_fade_exit.xml
@@ -14,11 +14,9 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/fade_out.xml-->
 <alpha xmlns:android="http://schemas.android.com/apk/res/android"
-    android:interpolator="@android:anim/accelerate_interpolator"
+    android:interpolator="@android:anim/linear_interpolator"
     android:fromAlpha="1.0"
     android:toAlpha="0.0"
-    android:duration="@android:integer/config_mediumAnimTime"
+    android:duration="150"
     />
\ No newline at end of file
diff --git a/fragment/fragment/src/main/res/anim/fragment_open_enter.xml b/fragment/fragment/src/main/res/anim/fragment_open_enter.xml
index e74d0e2..41dfbea 100644
--- a/fragment/fragment/src/main/res/anim/fragment_open_enter.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_open_enter.xml
@@ -14,8 +14,6 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/activity_close_enter.xml-->
 <set xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:shareInterpolator="false">
@@ -26,7 +24,7 @@
         android:fillBefore="true"
         android:fillAfter="true"
         android:interpolator="@android:anim/linear_interpolator"
-        android:startOffset="50"
+        android:startOffset="35"
         android:duration="50"/>
     <scale
         android:fromXScale="0.85"
@@ -38,7 +36,7 @@
         android:fillEnabled="true"
         android:fillBefore="true"
         android:fillAfter="true"
-        android:pathData="@anim/fragment_fast_out_extra_slow_in"
-        android:duration="400"
+        android:interpolator="@anim/fragment_fast_out_extra_slow_in"
+        android:duration="300"
         tools:targetApi="lollipop" />
 </set>
\ No newline at end of file
diff --git a/fragment/fragment/src/main/res/anim/fragment_open_exit.xml b/fragment/fragment/src/main/res/anim/fragment_open_exit.xml
index ac1a760..9b97832 100644
--- a/fragment/fragment/src/main/res/anim/fragment_open_exit.xml
+++ b/fragment/fragment/src/main/res/anim/fragment_open_exit.xml
@@ -14,30 +14,28 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-
-<!--Taken from https://googleplex-android.googlesource.com/platform/frameworks/base/+/HEAD/core/res/res/anim/activity_open_exit.xml-->
 <set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
     <!-- Fade out, over a black surface, which simulates a black scrim -->
     <alpha
         android:fromAlpha="1"
-        android:toAlpha="0.4"
+        android:toAlpha="0.0"
         android:fillEnabled="true"
         android:fillBefore="true"
         android:fillAfter="true"
         android:interpolator="@android:anim/linear_interpolator"
-        android:startOffset="83"
-        android:duration="167"/>
+        android:startOffset="35"
+        android:duration="50"/>
     <scale
         android:fromXScale="1"
-        android:toXScale="1.05"
+        android:toXScale="1.15"
         android:fromYScale="1"
-        android:toYScale="1.05"
+        android:toYScale="1.15"
         android:pivotX="50%"
         android:pivotY="50%"
         android:fillEnabled="true"
         android:fillBefore="true"
         android:fillAfter="true"
         android:interpolator="@anim/fragment_fast_out_extra_slow_in"
-        android:duration="400"/>
+        android:duration="300"/>
 </set>
\ No newline at end of file
diff --git a/lifecycle/lifecycle-runtime-ktx/api/2.3.0-alpha01.txt b/lifecycle/lifecycle-runtime-ktx/api/2.3.0-alpha01.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/2.3.0-alpha01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/2.3.0-alpha01.txt
@@ -28,5 +28,10 @@
     method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
   }
 
+  public final class ViewKt {
+    ctor public ViewKt();
+    method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+  }
+
 }
 
diff --git a/lifecycle/lifecycle-runtime-ktx/api/current.txt b/lifecycle/lifecycle-runtime-ktx/api/current.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/current.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/current.txt
@@ -28,5 +28,10 @@
     method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
   }
 
+  public final class ViewKt {
+    ctor public ViewKt();
+    method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+  }
+
 }
 
diff --git a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.3.0-alpha01.txt b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.3.0-alpha01.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.3.0-alpha01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.3.0-alpha01.txt
@@ -28,5 +28,10 @@
     method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
   }
 
+  public final class ViewKt {
+    ctor public ViewKt();
+    method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+  }
+
 }
 
diff --git a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_current.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_current.txt
@@ -28,5 +28,10 @@
     method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
   }
 
+  public final class ViewKt {
+    ctor public ViewKt();
+    method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+  }
+
 }
 
diff --git a/lifecycle/lifecycle-runtime-ktx/api/restricted_2.3.0-alpha01.txt b/lifecycle/lifecycle-runtime-ktx/api/restricted_2.3.0-alpha01.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/restricted_2.3.0-alpha01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/restricted_2.3.0-alpha01.txt
@@ -28,5 +28,10 @@
     method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
   }
 
+  public final class ViewKt {
+    ctor public ViewKt();
+    method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+  }
+
 }
 
diff --git a/lifecycle/lifecycle-runtime-ktx/api/restricted_current.txt b/lifecycle/lifecycle-runtime-ktx/api/restricted_current.txt
index 8156596..2443c40 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/restricted_current.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/restricted_current.txt
@@ -28,5 +28,10 @@
     method public static suspend <T> Object! whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
   }
 
+  public final class ViewKt {
+    ctor public ViewKt();
+    method public static androidx.lifecycle.LifecycleOwner? findViewTreeLifecycleOwner(android.view.View);
+  }
+
 }
 
diff --git a/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/ViewTreeLifecycleOwnerTest.kt b/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/ViewTreeLifecycleOwnerTest.kt
new file mode 100644
index 0000000..afa6e75
--- /dev/null
+++ b/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/ViewTreeLifecycleOwnerTest.kt
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.lifecycle
+
+import android.view.View
+import android.widget.FrameLayout
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import androidx.test.platform.app.InstrumentationRegistry
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class ViewTreeLifecycleOwnerTest {
+    /**
+     * Tests that a direct set/get on a single view survives a round trip
+     */
+    @Test
+    fun setGetSameView() {
+        val v = View(InstrumentationRegistry.getInstrumentation().context)
+        val dummyOwner = DummyLifecycleOwner()
+
+        assertNull("initial LifecycleOwner expects null", v.findViewTreeLifecycleOwner())
+
+        ViewTreeLifecycleOwner.set(v, dummyOwner)
+
+        assertEquals("get the LifecycleOwner set directly",
+            dummyOwner, v.findViewTreeLifecycleOwner())
+    }
+
+    /**
+     * Tests that the owner set on a root of a subhierarchy is seen by both direct children
+     * and other descendants
+     */
+    @Test
+    fun getAncestorOwner() {
+        val context = InstrumentationRegistry.getInstrumentation().context
+        val root = FrameLayout(context)
+        val parent = FrameLayout(context)
+        val child = View(context)
+        root.addView(parent)
+        parent.addView(child)
+
+        assertNull("initial LifecycleOwner expects null", child.findViewTreeLifecycleOwner())
+
+        val dummyOwner = DummyLifecycleOwner()
+        ViewTreeLifecycleOwner.set(root, dummyOwner)
+
+        assertEquals("root sees owner", dummyOwner, root.findViewTreeLifecycleOwner())
+        assertEquals("direct child sees owner", dummyOwner, parent.findViewTreeLifecycleOwner())
+        assertEquals("grandchild sees owner", dummyOwner, child.findViewTreeLifecycleOwner())
+    }
+
+    /**
+     * Tests that a new owner set between a root and a descendant is seen by the descendant
+     * instead of the root value
+     */
+    @Test
+    fun shadowedOwner() {
+        val context = InstrumentationRegistry.getInstrumentation().context
+        val root = FrameLayout(context)
+        val parent = FrameLayout(context)
+        val child = View(context)
+        root.addView(parent)
+        parent.addView(child)
+
+        assertNull("initial LifecycleOwner expects null", child.findViewTreeLifecycleOwner())
+
+        val rootDummyOwner = DummyLifecycleOwner()
+        ViewTreeLifecycleOwner.set(root, rootDummyOwner)
+
+        val parentDummyOwner = DummyLifecycleOwner()
+        ViewTreeLifecycleOwner.set(parent, parentDummyOwner)
+
+        assertEquals("root sees owner", rootDummyOwner, root.findViewTreeLifecycleOwner())
+        assertEquals("direct child sees owner",
+            parentDummyOwner, parent.findViewTreeLifecycleOwner())
+        assertEquals("grandchild sees owner", parentDummyOwner, child.findViewTreeLifecycleOwner())
+    }
+
+    private class DummyLifecycleOwner : LifecycleOwner {
+        override fun getLifecycle(): Lifecycle {
+            throw UnsupportedOperationException("not a real LifecycleOwner")
+        }
+    }
+}
diff --git a/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/View.kt b/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/View.kt
new file mode 100644
index 0000000..ffaea67
--- /dev/null
+++ b/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/View.kt
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.lifecycle
+
+import android.view.View
+
+/**
+ * Locates the [LifecycleOwner] responsible for managing this [View], if present.
+ * This may be used to scope work or heavyweight resources associated with the view
+ * that may span cycles of the view becoming detached and reattached from a window.
+ */
+fun View.findViewTreeLifecycleOwner(): LifecycleOwner? = ViewTreeLifecycleOwner.get(this)
\ No newline at end of file
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaControllerCompatCallbackTest.java b/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaControllerCompatCallbackTest.java
index d1d7209..ec09a80 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaControllerCompatCallbackTest.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaControllerCompatCallbackTest.java
@@ -69,6 +69,7 @@
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.media.AudioManager;
+import android.media.session.MediaSession;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
@@ -665,6 +666,37 @@
 
     @Test
     @SmallTest
+    @SdkSuppress(minSdkVersion = 21)
+    public void testOnSessionReadyCalled_fwkMediaSession() throws Exception {
+        mController = null;
+        final MediaSession session = new MediaSession(getInstrumentation().getTargetContext(),
+                "TestFwkSession");
+        final SessionReadyCallback callback = new SessionReadyCallback();
+        synchronized (callback.mWaitLock) {
+            getInstrumentation().runOnMainSync(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        // No extra binder exists in API 19. (i.e. session is always ready.)
+                        // onSessionReady() should be posted by registerCallback().
+                        MediaSession.Token fwkToken = session.getSessionToken();
+                        mController = new MediaControllerCompat(
+                                getInstrumentation().getTargetContext(),
+                                MediaSessionCompat.Token.fromToken(fwkToken));
+                        mController.registerCallback(callback, new Handler());
+                    } catch (Exception e) {
+                        fail();
+                    }
+                }
+            });
+            callback.mWaitLock.wait(TIME_OUT_MS);
+            assertFalse(mController.isSessionReady());
+            assertFalse(callback.mOnSessionReadyCalled);
+        }
+    }
+
+    @Test
+    @SmallTest
     public void testReceivingParcelables() throws Exception {
         Bundle arguments = new Bundle();
         arguments.putString("event", TEST_SESSION_EVENT);
diff --git a/media2/session/src/androidTest/java/androidx/media2/session/MediaController_FrameworkMediaSessionTest.java b/media2/session/src/androidTest/java/androidx/media2/session/MediaController_FrameworkMediaSessionTest.java
new file mode 100644
index 0000000..7ce0069
--- /dev/null
+++ b/media2/session/src/androidTest/java/androidx/media2/session/MediaController_FrameworkMediaSessionTest.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.media2.session;
+
+import static org.junit.Assert.assertTrue;
+
+import android.media.session.PlaybackState;
+import android.os.Build;
+import android.support.v4.media.session.MediaSessionCompat;
+
+import androidx.annotation.NonNull;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.LargeTest;
+import androidx.test.filters.SdkSuppress;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Tests {@link MediaController} with framework MediaSession.
+ */
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
+@RunWith(AndroidJUnit4.class)
+@LargeTest
+public class MediaController_FrameworkMediaSessionTest extends MediaSessionTestBase {
+    private static final String TAG = "MediaController_FrameworkMediaSessionTest";
+
+    private android.media.session.MediaSession mFwkSession;
+
+    @Before
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        mFwkSession = new android.media.session.MediaSession(mContext, TAG);
+        mFwkSession.setActive(true);
+        mFwkSession.setFlags(android.media.session.MediaSession.FLAG_HANDLES_MEDIA_BUTTONS
+                | android.media.session.MediaSession.FLAG_HANDLES_MEDIA_BUTTONS);
+        mFwkSession.setCallback(new android.media.session.MediaSession.Callback() {});
+    }
+
+    @After
+    @Override
+    public void cleanUp() throws Exception {
+        super.cleanUp();
+        mFwkSession.release();
+    }
+
+    @Test
+    public void testConnect() throws Exception {
+        CountDownLatch connectedLatch = new CountDownLatch(1);
+        MediaController.ControllerCallback callback = new MediaController.ControllerCallback() {
+            @Override
+            public void onConnected(@NonNull MediaController controller,
+                    @NonNull SessionCommandGroup allowedCommands) {
+                connectedLatch.countDown();
+            }
+        };
+        try (MediaController controller = new MediaController.Builder(mContext)
+                .setSessionCompatToken(
+                        MediaSessionCompat.Token.fromToken(mFwkSession.getSessionToken()))
+                .setControllerCallback(sHandlerExecutor, callback)
+                .build()) {
+            assertTrue(connectedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+        }
+    }
+
+    @Test
+    public void testPlayerStateChanged() throws Exception {
+        CountDownLatch connectedLatch = new CountDownLatch(1);
+        CountDownLatch playerStateChangedLatch = new CountDownLatch(1);
+        MediaController.ControllerCallback callback = new MediaController.ControllerCallback() {
+            @Override
+            public void onConnected(@NonNull MediaController controller,
+                    @NonNull SessionCommandGroup allowedCommands) {
+                connectedLatch.countDown();
+            }
+
+            @Override
+            public void onPlayerStateChanged(@NonNull MediaController controller, int state) {
+                playerStateChangedLatch.countDown();
+            }
+        };
+        try (MediaController controller = new MediaController.Builder(mContext)
+                .setSessionCompatToken(
+                        MediaSessionCompat.Token.fromToken(mFwkSession.getSessionToken()))
+                .setControllerCallback(sHandlerExecutor, callback)
+                .build()) {
+            assertTrue(connectedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+            mFwkSession.setPlaybackState(new PlaybackState.Builder()
+                    .setState(PlaybackState.STATE_PLAYING, 0, 1.0f)
+                    .build());
+            assertTrue(playerStateChangedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+        }
+    }
+}
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java b/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java
index 365267c..ad3e9d1 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaControllerImplLegacy.java
@@ -106,7 +106,7 @@
     MediaBrowserCompat mBrowserCompat;
     @GuardedBy("mLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
-    boolean mIsReleased;
+    boolean mClosed;
     @GuardedBy("mLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     List<MediaItem> mPlaylist;
@@ -153,7 +153,8 @@
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     MediaControllerCompat mControllerCompat;
     @GuardedBy("mLock")
-    private ControllerCompatCallback mControllerCompatCallback;
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
+    ControllerCompatCallback mControllerCompatCallback;
     @GuardedBy("mLock")
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     PlaybackStateCompat mPlaybackStateCompat;
@@ -161,10 +162,9 @@
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     MediaMetadataCompat mMediaMetadataCompat;
 
-    // Assignment should be used with the lock hold, but should be used without a lock to prevent
-    // potential deadlock.
     @GuardedBy("mLock")
-    private volatile boolean mConnected;
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
+    boolean mConnected;
 
     MediaControllerImplLegacy(@NonNull Context context, @NonNull MediaController instance,
             @NonNull SessionToken token) {
@@ -188,10 +188,10 @@
     @Override
     public void close() {
         if (DEBUG) {
-            Log.d(TAG, "release from " + mToken);
+            Log.d(TAG, "close from " + mToken);
         }
         synchronized (mLock) {
-            if (mIsReleased) {
+            if (mClosed) {
                 // Prevent re-enterance from the ControllerCallback.onDisconnected()
                 return;
             }
@@ -203,7 +203,7 @@
                 mHandlerThread.quit();
             }
 
-            mIsReleased = true;
+            mClosed = true;
 
             if (mBrowserCompat != null) {
                 mBrowserCompat.disconnect();
@@ -870,7 +870,7 @@
         final List<CommandButton> customLayout;
 
         synchronized (mLock) {
-            if (mIsReleased || mConnected) {
+            if (mClosed || mConnected) {
                 return;
             }
             mPlaybackStateCompat = mControllerCompat.getPlaybackState();
@@ -930,6 +930,8 @@
             mControllerCompatCallback = new ControllerCompatCallback();
             mControllerCompat.registerCallback(mControllerCompatCallback, mHandler);
         }
+        // MediaControllerCompat is available to use immediately after it's created.
+        onConnectedNotLocked();
     }
 
     private void connectToService() {
@@ -1038,7 +1040,26 @@
 
         @Override
         public void onSessionReady() {
-            onConnectedNotLocked();
+            boolean connected;
+            synchronized (mLock) {
+                connected = mConnected;
+            }
+            if (connected) {
+                PlaybackStateCompat state;
+                int shuffleMode;
+                int repeatMode;
+                boolean isCaptioningEnabled;
+                synchronized (mLock) {
+                    state = mControllerCompat.getPlaybackState();
+                    shuffleMode = mControllerCompat.getShuffleMode();
+                    repeatMode = mControllerCompat.getRepeatMode();
+                    isCaptioningEnabled = mControllerCompat.isCaptioningEnabled();
+                }
+                onPlaybackStateChanged(state);
+                onShuffleModeChanged(shuffleMode);
+                onRepeatModeChanged(repeatMode);
+                onCaptioningEnabledChanged(isCaptioningEnabled);
+            }
         }
 
         @Override
@@ -1049,7 +1070,7 @@
         @Override
         public void onSessionEvent(final String event, final Bundle extras) {
             synchronized (mLock) {
-                if (mIsReleased) {
+                if (mClosed || !mConnected) {
                     return;
                 }
             }
@@ -1072,7 +1093,7 @@
             final SessionCommandGroup prevAllowedCommands;
             final SessionCommandGroup currentAllowedCommands;
             synchronized (mLock) {
-                if (mIsReleased) {
+                if (mClosed || !mConnected) {
                     return;
                 }
                 prevItem = mCurrentMediaItem;
@@ -1208,7 +1229,7 @@
             final MediaItem prevItem;
             final MediaItem currentItem;
             synchronized (mLock) {
-                if (mIsReleased) {
+                if (mClosed || !mConnected) {
                     return;
                 }
                 prevItem = mCurrentMediaItem;
@@ -1230,7 +1251,7 @@
             final List<MediaItem> playlist;
             final MediaMetadata playlistMetadata;
             synchronized (mLock) {
-                if (mIsReleased) {
+                if (mClosed || !mConnected) {
                     return;
                 }
                 mQueue = MediaUtils.removeNullElements(queue);
@@ -1258,7 +1279,7 @@
         public void onQueueTitleChanged(CharSequence title) {
             final MediaMetadata playlistMetadata;
             synchronized (mLock) {
-                if (mIsReleased) {
+                if (mClosed || !mConnected) {
                     return;
                 }
                 mPlaylistMetadata = MediaUtils.convertToMediaMetadata(title);
@@ -1275,7 +1296,7 @@
         @Override
         public void onExtrasChanged(final Bundle extras) {
             synchronized (mLock) {
-                if (mIsReleased) {
+                if (mClosed || !mConnected) {
                     return;
                 }
             }
@@ -1291,7 +1312,7 @@
         @Override
         public void onAudioInfoChanged(final MediaControllerCompat.PlaybackInfo info) {
             synchronized (mLock) {
-                if (mIsReleased) {
+                if (mClosed || !mConnected) {
                     return;
                 }
             }
@@ -1306,7 +1327,7 @@
         @Override
         public void onCaptioningEnabledChanged(final boolean enabled) {
             synchronized (mLock) {
-                if (mIsReleased) {
+                if (mClosed || !mConnected) {
                     return;
                 }
             }
@@ -1324,7 +1345,7 @@
         @Override
         public void onRepeatModeChanged(@PlaybackStateCompat.RepeatMode final int repeatMode) {
             synchronized (mLock) {
-                if (mIsReleased) {
+                if (mClosed || !mConnected) {
                     return;
                 }
                 mRepeatMode = repeatMode;
@@ -1340,7 +1361,7 @@
         @Override
         public void onShuffleModeChanged(@PlaybackStateCompat.ShuffleMode final int shuffleMode) {
             synchronized (mLock) {
-                if (mIsReleased) {
+                if (mClosed || !mConnected) {
                     return;
                 }
                 mShuffleMode = shuffleMode;
diff --git a/navigation/navigation-dynamic-features-activity/src/main/java/androidx/navigation/dynamicfeatures/activity/DynamicActivityNavigator.kt b/navigation/navigation-dynamic-features-activity/src/main/java/androidx/navigation/dynamicfeatures/activity/DynamicActivityNavigator.kt
index 3118532..ae90941 100644
--- a/navigation/navigation-dynamic-features-activity/src/main/java/androidx/navigation/dynamicfeatures/activity/DynamicActivityNavigator.kt
+++ b/navigation/navigation-dynamic-features-activity/src/main/java/androidx/navigation/dynamicfeatures/activity/DynamicActivityNavigator.kt
@@ -59,9 +59,7 @@
         )
     }
 
-    override fun createDestination(): Destination {
-        return Destination(this)
-    }
+    override fun createDestination() = Destination(this)
 
     /**
      * Destination for [DynamicActivityNavigator].
diff --git a/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicIncludeGraphNavigator.kt b/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicIncludeGraphNavigator.kt
index 2f01dc9..efa4d9b 100644
--- a/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicIncludeGraphNavigator.kt
+++ b/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicIncludeGraphNavigator.kt
@@ -89,9 +89,7 @@
         }
     }
 
-    override fun popBackStack(): Boolean {
-        return true
-    }
+    override fun popBackStack() = true
 
     /**
      * The graph for dynamic-include.
diff --git a/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicInstallMonitor.kt b/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicInstallMonitor.kt
index 9aff5b5..e912d75 100644
--- a/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicInstallMonitor.kt
+++ b/navigation/navigation-dynamic-features-core/src/main/java/androidx/navigation/dynamicfeatures/DynamicInstallMonitor.kt
@@ -53,7 +53,7 @@
      *
      * @return `true` if installation is required, `false` otherwise.
      */
-    var isInstallRequired: Boolean = false
+    var isInstallRequired = false
         internal set(installRequired) {
             field = installRequired
             if (installRequired) {
@@ -64,7 +64,7 @@
     /**
      * The session id from Play Core for this installation session.
      */
-    var sessionId: Int = 0
+    var sessionId = 0
         internal set
 
     /**
@@ -78,7 +78,7 @@
      * @hide
      */
     @get:RestrictTo(RestrictTo.Scope.LIBRARY)
-    internal var isUsed: Boolean = false
+    internal var isUsed = false
         private set
 
     /**
diff --git a/navigation/navigation-dynamic-features-core/src/test/java/androidx/navigation/dynamicfeatures/DynamicNavGraphTest.kt b/navigation/navigation-dynamic-features-core/src/test/java/androidx/navigation/dynamicfeatures/DynamicNavGraphTest.kt
index c88efd8..49c09c3 100644
--- a/navigation/navigation-dynamic-features-core/src/test/java/androidx/navigation/dynamicfeatures/DynamicNavGraphTest.kt
+++ b/navigation/navigation-dynamic-features-core/src/test/java/androidx/navigation/dynamicfeatures/DynamicNavGraphTest.kt
@@ -64,7 +64,7 @@
         assertNotNull(progressDestination)
         progressDestination?.let {
             DynamicNavGraph.getOrThrow(progressDestination)
-            // Assert not having thrown an exception
+            // Assume not having thrown an exception
         }
     }
 
diff --git a/navigation/navigation-dynamic-features-fragment/api/2.3.0-alpha01.txt b/navigation/navigation-dynamic-features-fragment/api/2.3.0-alpha01.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/2.3.0-alpha01.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/2.3.0-alpha01.txt
@@ -3,6 +3,7 @@
 
   @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
     ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
   }
 
   public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/api/current.txt b/navigation/navigation-dynamic-features-fragment/api/current.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/current.txt
@@ -3,6 +3,7 @@
 
   @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
     ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
   }
 
   public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.3.0-alpha01.txt b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.3.0-alpha01.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.3.0-alpha01.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.3.0-alpha01.txt
@@ -3,6 +3,7 @@
 
   @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
     ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
   }
 
   public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
@@ -3,6 +3,7 @@
 
   @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
     ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
   }
 
   public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/api/restricted_2.3.0-alpha01.txt b/navigation/navigation-dynamic-features-fragment/api/restricted_2.3.0-alpha01.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/restricted_2.3.0-alpha01.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/restricted_2.3.0-alpha01.txt
@@ -3,6 +3,7 @@
 
   @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
     ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
   }
 
   public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt b/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
index 5b74f5c..59c04b0 100644
--- a/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
@@ -3,6 +3,7 @@
 
   @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
     ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
   }
 
   public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
diff --git a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicFragmentNavigator.kt b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicFragmentNavigator.kt
index 3da53c5..504c437 100644
--- a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicFragmentNavigator.kt
+++ b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicFragmentNavigator.kt
@@ -30,7 +30,7 @@
 import androidx.navigation.fragment.FragmentNavigator
 
 /**
- * Dynamic feature navigator for Fragment destinations.
+ * The [Navigator] that enables navigating to destinations within dynamic feature modules.
  */
 @Navigator.Name("fragment")
 class DynamicFragmentNavigator(
@@ -40,9 +40,7 @@
     private val installManager: DynamicInstallManager
 ) : FragmentNavigator(context, manager, containerId) {
 
-    override fun createDestination(): FragmentNavigator.Destination {
-        return Destination(this)
-    }
+    override fun createDestination() = Destination(this)
 
     override fun navigate(
         destination: FragmentNavigator.Destination,
diff --git a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicNavHostFragment.kt b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicNavHostFragment.kt
index 632fa30..0f82016 100644
--- a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicNavHostFragment.kt
+++ b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/DynamicNavHostFragment.kt
@@ -63,7 +63,6 @@
     /**
      * Create a new [SplitInstallManager].
      */
-    protected open fun createSplitInstallManager(): SplitInstallManager {
-        return SplitInstallManagerFactory.create(requireContext())
-    }
+    protected open fun createSplitInstallManager(): SplitInstallManager =
+        SplitInstallManagerFactory.create(requireContext())
 }
diff --git a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt
index 3eae15f..d7be2e2 100644
--- a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt
+++ b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt
@@ -34,13 +34,13 @@
 import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus
 
 /**
- * The base class for fragments that handle dynamic feature installation.
+ * The base class for [Fragment]s that handle dynamic feature installation.
  *
- * When extending from this class, you are responsible for updating the UI in
- * [onCancelled], [onFailed], [onProgress].
+ * When extending from this class, you are responsible for forwarding installation state changes
+ * to your UI via the provided hooks in [onCancelled], [onFailed], [onProgress].
  *
- * The installation process is handled automatically and navigation will happen
- * once the install is completed.
+ * The installation process itself is handled within the [AbstractProgressFragment] itself.
+ * Navigation to the target destination will occur once the installation is completed.
  */
 abstract class AbstractProgressFragment : Fragment {
 
@@ -117,7 +117,6 @@
     private inner class StateObserver constructor(private val monitor: DynamicInstallMonitor) :
         Observer<SplitInstallSessionState> {
 
-        @Suppress("DEPRECATION")
         override fun onChanged(sessionState: SplitInstallSessionState?) {
             if (sessionState != null) {
                 if (sessionState.hasTerminalStatus()) {
@@ -129,6 +128,8 @@
                         navigate()
                     }
                     SplitInstallSessionStatus.REQUIRES_USER_CONFIRMATION -> try {
+                        @Suppress("DEPRECATION")
+                        // TODO replace once PlayCore ships with code landed in b/145276704.
                         startIntentSenderForResult(
                             sessionState.resolutionIntent().intentSender,
                             INSTALL_REQUEST_CODE, null, 0, 0, 0, null
diff --git a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragment.kt b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragment.kt
index d51252f..9e74639 100644
--- a/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragment.kt
+++ b/navigation/navigation-dynamic-features-fragment/src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragment.kt
@@ -27,7 +27,12 @@
 import com.google.android.play.core.splitinstall.model.SplitInstallErrorCode
 
 /**
- * The default fragment to display during installation progress.
+ * The default [androidx.fragment.app.Fragment] to display during installation progress.
+ *
+ * This `Fragment` provides a default UI and handles split install state changes so you don't
+ * have to deal with this.
+ *
+ * To create a custom progress fragment, extend [AbstractProgressFragment].
  */
 class DefaultProgressFragment :
     AbstractProgressFragment(R.layout.dynamic_feature_install_fragment) {
diff --git a/navigation/navigation-ui/src/main/res/anim/nav_default_enter_anim.xml b/navigation/navigation-ui/src/main/res/anim/nav_default_enter_anim.xml
index 63a9894..028f445 100644
--- a/navigation/navigation-ui/src/main/res/anim/nav_default_enter_anim.xml
+++ b/navigation/navigation-ui/src/main/res/anim/nav_default_enter_anim.xml
@@ -17,7 +17,7 @@
 
 <set xmlns:android="http://schemas.android.com/apk/res/android">
     <alpha
-        android:interpolator="@android:anim/decelerate_interpolator"
+        android:interpolator="@android:anim/linear_interpolator"
         android:duration="@integer/config_navAnimTime"
         android:fromAlpha="0.0"
         android:toAlpha="1.0"/>
diff --git a/navigation/navigation-ui/src/main/res/anim/nav_default_exit_anim.xml b/navigation/navigation-ui/src/main/res/anim/nav_default_exit_anim.xml
index 0031439..9d73716 100644
--- a/navigation/navigation-ui/src/main/res/anim/nav_default_exit_anim.xml
+++ b/navigation/navigation-ui/src/main/res/anim/nav_default_exit_anim.xml
@@ -17,7 +17,7 @@
 
 <set xmlns:android="http://schemas.android.com/apk/res/android">
     <alpha
-        android:interpolator="@android:anim/accelerate_interpolator"
+        android:interpolator="@android:anim/linear_interpolator"
         android:duration="@integer/config_navAnimTime"
         android:fromAlpha="1.0"
         android:toAlpha="0.0"/>
diff --git a/navigation/navigation-ui/src/main/res/anim/nav_default_pop_enter_anim.xml b/navigation/navigation-ui/src/main/res/anim/nav_default_pop_enter_anim.xml
index 63a9894..028f445 100644
--- a/navigation/navigation-ui/src/main/res/anim/nav_default_pop_enter_anim.xml
+++ b/navigation/navigation-ui/src/main/res/anim/nav_default_pop_enter_anim.xml
@@ -17,7 +17,7 @@
 
 <set xmlns:android="http://schemas.android.com/apk/res/android">
     <alpha
-        android:interpolator="@android:anim/decelerate_interpolator"
+        android:interpolator="@android:anim/linear_interpolator"
         android:duration="@integer/config_navAnimTime"
         android:fromAlpha="0.0"
         android:toAlpha="1.0"/>
diff --git a/navigation/navigation-ui/src/main/res/anim/nav_default_pop_exit_anim.xml b/navigation/navigation-ui/src/main/res/anim/nav_default_pop_exit_anim.xml
index 0031439..9d73716 100644
--- a/navigation/navigation-ui/src/main/res/anim/nav_default_pop_exit_anim.xml
+++ b/navigation/navigation-ui/src/main/res/anim/nav_default_pop_exit_anim.xml
@@ -17,7 +17,7 @@
 
 <set xmlns:android="http://schemas.android.com/apk/res/android">
     <alpha
-        android:interpolator="@android:anim/accelerate_interpolator"
+        android:interpolator="@android:anim/linear_interpolator"
         android:duration="@integer/config_navAnimTime"
         android:fromAlpha="1.0"
         android:toAlpha="0.0"/>
diff --git a/navigation/navigation-ui/src/main/res/values/integers.xml b/navigation/navigation-ui/src/main/res/values/integers.xml
index bf6b9c8..5fcd113 100644
--- a/navigation/navigation-ui/src/main/res/values/integers.xml
+++ b/navigation/navigation-ui/src/main/res/values/integers.xml
@@ -16,5 +16,5 @@
   -->
 
 <resources>
-    <integer name="config_navAnimTime">500</integer>
+    <integer name="config_navAnimTime">150</integer>
 </resources>
diff --git a/paging/common/src/main/kotlin/androidx/paging/PageEvent.kt b/paging/common/src/main/kotlin/androidx/paging/PageEvent.kt
index b882d98..74ae229 100644
--- a/paging/common/src/main/kotlin/androidx/paging/PageEvent.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/PageEvent.kt
@@ -16,23 +16,27 @@
 
 package androidx.paging
 
+import androidx.paging.LoadType.END
+import androidx.paging.LoadType.REFRESH
+import androidx.paging.LoadType.START
+
 /**
  * Events in the stream from paging fetch logic to UI.
  *
  * Every event sent to the UI is a PageEvent, and will be processed atomically.
  */
 internal sealed class PageEvent<T : Any> {
-    data class Insert<T : Any>(
+    data class Insert<T : Any> private constructor(
         val loadType: LoadType,
         val pages: List<TransformablePage<T>>,
         val placeholdersStart: Int,
         val placeholdersEnd: Int
     ) : PageEvent<T>() {
         init {
-            require(placeholdersStart >= 0) {
+            require(loadType == END || placeholdersStart >= 0) {
                 "Invalid placeholdersBefore $placeholdersStart"
             }
-            require(placeholdersEnd >= 0) {
+            require(loadType == START || placeholdersEnd >= 0) {
                 "Invalid placeholdersAfter $placeholdersEnd"
             }
         }
@@ -89,6 +93,24 @@
                 originalIndices = originalIndices
             )
         }
+
+        companion object {
+            fun <T : Any> Refresh(
+                pages: List<TransformablePage<T>>,
+                placeholdersStart: Int,
+                placeholdersEnd: Int
+            ) = Insert(REFRESH, pages, placeholdersStart, placeholdersEnd)
+
+            fun <T : Any> Start(
+                pages: List<TransformablePage<T>>,
+                placeholdersStart: Int
+            ) = Insert(START, pages, placeholdersStart, -1)
+
+            fun <T : Any> End(
+                pages: List<TransformablePage<T>>,
+                placeholdersEnd: Int
+            ) = Insert(END, pages, -1, placeholdersEnd)
+        }
     }
 
     data class Drop<T : Any>(
@@ -97,7 +119,7 @@
         val placeholdersRemaining: Int
     ) : PageEvent<T>() {
         init {
-            require(loadType != LoadType.REFRESH) { "Drop must be START or END" }
+            require(loadType != REFRESH) { "Drop must be START or END" }
             require(count >= 0) { "Invalid count $count" }
             require(placeholdersRemaining >= 0) {
                 "Invalid placeholdersRemaining $placeholdersRemaining"
diff --git a/paging/common/src/test/kotlin/androidx/paging/PageEventTest.kt b/paging/common/src/test/kotlin/androidx/paging/PageEventTest.kt
index cda5d22..c4938a0 100644
--- a/paging/common/src/test/kotlin/androidx/paging/PageEventTest.kt
+++ b/paging/common/src/test/kotlin/androidx/paging/PageEventTest.kt
@@ -16,7 +16,6 @@
 
 package androidx.paging
 
-import androidx.paging.LoadType.END
 import androidx.paging.LoadType.REFRESH
 import androidx.paging.LoadType.START
 import org.junit.Test
@@ -37,16 +36,14 @@
     @Test
     fun placeholdersException() {
         assertFailsWith<IllegalArgumentException> {
-            PageEvent.Insert<Char>(
-                loadType = REFRESH,
+            PageEvent.Insert.Refresh<Char>(
                 pages = listOf(),
                 placeholdersStart = 1,
                 placeholdersEnd = -1
             )
         }
         assertFailsWith<IllegalArgumentException> {
-            PageEvent.Insert<Char>(
-                loadType = REFRESH,
+            PageEvent.Insert.Refresh<Char>(
                 pages = listOf(),
                 placeholdersStart = -1,
                 placeholdersEnd = 1
@@ -114,17 +111,13 @@
 
     @Test
     fun insertMap() {
-        val insert = PageEvent.Insert(
-            loadType = END,
+        val insert = PageEvent.Insert.End(
             pages = listOf(TransformablePage(listOf('a', 'b'))),
-            placeholdersStart = 2,
             placeholdersEnd = 4
         )
         assertEquals(
-            PageEvent.Insert(
-                loadType = END,
+            PageEvent.Insert.End(
                 pages = listOf(TransformablePage(listOf("a", "b"))),
-                placeholdersStart = 2,
                 placeholdersEnd = 4
             ),
             insert.map { it.toString() }
@@ -139,26 +132,22 @@
     @Test
     fun insertMapTransformed() {
         assertEquals(
-            PageEvent.Insert(
-                loadType = END,
+            PageEvent.Insert.End(
                 pages = listOf(TransformablePage(
                     originalPageOffset = 0,
                     data = listOf("a", "b"),
                     sourcePageSize = 4,
                     originalIndices = listOf(0, 2)
                 )),
-                placeholdersStart = 2,
                 placeholdersEnd = 4
             ),
-            PageEvent.Insert(
-                loadType = END,
+            PageEvent.Insert.End(
                 pages = listOf(TransformablePage(
                     originalPageOffset = 0,
                     data = listOf('a', 'b'),
                     sourcePageSize = 4,
                     originalIndices = listOf(0, 2)
                 )),
-                placeholdersStart = 2,
                 placeholdersEnd = 4
             ).map { it.toString() }
         )
@@ -166,18 +155,15 @@
 
     @Test
     fun insertFilter() {
-        val insert = PageEvent.Insert(
-            loadType = END,
+        val insert = PageEvent.Insert.End(
             pages = listOf(TransformablePage(listOf('a', 'b', 'c', 'd'))),
-            placeholdersStart = 2,
             placeholdersEnd = 4
         )
 
         // filter out C
         val insertNoC = insert.filter { it != 'c' }
         assertEquals(
-            PageEvent.Insert(
-                loadType = END,
+            PageEvent.Insert.End(
                 pages = listOf(
                     TransformablePage(
                         originalPageOffset = 0,
@@ -186,7 +172,6 @@
                         originalIndices = listOf(0, 1, 3)
                     )
                 ),
-                placeholdersStart = 2,
                 placeholdersEnd = 4
             ),
             insertNoC
@@ -194,8 +179,7 @@
 
         // now filter out A, to validate filtration when lookup present
         assertEquals(
-            PageEvent.Insert(
-                loadType = END,
+            PageEvent.Insert.End(
                 pages = listOf(
                     TransformablePage(
                         originalPageOffset = 0,
@@ -204,7 +188,6 @@
                         originalIndices = listOf(1, 3)
                     )
                 ),
-                placeholdersStart = 2,
                 placeholdersEnd = 4
             ),
             insertNoC.filter { it != 'a' }
@@ -213,10 +196,8 @@
 
     @Test
     fun insertFlatMap() {
-        val insert = PageEvent.Insert(
-            loadType = END,
+        val insert = PageEvent.Insert.End(
             pages = listOf(TransformablePage(listOf('a', 'b'))),
-            placeholdersStart = 2,
             placeholdersEnd = 4
         )
 
@@ -225,8 +206,7 @@
         }
 
         assertEquals(
-            PageEvent.Insert(
-                loadType = END,
+            PageEvent.Insert.End(
                 pages = listOf(
                     TransformablePage(
                         originalPageOffset = 0,
@@ -235,7 +215,6 @@
                         originalIndices = listOf(0, 0, 1, 1)
                     )
                 ),
-                placeholdersStart = 2,
                 placeholdersEnd = 4
             ),
             flatMapped
@@ -246,8 +225,7 @@
         }
 
         assertEquals(
-            PageEvent.Insert(
-                loadType = END,
+            PageEvent.Insert.End(
                 pages = listOf(
                     TransformablePage(
                         originalPageOffset = 0,
@@ -256,7 +234,6 @@
                         originalIndices = listOf(0, 0, 0, 0, 1, 1, 1, 1)
                     )
                 ),
-                placeholdersStart = 2,
                 placeholdersEnd = 4
             ),
             flatMappedAgain
diff --git a/paging/common/src/test/kotlin/androidx/paging/PagingStateTest.kt b/paging/common/src/test/kotlin/androidx/paging/PagingStateTest.kt
index 75ec03f..63b01c1e 100644
--- a/paging/common/src/test/kotlin/androidx/paging/PagingStateTest.kt
+++ b/paging/common/src/test/kotlin/androidx/paging/PagingStateTest.kt
@@ -29,8 +29,7 @@
     placeholdersEnd: Int = 0,
     indexOfInitialPage: Int = 0
 ) = processEvent(
-    PageEvent.Insert(
-        loadType = LoadType.REFRESH,
+    PageEvent.Insert.Refresh(
         pages = listOfTransformablePages(pages, indexOfInitialPage),
         placeholdersStart = placeholdersStart,
         placeholdersEnd = placeholdersEnd
@@ -42,19 +41,31 @@
     page: List<T>,
     originalPageOffset: Int,
     placeholdersRemaining: Int
-) = processEvent(
-    PageEvent.Insert(
-        loadType = if (isPrepend) LoadType.START else LoadType.END,
-        pages = listOf(
-            TransformablePage(
-                originalPageOffset = originalPageOffset,
-                data = page
-            )
-        ),
-        placeholdersStart = if (isPrepend) placeholdersRemaining else 0,
-        placeholdersEnd = if (isPrepend) 0 else placeholdersRemaining
+) = when (isPrepend) {
+    true -> processEvent(
+        PageEvent.Insert.Start(
+            pages = listOf(
+                TransformablePage(
+                    originalPageOffset = originalPageOffset,
+                    data = page
+                )
+            ),
+            placeholdersStart = placeholdersRemaining
+        )
     )
-)
+    false -> processEvent(
+        PageEvent.Insert.End(
+            pages = listOf(
+                TransformablePage(
+                    originalPageOffset = originalPageOffset,
+                    data = page
+                )
+            ),
+            placeholdersEnd = placeholdersRemaining
+        )
+    )
+}
+
 internal fun <T : Any> PagingState.Producer<T>.dropPages(
     isPrepend: Boolean,
     count: Int,
diff --git a/testutils/testutils-runtime/src/main/java/androidx/testutils/ActivityScenario.kt b/testutils/testutils-runtime/src/main/java/androidx/testutils/ActivityScenario.kt
index f87776a..989ad0a 100644
--- a/testutils/testutils-runtime/src/main/java/androidx/testutils/ActivityScenario.kt
+++ b/testutils/testutils-runtime/src/main/java/androidx/testutils/ActivityScenario.kt
@@ -26,8 +26,14 @@
     crossinline block: A.() -> T
 ): T {
     lateinit var value: T
+    var err: Throwable? = null
     onActivity { activity ->
-        value = block(activity)
+        try {
+            value = block(activity)
+        } catch (t: Throwable) {
+            err = t
+        }
     }
+    err?.let { throw it }
     return value
 }
diff --git a/ui/gradle.properties b/ui/gradle.properties
index 39f2467..9b15dee 100644
--- a/ui/gradle.properties
+++ b/ui/gradle.properties
@@ -1,4 +1,4 @@
-org.gradle.jvmargs=-Xmx8g -Dkotlin.compiler.execution.strategy="in-process"
+org.gradle.jvmargs=-Xmx8g
 org.gradle.daemon=true
 org.gradle.configureondemand=true
 org.gradle.parallel=true
@@ -6,9 +6,6 @@
 android.builder.sdkDownload=false
 android.useAndroidX=true
 android.enableAdditionalTestOutput=true
-// Disable incremental compilation explicitly because of https://youtrack.jetbrains.com/issue/KT-30492.
-// Anyhow, it is supported only in daemon mode.
-kotlin.incremental=false
 // Run multiple kotlin compilations in parallel within the same project.
 // See also https://github.com/JetBrains/kotlin/blob/1978db9d0e68a2ec29aded30a07e9c3c740c29f6/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt#L100 and https://blog.jetbrains.com/kotlin/2019/01/kotlin-1-3-20-released/
 kotlin.parallel.tasks.in.project=true
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt
index adaaecc..3381cfd 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt
@@ -35,8 +35,8 @@
 import androidx.ui.core.Dp
 import androidx.ui.core.dp
 import androidx.ui.layout.Container
+import androidx.ui.layout.LayoutPadding
 import androidx.ui.layout.Padding
-import androidx.ui.layout.Spacing
 import androidx.ui.test.ComposeTestCase
 import androidx.ui.test.ToggleableTestCase
 import org.junit.Rule
@@ -191,7 +191,7 @@
 
     @Composable
     override fun emitPaddedContainer(padding: Dp, child: @Composable() () -> Unit) {
-        Container(expanded = true, modifier = Spacing(padding), children = child)
+        Container(expanded = true, modifier = LayoutPadding(padding), children = child)
     }
 }
 
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt
index c84a1c9..30f87d6 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt
@@ -26,7 +26,7 @@
 import androidx.ui.benchmark.toggleStateBenchmarkMeasureLayout
 import androidx.ui.core.Placeable.PlacementScope.place
 import androidx.ui.layout.Container
-import androidx.ui.layout.Size
+import androidx.ui.layout.LayoutSize
 import androidx.ui.layout.Spacer
 import androidx.ui.test.ComposeTestCase
 import androidx.ui.test.ToggleableTestCase
@@ -67,7 +67,7 @@
         val size = +state { 200.dp }
         this.state = size
         Container(width = 300.dp, height = 300.dp) {
-            Spacer(Size(width = size.value, height = size.value))
+            Spacer(LayoutSize(width = size.value, height = size.value))
         }
     }
 
@@ -86,7 +86,7 @@
         this.state = size
         WithConstraints {
             Container(width = 300.dp, height = 300.dp) {
-                Spacer(Size(width = size.value, height = size.value))
+                Spacer(LayoutSize(width = size.value, height = size.value))
             }
         }
     }
diff --git a/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/NestedScrollerTestCase.kt b/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/NestedScrollerTestCase.kt
index cd8e9029..4f0aa48 100644
--- a/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/NestedScrollerTestCase.kt
+++ b/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/NestedScrollerTestCase.kt
@@ -30,8 +30,8 @@
 import androidx.ui.layout.Row
 import androidx.ui.foundation.ScrollerPosition
 import androidx.ui.foundation.VerticalScroller
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
 import androidx.ui.material.MaterialTheme
 import androidx.ui.material.surface.Surface
 import androidx.ui.test.ComposeTestCase
@@ -68,7 +68,7 @@
     fun SquareRow(useScrollerPosition: Boolean) {
         val playStoreColor = Color(red = 0x00, green = 0x00, blue = 0x80)
         val content = @Composable {
-            Row(ExpandedWidth) {
+            Row(LayoutExpandedWidth) {
                 repeat(6) {
                     WithDensity {
                         FlexColumn {
@@ -88,17 +88,17 @@
                                     text = "Some title",
                                     style = TextStyle(Color.Black, 60.px.toSp())
                                 )
-                                Row(ExpandedWidth) {
+                                Row(LayoutExpandedWidth) {
                                     Text(
                                         "3.5 ★",
                                         style = TextStyle(fontSize = 40.px.toSp()),
-                                        modifier = Gravity.Center
+                                        modifier = LayoutGravity.Center
                                     )
                                     ColoredRect(
                                         width = 40.px.toDp(),
                                         height = 40.px.toDp(),
                                         color = playStoreColor,
-                                        modifier = Gravity.Center
+                                        modifier = LayoutGravity.Center
                                     )
                                 }
                             }
diff --git a/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt b/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt
index de1288b..a7215b8 100644
--- a/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt
+++ b/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt
@@ -30,7 +30,7 @@
 import androidx.ui.foundation.VerticalScroller
 import androidx.ui.graphics.Paint
 import androidx.ui.graphics.PaintingStyle
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
 import androidx.ui.test.ComposeTestCase
 import androidx.ui.test.ToggleableTestCase
 
@@ -45,7 +45,7 @@
         VerticalScroller(
             scrollerPosition = scrollerPosition
         ) {
-            Column(ExpandedHeight) {
+            Column(LayoutExpandedHeight) {
                 for (green in 0..0xFF) {
                     ColorStripe(0xFF, green, 0)
                 }
diff --git a/ui/ui-android-text/src/androidTest/assets/sample_font.ttf b/ui/ui-android-text/src/androidTest/assets/sample_font.ttf
index 711c207..da7301a 100644
--- a/ui/ui-android-text/src/androidTest/assets/sample_font.ttf
+++ b/ui/ui-android-text/src/androidTest/assets/sample_font.ttf
Binary files differ
diff --git a/ui/ui-android-text/src/androidTest/assets/sample_font.ttx b/ui/ui-android-text/src/androidTest/assets/sample_font.ttx
index f97a6af0..95d0619 100644
--- a/ui/ui-android-text/src/androidTest/assets/sample_font.ttx
+++ b/ui/ui-android-text/src/androidTest/assets/sample_font.ttx
@@ -21,6 +21,7 @@
     <GlyphID id="2" name="1em_rtl"/>
     <GlyphID id="3" name="space"/>
     <GlyphID id="4" name="hyphen"/>
+    <GlyphID id="5" name="linefeed"/>
   </GlyphOrder>
 
   <head>
@@ -132,12 +133,14 @@
     <mtx name="1em_rtl" width="1000" lsb="0"/>
     <mtx name="space" width="1000" lsb="0"/>
     <mtx name="hyphen" width="1000" lsb="0"/>
+    <mtx name="linefeed" width="500" lsb="0"/>
   </hmtx>
 
   <cmap>
     <tableVersion version="0"/>
     <cmap_format_4 platformID="3" platEncID="10" language="0">
         <map code="0x0009" name="1em" /> <!-- TAB -->
+        <map code="0x000A" name="linefeed" /> <!-- LINEFEED -->
         <map code="0x0020" name="space" /> <!-- SPACE -->
         <map code="0x002C" name="1em" /> <!-- , -->
         <map code="0x002D" name="hyphen" /> <!-- - -->
@@ -267,6 +270,7 @@
         </contour>
         <instructions />
     </TTGlyph>
+    <TTGlyph name="linefeed" xMin="0" yMin="-200" xMax="0" yMax="800" />
   </glyf>
 
   <name>
@@ -311,4 +315,4 @@
     <maxMemType1 value="0"/>
   </post>
 
-</ttFont>
\ No newline at end of file
+</ttFont>
diff --git a/ui/ui-android-text/src/main/java/androidx/text/StaticLayoutFactory.kt b/ui/ui-android-text/src/main/java/androidx/text/StaticLayoutFactory.kt
index 58edc3a..8c767e2 100644
--- a/ui/ui-android-text/src/main/java/androidx/text/StaticLayoutFactory.kt
+++ b/ui/ui-android-text/src/main/java/androidx/text/StaticLayoutFactory.kt
@@ -88,7 +88,6 @@
         @JustificationMode
         justificationMode: Int = LayoutCompat.DEFAULT_JUSTIFICATION_MODE,
         includePadding: Boolean = LayoutCompat.DEFAULT_INCLUDE_PADDING,
-        @Suppress("UNUSED_PARAMETER")
         fallbackLineSpacing: Boolean = LayoutCompat.DEFAULT_FALLBACK_LINE_SPACING,
         @BreakStrategy
         breakStrategy: Int = LayoutCompat.DEFAULT_BREAK_STRATEGY,
@@ -118,7 +117,7 @@
                     }
                     setIncludePad(includePadding)
                     if (Build.VERSION.SDK_INT >= 28) {
-//                        setUseLineSpacingFromFallbacks(fallbackLineSpacing)
+                        setUseLineSpacingFromFallbacks(fallbackLineSpacing)
                     }
                     setBreakStrategy(breakStrategy)
                     setHyphenationFrequency(hyphenationFrequency)
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
index 588b5a5..63ca6e3 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
@@ -44,7 +44,7 @@
 import androidx.ui.layout.Padding
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Paint
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
 import androidx.ui.text.TextStyle
 import kotlin.math.roundToInt
 
@@ -59,7 +59,7 @@
 
     @Composable
     fun SpringBackExample() {
-        Column(ExpandedHeight) {
+        Column(LayoutExpandedHeight) {
             Padding(40.dp) {
                 Text("<== Scroll horizontally ==>", style = TextStyle(fontSize = 20.sp))
             }
diff --git a/ui/ui-core/api/0.1.0-dev04.txt b/ui/ui-core/api/0.1.0-dev04.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/0.1.0-dev04.txt
+++ b/ui/ui-core/api/0.1.0-dev04.txt
@@ -201,7 +201,7 @@
 
   public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
     ctor public Dp(float value);
-    method public inline operator int compareTo(androidx.ui.core.Dp other);
+    method public operator int compareTo(androidx.ui.core.Dp other);
     method public float component1();
     method public androidx.ui.core.Dp copy(float value);
     method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
 
   public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
     ctor public DpCubed();
-    method public inline operator int compareTo-zqpl1kg(float p);
-    method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+    method public operator int compareTo-zqpl1kg(float p);
+    method public static operator int compareTo-zqpl1kg(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
 
   public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
     ctor public DpInverse();
-    method public inline operator int compareTo-ASDJgtI(float p);
-    method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+    method public operator int compareTo-ASDJgtI(float p);
+    method public static operator int compareTo-ASDJgtI(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
 
   public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
     ctor public DpSquared();
-    method public inline operator int compareTo-KkBJKWw(float p);
-    method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+    method public operator int compareTo-KkBJKWw(float p);
+    method public static operator int compareTo-KkBJKWw(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
 
   public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
     ctor public IntPx(int value);
-    method public inline operator int compareTo(androidx.ui.core.IntPx other);
+    method public operator int compareTo(androidx.ui.core.IntPx other);
     method public inline operator int compareTo(androidx.ui.core.Px other);
     method public int component1();
     method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
   public interface Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+    method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+    method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
   }
 
   public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
   public static final class Modifier.None implements androidx.ui.core.Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
     field public static final androidx.ui.core.Modifier.None! INSTANCE;
   }
 
@@ -674,7 +674,7 @@
 
   public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
     ctor public Px(float value);
-    method public inline operator int compareTo(androidx.ui.core.Px other);
+    method public operator int compareTo(androidx.ui.core.Px other);
     method public inline operator int compareTo(androidx.ui.core.IntPx other);
     method public float component1();
     method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
 
   public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
     ctor public PxCubed();
-    method public inline operator int compareTo-syUR1PY(float p);
-    method public static inline operator int compareTo-syUR1PY(float $this, float other);
+    method public operator int compareTo-syUR1PY(float p);
+    method public static operator int compareTo-syUR1PY(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
 
   public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
     ctor public PxInverse();
-    method public inline operator int compareTo-MXEAIGs(float p);
-    method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+    method public operator int compareTo-MXEAIGs(float p);
+    method public static operator int compareTo-MXEAIGs(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
 
   public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
     ctor public PxSquared();
-    method public inline operator int compareTo-kVJEwbQ(float p);
-    method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+    method public operator int compareTo-kVJEwbQ(float p);
+    method public static operator int compareTo-kVJEwbQ(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/api/current.txt b/ui/ui-core/api/current.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/current.txt
+++ b/ui/ui-core/api/current.txt
@@ -201,7 +201,7 @@
 
   public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
     ctor public Dp(float value);
-    method public inline operator int compareTo(androidx.ui.core.Dp other);
+    method public operator int compareTo(androidx.ui.core.Dp other);
     method public float component1();
     method public androidx.ui.core.Dp copy(float value);
     method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
 
   public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
     ctor public DpCubed();
-    method public inline operator int compareTo-zqpl1kg(float p);
-    method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+    method public operator int compareTo-zqpl1kg(float p);
+    method public static operator int compareTo-zqpl1kg(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
 
   public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
     ctor public DpInverse();
-    method public inline operator int compareTo-ASDJgtI(float p);
-    method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+    method public operator int compareTo-ASDJgtI(float p);
+    method public static operator int compareTo-ASDJgtI(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
 
   public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
     ctor public DpSquared();
-    method public inline operator int compareTo-KkBJKWw(float p);
-    method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+    method public operator int compareTo-KkBJKWw(float p);
+    method public static operator int compareTo-KkBJKWw(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
 
   public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
     ctor public IntPx(int value);
-    method public inline operator int compareTo(androidx.ui.core.IntPx other);
+    method public operator int compareTo(androidx.ui.core.IntPx other);
     method public inline operator int compareTo(androidx.ui.core.Px other);
     method public int component1();
     method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
   public interface Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+    method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+    method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
   }
 
   public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
   public static final class Modifier.None implements androidx.ui.core.Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
     field public static final androidx.ui.core.Modifier.None! INSTANCE;
   }
 
@@ -674,7 +674,7 @@
 
   public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
     ctor public Px(float value);
-    method public inline operator int compareTo(androidx.ui.core.Px other);
+    method public operator int compareTo(androidx.ui.core.Px other);
     method public inline operator int compareTo(androidx.ui.core.IntPx other);
     method public float component1();
     method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
 
   public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
     ctor public PxCubed();
-    method public inline operator int compareTo-syUR1PY(float p);
-    method public static inline operator int compareTo-syUR1PY(float $this, float other);
+    method public operator int compareTo-syUR1PY(float p);
+    method public static operator int compareTo-syUR1PY(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
 
   public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
     ctor public PxInverse();
-    method public inline operator int compareTo-MXEAIGs(float p);
-    method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+    method public operator int compareTo-MXEAIGs(float p);
+    method public static operator int compareTo-MXEAIGs(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
 
   public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
     ctor public PxSquared();
-    method public inline operator int compareTo-kVJEwbQ(float p);
-    method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+    method public operator int compareTo-kVJEwbQ(float p);
+    method public static operator int compareTo-kVJEwbQ(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt b/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt
+++ b/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt
@@ -201,7 +201,7 @@
 
   public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
     ctor public Dp(float value);
-    method public inline operator int compareTo(androidx.ui.core.Dp other);
+    method public operator int compareTo(androidx.ui.core.Dp other);
     method public float component1();
     method public androidx.ui.core.Dp copy(float value);
     method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
 
   public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
     ctor public DpCubed();
-    method public inline operator int compareTo-zqpl1kg(float p);
-    method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+    method public operator int compareTo-zqpl1kg(float p);
+    method public static operator int compareTo-zqpl1kg(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
 
   public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
     ctor public DpInverse();
-    method public inline operator int compareTo-ASDJgtI(float p);
-    method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+    method public operator int compareTo-ASDJgtI(float p);
+    method public static operator int compareTo-ASDJgtI(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
 
   public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
     ctor public DpSquared();
-    method public inline operator int compareTo-KkBJKWw(float p);
-    method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+    method public operator int compareTo-KkBJKWw(float p);
+    method public static operator int compareTo-KkBJKWw(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
 
   public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
     ctor public IntPx(int value);
-    method public inline operator int compareTo(androidx.ui.core.IntPx other);
+    method public operator int compareTo(androidx.ui.core.IntPx other);
     method public inline operator int compareTo(androidx.ui.core.Px other);
     method public int component1();
     method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
   public interface Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+    method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+    method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
   }
 
   public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
   public static final class Modifier.None implements androidx.ui.core.Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
     field public static final androidx.ui.core.Modifier.None! INSTANCE;
   }
 
@@ -674,7 +674,7 @@
 
   public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
     ctor public Px(float value);
-    method public inline operator int compareTo(androidx.ui.core.Px other);
+    method public operator int compareTo(androidx.ui.core.Px other);
     method public inline operator int compareTo(androidx.ui.core.IntPx other);
     method public float component1();
     method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
 
   public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
     ctor public PxCubed();
-    method public inline operator int compareTo-syUR1PY(float p);
-    method public static inline operator int compareTo-syUR1PY(float $this, float other);
+    method public operator int compareTo-syUR1PY(float p);
+    method public static operator int compareTo-syUR1PY(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
 
   public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
     ctor public PxInverse();
-    method public inline operator int compareTo-MXEAIGs(float p);
-    method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+    method public operator int compareTo-MXEAIGs(float p);
+    method public static operator int compareTo-MXEAIGs(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
 
   public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
     ctor public PxSquared();
-    method public inline operator int compareTo-kVJEwbQ(float p);
-    method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+    method public operator int compareTo-kVJEwbQ(float p);
+    method public static operator int compareTo-kVJEwbQ(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/api/public_plus_experimental_current.txt b/ui/ui-core/api/public_plus_experimental_current.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-core/api/public_plus_experimental_current.txt
@@ -201,7 +201,7 @@
 
   public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
     ctor public Dp(float value);
-    method public inline operator int compareTo(androidx.ui.core.Dp other);
+    method public operator int compareTo(androidx.ui.core.Dp other);
     method public float component1();
     method public androidx.ui.core.Dp copy(float value);
     method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
 
   public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
     ctor public DpCubed();
-    method public inline operator int compareTo-zqpl1kg(float p);
-    method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+    method public operator int compareTo-zqpl1kg(float p);
+    method public static operator int compareTo-zqpl1kg(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
 
   public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
     ctor public DpInverse();
-    method public inline operator int compareTo-ASDJgtI(float p);
-    method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+    method public operator int compareTo-ASDJgtI(float p);
+    method public static operator int compareTo-ASDJgtI(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
 
   public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
     ctor public DpSquared();
-    method public inline operator int compareTo-KkBJKWw(float p);
-    method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+    method public operator int compareTo-KkBJKWw(float p);
+    method public static operator int compareTo-KkBJKWw(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
 
   public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
     ctor public IntPx(int value);
-    method public inline operator int compareTo(androidx.ui.core.IntPx other);
+    method public operator int compareTo(androidx.ui.core.IntPx other);
     method public inline operator int compareTo(androidx.ui.core.Px other);
     method public int component1();
     method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
   public interface Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+    method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+    method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
   }
 
   public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
   public static final class Modifier.None implements androidx.ui.core.Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
     field public static final androidx.ui.core.Modifier.None! INSTANCE;
   }
 
@@ -674,7 +674,7 @@
 
   public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
     ctor public Px(float value);
-    method public inline operator int compareTo(androidx.ui.core.Px other);
+    method public operator int compareTo(androidx.ui.core.Px other);
     method public inline operator int compareTo(androidx.ui.core.IntPx other);
     method public float component1();
     method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
 
   public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
     ctor public PxCubed();
-    method public inline operator int compareTo-syUR1PY(float p);
-    method public static inline operator int compareTo-syUR1PY(float $this, float other);
+    method public operator int compareTo-syUR1PY(float p);
+    method public static operator int compareTo-syUR1PY(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
 
   public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
     ctor public PxInverse();
-    method public inline operator int compareTo-MXEAIGs(float p);
-    method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+    method public operator int compareTo-MXEAIGs(float p);
+    method public static operator int compareTo-MXEAIGs(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
 
   public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
     ctor public PxSquared();
-    method public inline operator int compareTo-kVJEwbQ(float p);
-    method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+    method public operator int compareTo-kVJEwbQ(float p);
+    method public static operator int compareTo-kVJEwbQ(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/api/restricted_0.1.0-dev04.txt b/ui/ui-core/api/restricted_0.1.0-dev04.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/restricted_0.1.0-dev04.txt
+++ b/ui/ui-core/api/restricted_0.1.0-dev04.txt
@@ -201,7 +201,7 @@
 
   public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
     ctor public Dp(float value);
-    method public inline operator int compareTo(androidx.ui.core.Dp other);
+    method public operator int compareTo(androidx.ui.core.Dp other);
     method public float component1();
     method public androidx.ui.core.Dp copy(float value);
     method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
 
   public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
     ctor public DpCubed();
-    method public inline operator int compareTo-zqpl1kg(float p);
-    method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+    method public operator int compareTo-zqpl1kg(float p);
+    method public static operator int compareTo-zqpl1kg(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
 
   public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
     ctor public DpInverse();
-    method public inline operator int compareTo-ASDJgtI(float p);
-    method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+    method public operator int compareTo-ASDJgtI(float p);
+    method public static operator int compareTo-ASDJgtI(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
 
   public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
     ctor public DpSquared();
-    method public inline operator int compareTo-KkBJKWw(float p);
-    method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+    method public operator int compareTo-KkBJKWw(float p);
+    method public static operator int compareTo-KkBJKWw(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
 
   public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
     ctor public IntPx(int value);
-    method public inline operator int compareTo(androidx.ui.core.IntPx other);
+    method public operator int compareTo(androidx.ui.core.IntPx other);
     method public inline operator int compareTo(androidx.ui.core.Px other);
     method public int component1();
     method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
   public interface Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+    method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+    method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
   }
 
   public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
   public static final class Modifier.None implements androidx.ui.core.Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
     field public static final androidx.ui.core.Modifier.None! INSTANCE;
   }
 
@@ -674,7 +674,7 @@
 
   public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
     ctor public Px(float value);
-    method public inline operator int compareTo(androidx.ui.core.Px other);
+    method public operator int compareTo(androidx.ui.core.Px other);
     method public inline operator int compareTo(androidx.ui.core.IntPx other);
     method public float component1();
     method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
 
   public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
     ctor public PxCubed();
-    method public inline operator int compareTo-syUR1PY(float p);
-    method public static inline operator int compareTo-syUR1PY(float $this, float other);
+    method public operator int compareTo-syUR1PY(float p);
+    method public static operator int compareTo-syUR1PY(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
 
   public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
     ctor public PxInverse();
-    method public inline operator int compareTo-MXEAIGs(float p);
-    method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+    method public operator int compareTo-MXEAIGs(float p);
+    method public static operator int compareTo-MXEAIGs(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
 
   public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
     ctor public PxSquared();
-    method public inline operator int compareTo-kVJEwbQ(float p);
-    method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+    method public operator int compareTo-kVJEwbQ(float p);
+    method public static operator int compareTo-kVJEwbQ(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/api/restricted_current.txt b/ui/ui-core/api/restricted_current.txt
index 3390999..b39c0a1 100644
--- a/ui/ui-core/api/restricted_current.txt
+++ b/ui/ui-core/api/restricted_current.txt
@@ -201,7 +201,7 @@
 
   public final class Dp implements java.lang.Comparable<androidx.ui.core.Dp> {
     ctor public Dp(float value);
-    method public inline operator int compareTo(androidx.ui.core.Dp other);
+    method public operator int compareTo(androidx.ui.core.Dp other);
     method public float component1();
     method public androidx.ui.core.Dp copy(float value);
     method public inline operator androidx.ui.core.Dp div(float other);
@@ -228,8 +228,8 @@
 
   public final inline class DpCubed implements java.lang.Comparable<androidx.ui.core.DpCubed> {
     ctor public DpCubed();
-    method public inline operator int compareTo-zqpl1kg(float p);
-    method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+    method public operator int compareTo-zqpl1kg(float p);
+    method public static operator int compareTo-zqpl1kg(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -247,8 +247,8 @@
 
   public final inline class DpInverse implements java.lang.Comparable<androidx.ui.core.DpInverse> {
     ctor public DpInverse();
-    method public inline operator int compareTo-ASDJgtI(float p);
-    method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+    method public operator int compareTo-ASDJgtI(float p);
+    method public static operator int compareTo-ASDJgtI(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -298,8 +298,8 @@
 
   public final inline class DpSquared implements java.lang.Comparable<androidx.ui.core.DpSquared> {
     ctor public DpSquared();
-    method public inline operator int compareTo-KkBJKWw(float p);
-    method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+    method public operator int compareTo-KkBJKWw(float p);
+    method public static operator int compareTo-KkBJKWw(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-KkBJKWw(float $this, float other);
     method public static inline operator float div-impl(float $this, float other);
@@ -402,7 +402,7 @@
 
   public final class IntPx implements java.lang.Comparable<androidx.ui.core.IntPx> {
     ctor public IntPx(int value);
-    method public inline operator int compareTo(androidx.ui.core.IntPx other);
+    method public operator int compareTo(androidx.ui.core.IntPx other);
     method public inline operator int compareTo(androidx.ui.core.Px other);
     method public int component1();
     method public androidx.ui.core.IntPx copy(int value);
@@ -572,7 +572,8 @@
   public interface Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
+    method public default operator androidx.ui.core.Modifier plus(androidx.ui.core.Modifier other);
+    method @Deprecated public default infix androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
   }
 
   public static interface Modifier.Element extends androidx.ui.core.Modifier {
@@ -583,7 +584,6 @@
   public static final class Modifier.None implements androidx.ui.core.Modifier {
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
-    method public androidx.ui.core.Modifier wraps(androidx.ui.core.Modifier other);
     field public static final androidx.ui.core.Modifier.None! INSTANCE;
   }
 
@@ -674,7 +674,7 @@
 
   public final class Px implements java.lang.Comparable<androidx.ui.core.Px> {
     ctor public Px(float value);
-    method public inline operator int compareTo(androidx.ui.core.Px other);
+    method public operator int compareTo(androidx.ui.core.Px other);
     method public inline operator int compareTo(androidx.ui.core.IntPx other);
     method public float component1();
     method public androidx.ui.core.Px copy(float value);
@@ -717,8 +717,8 @@
 
   public final inline class PxCubed implements java.lang.Comparable<androidx.ui.core.PxCubed> {
     ctor public PxCubed();
-    method public inline operator int compareTo-syUR1PY(float p);
-    method public static inline operator int compareTo-syUR1PY(float $this, float other);
+    method public operator int compareTo-syUR1PY(float p);
+    method public static operator int compareTo-syUR1PY(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
@@ -736,8 +736,8 @@
 
   public final inline class PxInverse implements java.lang.Comparable<androidx.ui.core.PxInverse> {
     ctor public PxInverse();
-    method public inline operator int compareTo-MXEAIGs(float p);
-    method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+    method public operator int compareTo-MXEAIGs(float p);
+    method public static operator int compareTo-MXEAIGs(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static boolean equals-impl(float p, Object? p1);
@@ -830,8 +830,8 @@
 
   public final inline class PxSquared implements java.lang.Comparable<androidx.ui.core.PxSquared> {
     ctor public PxSquared();
-    method public inline operator int compareTo-kVJEwbQ(float p);
-    method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+    method public operator int compareTo-kVJEwbQ(float p);
+    method public static operator int compareTo-kVJEwbQ(float $this, float other);
     method public static float constructor-impl(float value);
     method public static inline operator float div-impl(float $this, float other);
     method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt b/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt
index e8917eb..225e696 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt
@@ -101,8 +101,7 @@
     /**
      * Support comparing Dimensions with comparison operators.
      */
-    @Suppress("OVERRIDE_BY_INLINE")
-    override inline operator fun compareTo(other: Dp) = value.compareTo(other.value)
+    override /* TODO: inline */ operator fun compareTo(other: Dp) = value.compareTo(other.value)
 
     override fun toString() = "$value.dp"
 
@@ -278,8 +277,7 @@
     /**
      * Support comparing DpSquared with comparison operators.
      */
-    @Suppress("OVERRIDE_BY_INLINE")
-    override inline operator fun compareTo(other: DpSquared) =
+    override /* TODO: inline */ operator fun compareTo(other: DpSquared) =
         value.compareTo(other.value)
 
     override fun toString(): String = "$value.dp^2"
@@ -342,8 +340,8 @@
     /**
      * Support comparing DpCubed with comparison operators.
      */
-    @Suppress("OVERRIDE_BY_INLINE")
-    override inline operator fun compareTo(other: DpCubed) = value.compareTo(other.value)
+    override /* TODO: inline */ operator fun compareTo(other: DpCubed) =
+        value.compareTo(other.value)
 
     override fun toString(): String = "$value.dp^3"
 }
@@ -403,8 +401,7 @@
     /**
      * Support comparing DpInverse with comparison operators.
      */
-    @Suppress("OVERRIDE_BY_INLINE")
-    override inline operator fun compareTo(other: DpInverse) =
+    override /* TODO: inline */ operator fun compareTo(other: DpInverse) =
         value.compareTo(other.value)
 
     override fun toString(): String = "$value.dp^-1"
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt b/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt
index 5b12588..3214b21 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt
@@ -100,8 +100,7 @@
     /**
      * Support comparing Dimensions with comparison operators.
      */
-    @Suppress("OVERRIDE_BY_INLINE")
-    override inline operator fun compareTo(other: IntPx) = value.compareTo(other.value)
+    override /* TODO: inline */ operator fun compareTo(other: IntPx) = value.compareTo(other.value)
 
     /**
      * Compares this [IntPx] to another [Px]
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/Modifier.kt b/ui/ui-core/src/main/java/androidx/ui/core/Modifier.kt
index 6be2126..2de6704 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/Modifier.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/Modifier.kt
@@ -24,8 +24,8 @@
  * `object`s, `data class`es or otherwise implement [equals][Any.equals]. A correct implementation
  * of an [Element] must meet this requirement.
  *
- * Modifier elements may be combined using [wraps]. Order is significant; modifier elements wrap
- * the modifiers to their right
+ * Modifier elements may be combined using `+` Order is significant; modifier elements to the left
+ * are applied before modifier elements to the right.
  *
  * Composables that accept a [Modifier] as a parameter to be applied to the whole component
  * represented by the composable function should name the parameter `modifier` and
@@ -37,7 +37,7 @@
  * default parameter value. For example:
  *
  *     @Composable fun Foo(modifier: Modifier = Modifier.None) {
- *         Column(modifier wraps defaultFooModifier) {
+ *         Column(modifier + defaultFooModifier) {
  *             // ...
  *         }
  *     }
@@ -69,7 +69,7 @@
      * and each element from outside in.
      *
      * Elements wrap one another in a chain from left to right; an [Element] that appears to the
-     * left of another in a [wraps] expression or in [operation]'s parameter order affects all
+     * left of another in a `+` expression or in [operation]'s parameter order affects all
      * of the elements that appear after it. [foldIn] may be used to accumulate a value starting
      * from the parent or head of the modifier chain to the final wrapped child.
      */
@@ -80,7 +80,7 @@
      * and each element from inside out.
      *
      * Elements wrap one another in a chain from left to right; an [Element] that appears to the
-     * left of another in a [wraps] expression or in [operation]'s parameter order affects all
+     * left of another in a `+` expression or in [operation]'s parameter order affects all
      * of the elements that appear after it. [foldOut] may be used to accumulate a value starting
      * from the child or tail of the modifier chain up to the parent or head of the chain.
      */
@@ -89,7 +89,18 @@
     /**
      * Wraps another [Modifier] with this one, returning the new chain.
      */
-    infix fun wraps(other: Modifier): Modifier =
+    @Deprecated(
+        "use + instead",
+        replaceWith = ReplaceWith("this + other")
+    )
+    infix fun wraps(other: Modifier): Modifier = this + other
+
+    /**
+     * Concatenates this modifier with another.
+     *
+     * Returns a [Modifier] representing this modifier followed by [other] in sequence.
+     */
+    operator fun plus(other: Modifier): Modifier =
         if (other === None) this else foldOut(other, ::CombinedModifier)
 
     /**
@@ -99,7 +110,7 @@
     object None : Modifier {
         override fun <R> foldIn(initial: R, operation: (R, Element) -> R): R = initial
         override fun <R> foldOut(initial: R, operation: (Element, R) -> R): R = initial
-        override fun wraps(other: Modifier): Modifier = other
+        override operator fun plus(other: Modifier): Modifier = other
         override fun toString() = "Modifier.None"
     }
 
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/Px.kt b/ui/ui-core/src/main/java/androidx/ui/core/Px.kt
index df43cc0..75d5c0a 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/Px.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/Px.kt
@@ -100,8 +100,7 @@
     /**
      * Compare [Px] with another [Px].
      */
-    @Suppress("OVERRIDE_BY_INLINE")
-    override inline operator fun compareTo(other: Px) = value.compareTo(other.value)
+    override /* TODO: inline */ operator fun compareTo(other: Px) = value.compareTo(other.value)
 
     /**
      * Compares this [Px] to another [IntPx]
@@ -288,8 +287,7 @@
     /**
      * Support comparing PxSquared with comparison operators.
      */
-    @Suppress("OVERRIDE_BY_INLINE")
-    override inline operator fun compareTo(other: PxSquared) =
+    override /* TODO: inline */ operator fun compareTo(other: PxSquared) =
         value.compareTo(other.value)
 
     override fun toString(): String = "$value.px^2"
@@ -351,8 +349,8 @@
     /**
      * Support comparing PxCubed with comparison operators.
      */
-    @Suppress("OVERRIDE_BY_INLINE")
-    override inline operator fun compareTo(other: PxCubed) = value.compareTo(other.value)
+    override /* TODO: inline */ operator fun compareTo(other: PxCubed) =
+        value.compareTo(other.value)
 
     override fun toString(): String = "$value.px^3"
 }
@@ -413,8 +411,7 @@
     /**
      * Support comparing PxInverse with comparison operators.
      */
-    @Suppress("OVERRIDE_BY_INLINE")
-    override inline operator fun compareTo(other: PxInverse) =
+    override /* TODO: inline */ operator fun compareTo(other: PxInverse) =
         value.compareTo(other.value)
 
     override fun toString(): String = "$value.px^-1"
diff --git a/ui/ui-core/src/test/java/androidx/ui/core/ModifierTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/ModifierTest.kt
index d6e5232..6303e1f 100644
--- a/ui/ui-core/src/test/java/androidx/ui/core/ModifierTest.kt
+++ b/ui/ui-core/src/test/java/androidx/ui/core/ModifierTest.kt
@@ -21,12 +21,12 @@
 
 class ModifierTest {
     /**
-     * Verifies that the [Modifier.wraps] operation results in [Modifier] instances that
+     * Verifies that the [Modifier.plus] operation results in [Modifier] instances that
      * [Modifier.foldIn] and [Modifier.foldOut] in the expected order.
      */
     @Test
     fun wrapElementChain() {
-        val chain = SampleModifier(1) wraps SampleModifier(2) wraps SampleModifier(3)
+        val chain = SampleModifier(1) + SampleModifier(2) + SampleModifier(3)
         val forwards = chain.foldIn(emptyList<Int>()) { acc, e ->
             acc + (e as SampleModifier).value
         }
diff --git a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/AnimatedDraggableActivity.kt b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/AnimatedDraggableActivity.kt
index f93b3c8..c21d839 100644
--- a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/AnimatedDraggableActivity.kt
+++ b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/AnimatedDraggableActivity.kt
@@ -23,7 +23,7 @@
 import androidx.ui.foundation.samples.AnchoredDraggableSample
 import androidx.ui.foundation.samples.DraggableSample
 import androidx.ui.layout.Column
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutHeight
 import androidx.ui.layout.Spacer
 import androidx.ui.layout.Wrap
 
@@ -35,7 +35,7 @@
             Wrap {
                 Column {
                     DraggableSample()
-                    Spacer(Height(100.dp))
+                    Spacer(LayoutHeight(100.dp))
                     AnchoredDraggableSample()
                 }
             }
diff --git a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt
index 670f1ed..333c091 100644
--- a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt
+++ b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt
@@ -36,9 +36,9 @@
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
+import androidx.ui.layout.LayoutPadding
 import androidx.ui.layout.Padding
 import androidx.ui.layout.Row
-import androidx.ui.layout.Spacing
 import androidx.ui.layout.Table
 import androidx.ui.text.TextStyle
 
@@ -89,7 +89,7 @@
     val style = TextStyle(fontSize = 30.sp)
     // Scroller will be clipped to this padding
     VerticalScroller {
-        Column(modifier = Spacing(20.dp)) {
+        Column(modifier = LayoutPadding(20.dp)) {
             phrases.forEach { phrase ->
                 Text(text = phrase, style = style)
             }
diff --git a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/TableBordersSamples.kt b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/TableBordersSamples.kt
index b3ec690..f17c97a 100644
--- a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/TableBordersSamples.kt
+++ b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/TableBordersSamples.kt
@@ -23,7 +23,7 @@
 import androidx.ui.foundation.drawBorders
 import androidx.ui.foundation.shape.border.Border
 import androidx.ui.graphics.Color
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import androidx.ui.layout.Padding
 import androidx.ui.layout.Table
 
@@ -47,7 +47,7 @@
                 tableRow {
                     repeat(8) {
                         Padding(2.dp) {
-                            ColoredRect(color = Color.Magenta, modifier = AspectRatio(1f))
+                            ColoredRect(color = Color.Magenta, modifier = LayoutAspectRatio(1f))
                         }
                     }
                 }
diff --git a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/BackgroundTest.kt b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/BackgroundTest.kt
index 62b9cde..499f880 100644
--- a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/BackgroundTest.kt
+++ b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/BackgroundTest.kt
@@ -31,7 +31,7 @@
 import androidx.ui.graphics.SolidColor
 import androidx.ui.layout.Align
 import androidx.ui.layout.Container
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutPadding
 import androidx.ui.semantics.Semantics
 import androidx.ui.test.assertShape
 import androidx.ui.test.captureToBitmap
@@ -63,7 +63,7 @@
                     Container(
                         width = 20.px.toDp(),
                         height = 20.px.toDp(),
-                        modifier = Spacing(10.px.toDp()) wraps background(Color.White)
+                        modifier = LayoutPadding(10.px.toDp()) + background(Color.White)
                     ) {}
                 }
             }
@@ -89,7 +89,7 @@
                     Container(
                         width = 20.px.toDp(),
                         height = 20.px.toDp(),
-                        modifier = Spacing(10.px.toDp()) wraps background(
+                        modifier = LayoutPadding(10.px.toDp()) + background(
                             SolidColor(
                                 Color.White
                             )
@@ -114,7 +114,7 @@
                 Container(
                     width = 40.px.toDp(),
                     height = 40.px.toDp(),
-                    modifier = background(Color.Magenta) wraps
+                    modifier = background(Color.Magenta) +
                             background(shape = CircleShape, color = Color.White)
                 ) {}
             }
@@ -133,11 +133,10 @@
                 Container(
                     width = 40.px.toDp(),
                     height = 40.px.toDp(),
-                    modifier = background(Color.Magenta) wraps
-                            background(
-                                shape = CircleShape,
-                                brush = SolidColor(Color.White)
-                            )
+                    modifier = background(Color.Magenta) + background(
+                        shape = CircleShape,
+                        brush = SolidColor(Color.White)
+                    )
                 ) {}
             }
         }
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt
index 9f752c7..a14e611 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt
@@ -49,7 +49,7 @@
 ) {
     val background = +memo(brush) { background(brush) }
     Container(
-        modifier = modifier wraps background, width = width, height = height, expanded = true
+        modifier = modifier + background, width = width, height = height, expanded = true
     ) {}
 }
 
@@ -71,6 +71,6 @@
 ) {
     val background = +memo(color) { background(color) }
     Container(
-        modifier = modifier wraps background, width = width, height = height, expanded = true
+        modifier = modifier + background, width = width, height = height, expanded = true
     ) {}
 }
diff --git a/ui/ui-framework/OWNERS b/ui/ui-framework/OWNERS
index 78f2531..fd8f9ec 100644
--- a/ui/ui-framework/OWNERS
+++ b/ui/ui-framework/OWNERS
@@ -1,5 +1,6 @@
 [email protected]
 [email protected]
[email protected]
 
 # Semantics
 [email protected]
diff --git a/ui/ui-framework/api/0.1.0-dev04.txt b/ui/ui-framework/api/0.1.0-dev04.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/0.1.0-dev04.txt
+++ b/ui/ui-framework/api/0.1.0-dev04.txt
@@ -166,8 +166,8 @@
     method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
     method public androidx.ui.core.TextSpanComposer getComposer();
-    method public inline Object joinKey(Object left, Object? right);
-    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    method public Object joinKey(Object left, Object? right);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
   }
 
   public final class TextSpanScope {
diff --git a/ui/ui-framework/api/current.txt b/ui/ui-framework/api/current.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/current.txt
+++ b/ui/ui-framework/api/current.txt
@@ -166,8 +166,8 @@
     method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
     method public androidx.ui.core.TextSpanComposer getComposer();
-    method public inline Object joinKey(Object left, Object? right);
-    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    method public Object joinKey(Object left, Object? right);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
   }
 
   public final class TextSpanScope {
diff --git a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev04.txt b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev04.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev04.txt
+++ b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev04.txt
@@ -166,8 +166,8 @@
     method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
     method public androidx.ui.core.TextSpanComposer getComposer();
-    method public inline Object joinKey(Object left, Object? right);
-    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    method public Object joinKey(Object left, Object? right);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
   }
 
   public final class TextSpanScope {
diff --git a/ui/ui-framework/api/public_plus_experimental_current.txt b/ui/ui-framework/api/public_plus_experimental_current.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/public_plus_experimental_current.txt
+++ b/ui/ui-framework/api/public_plus_experimental_current.txt
@@ -166,8 +166,8 @@
     method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
     method public androidx.ui.core.TextSpanComposer getComposer();
-    method public inline Object joinKey(Object left, Object? right);
-    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    method public Object joinKey(Object left, Object? right);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
   }
 
   public final class TextSpanScope {
diff --git a/ui/ui-framework/api/restricted_0.1.0-dev04.txt b/ui/ui-framework/api/restricted_0.1.0-dev04.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/restricted_0.1.0-dev04.txt
+++ b/ui/ui-framework/api/restricted_0.1.0-dev04.txt
@@ -166,8 +166,8 @@
     method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
     method public androidx.ui.core.TextSpanComposer getComposer();
-    method public inline Object joinKey(Object left, Object? right);
-    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    method public Object joinKey(Object left, Object? right);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
   }
 
   public final class TextSpanScope {
diff --git a/ui/ui-framework/api/restricted_current.txt b/ui/ui-framework/api/restricted_current.txt
index f503479..cfd6464 100644
--- a/ui/ui-framework/api/restricted_current.txt
+++ b/ui/ui-framework/api/restricted_current.txt
@@ -166,8 +166,8 @@
     method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
     method public androidx.ui.core.TextSpanComposer getComposer();
-    method public inline Object joinKey(Object left, Object? right);
-    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    method public Object joinKey(Object left, Object? right);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
   }
 
   public final class TextSpanScope {
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/PopupActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/PopupActivity.kt
index bb61ba5..3116e4e 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/PopupActivity.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/PopupActivity.kt
@@ -41,22 +41,22 @@
 import androidx.ui.foundation.shape.RectangleShape
 import androidx.ui.foundation.shape.corner.CircleShape
 import androidx.ui.graphics.Color
+import androidx.ui.graphics.Paint
 import androidx.ui.input.ImeAction
 import androidx.ui.input.KeyboardType
 import androidx.ui.layout.Column
+import androidx.ui.layout.ColumnScope
 import androidx.ui.layout.Container
 import androidx.ui.layout.DpConstraints
 import androidx.ui.layout.EdgeInsets
 import androidx.ui.layout.FlexRow
-import androidx.ui.layout.Height
-import androidx.ui.layout.Spacer
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutHeight
 import androidx.ui.layout.MainAxisAlignment
+import androidx.ui.layout.Spacer
 import androidx.ui.layout.Wrap
-import androidx.ui.graphics.Paint
-import androidx.ui.layout.ColumnScope
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
 import androidx.ui.text.TextStyle
 import androidx.ui.text.style.TextAlign
 
@@ -70,7 +70,7 @@
 
             Column {
                 FlexRow(
-                    ExpandedWidth wraps Gravity.Center,
+                    LayoutExpandedWidth + LayoutGravity.Center,
                     mainAxisAlignment = MainAxisAlignment.SpaceBetween
                 ) {
                     inflexible {
@@ -161,7 +161,7 @@
     val showPopup = +state { true }
     val containerSize = 100.dp
 
-    Column(Gravity.Center) {
+    Column(LayoutGravity.Center) {
         Container(width = containerSize, height = containerSize) {
             if (showPopup.value) {
                 Popup(alignment = Alignment.Center) {
@@ -190,7 +190,7 @@
 
 @Composable
 fun ColumnScope.PopupWithChangingContent() {
-    Column(Gravity.Center) {
+    Column(LayoutGravity.Center) {
             val heightSize = 120.dp
             val widthSize = 160.dp
             val popupContentState = +state { 0 }
@@ -221,7 +221,7 @@
                 }
             }
 
-            Spacer(Height(10.dp))
+            Spacer(LayoutHeight(10.dp))
             ClickableTextWithBackground(
                 text = "Change content",
                 color = Color.Cyan,
@@ -241,7 +241,7 @@
     val parentHeight = +state { 60.dp }
     val parentSizeChanged = +state { false }
 
-    Column(Gravity.Center) {
+    Column(LayoutGravity.Center) {
         Container(
             height = containerHeight,
             width = containerWidth,
@@ -259,7 +259,7 @@
                 }
             }
         }
-        Spacer(Height(10.dp))
+        Spacer(LayoutHeight(10.dp))
         ClickableTextWithBackground(
             text = "Change parent's position",
             color = Color.Cyan,
@@ -271,7 +271,7 @@
                         Alignment.TopLeft
             }
         )
-        Spacer(Height(10.dp))
+        Spacer(LayoutHeight(10.dp))
         ClickableTextWithBackground(
             text = "Change parent's size",
             color = Color.Cyan,
@@ -291,7 +291,7 @@
 
 @Composable
 fun ColumnScope.PopupDropdownAlignment() {
-    Column(Gravity.Center) {
+    Column(LayoutGravity.Center) {
             val heightSize = 120.dp
             val widthSize = 160.dp
             val dropDownAlignment = +state { DropDownAlignment.Left }
@@ -308,7 +308,7 @@
                 }
             )
 
-            Spacer(Height(10.dp))
+            Spacer(LayoutHeight(10.dp))
 
             ColoredContainer(
                 height = heightSize,
@@ -330,7 +330,7 @@
 
 @Composable
 fun ColumnScope.PopupAlignmentDemo() {
-    Container(Gravity.Center) {
+    Container(LayoutGravity.Center) {
         val heightSize = 200.dp
         val widthSize = 400.dp
         val counter = +state { 0 }
@@ -365,8 +365,8 @@
                 }
             }
 
-            Spacer(Height(10.dp))
-            ColoredContainer(color = Color.White, modifier = Gravity.Center) {
+            Spacer(LayoutHeight(10.dp))
+            ColoredContainer(color = Color.White, modifier = LayoutGravity.Center) {
                 Text("Alignment: " + popupAlignment.value.toString())
             }
         }
@@ -375,7 +375,7 @@
 
 @Composable
 fun ColumnScope.PopupWithEditText() {
-    Column(Gravity.Center) {
+    Column(LayoutGravity.Center) {
             val widthSize = 190.dp
             val heightSize = 120.dp
             val editLineSize = 150.dp
@@ -391,7 +391,7 @@
                 height = heightSize,
                 width = widthSize,
                 color = Color.Red,
-                modifier = Gravity.Center
+                modifier = LayoutGravity.Center
             ) {
                 if (showPopup.value) {
                     Popup(
@@ -421,13 +421,13 @@
 
 @Composable
 fun ColumnScope.PopupWithChangingSize() {
-    Column(Gravity.Center) {
+    Column(LayoutGravity.Center) {
             val showPopup = +state { true }
             val heightSize = 120.dp
             val widthSize = 160.dp
             val rectangleState = +state { 0 }
 
-            Spacer(Height(15.dp))
+            Spacer(LayoutHeight(15.dp))
             ColoredContainer(
                 height = heightSize,
                 width = widthSize,
@@ -460,7 +460,7 @@
                     }
                 }
             }
-            Spacer(Height(25.dp))
+            Spacer(LayoutHeight(25.dp))
             ClickableTextWithBackground(
                 text = "Change size",
                 color = Color.Cyan,
@@ -475,9 +475,9 @@
 fun ColumnScope.PopupInsideScroller() {
     val heightSize = 400.dp
     val widthSize = 200.dp
-    Container(width = widthSize, height = heightSize, modifier = Gravity.Center) {
+    Container(width = widthSize, height = heightSize, modifier = LayoutGravity.Center) {
         VerticalScroller {
-            Column(ExpandedHeight) {
+            Column(LayoutExpandedHeight) {
                 ColoredContainer(width = 80.dp,
                     height = 160.dp,
                     color = Color(0xFF00FF00)
@@ -488,7 +488,7 @@
                 }
 
                 for (i in 0..30) {
-                    Text(text = "Scroll #$i", modifier = Gravity.Center)
+                    Text(text = "Scroll #$i", modifier = LayoutGravity.Center)
                 }
             }
         }
@@ -501,13 +501,13 @@
         val widthSize = 190.dp
         val heightSize = 120.dp
 
-        Spacer(Height(350.dp))
+        Spacer(LayoutHeight(350.dp))
         Text("Start typing in the EditText below the parent(Red rectangle)")
         ColoredContainer(
             height = heightSize,
             width = widthSize,
             color = Color.Red,
-            modifier = Gravity.Center
+            modifier = LayoutGravity.Center
         ) {
             Popup(Alignment.Center) {
                 ColoredContainer(color = Color.Green) {
@@ -518,7 +518,7 @@
 
         EditLine(initialText = "Continue typing...", color = Color.Gray)
 
-        Spacer(Height(24.dp))
+        Spacer(LayoutHeight(24.dp))
     }
 }
 
@@ -529,7 +529,7 @@
     onClick: (() -> Unit)? = null,
     padding: EdgeInsets = EdgeInsets(0.dp)
 ) {
-    Container(Gravity.Center) {
+    Container(LayoutGravity.Center) {
         DrawShape(RectangleShape, color)
         Clickable(onClick = onClick) {
             Container(padding = padding) {
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt
index 89ab354..4f6baea 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt
@@ -30,9 +30,9 @@
 import androidx.compose.state
 import androidx.compose.unaryPlus
 import androidx.ui.layout.Arrangement
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
 
 /** A [SemanticProperty] is used to store semantic information about a component.
  *
@@ -165,7 +165,7 @@
     actions: Set<SemanticAction<out Any?>> = setOf(),
     children: @Composable() () -> Unit
 ) {
-    Column(ExpandedHeight) {
+    Column(LayoutExpandedHeight) {
         MaterialTheme {
             Collapsable {
                 InvokeActionsByType(actions)
@@ -174,11 +174,11 @@
                 InvokeActionsByParameters(actions)
             }
         }
-        Row(ExpandedWidth, arrangement = Arrangement.Center) {
+        Row(LayoutExpandedWidth, arrangement = Arrangement.Center) {
             Container(
                 height = 300.dp,
                 width = 500.dp,
-                modifier = Gravity.Center,
+                modifier = LayoutGravity.Center,
                 children = children
             )
         }
@@ -194,7 +194,7 @@
     val secondary =
         actions.firstOrNull { it.types.contains(AccessibilityAction.Secondary) }
     Text(text = "Accessibility Actions By Type", style = (+MaterialTheme.typography()).h6)
-    Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+    Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
         Button(
             text = "Primary",
             onClick = { primary?.invoke(ActionCaller.Accessibility) })
@@ -212,7 +212,7 @@
     Text(
         text = "Accessibility Actions By Phrase",
         style = (+MaterialTheme.typography()).h6)
-    Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+    Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
         actions.forEach {
             Button(
                 text = it.phrase,
@@ -229,7 +229,7 @@
     val positive = actions.firstOrNull { it.types.contains(PolarityAction.Positive) }
     val negative = actions.firstOrNull { it.types.contains(PolarityAction.Negative) }
     Text(text = "Assistant Actions", style = (+MaterialTheme.typography()).h6)
-    Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+    Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
         Button(
             text = "Negative",
             onClick = { negative?.invoke(ActionCaller.Assistant) })
@@ -253,7 +253,7 @@
     val unitAction =
         actions.firstOrNull { it.defaultParam is Unit } as SemanticAction<Unit>?
     Text(text = "Actions using Parameters", style = (+MaterialTheme.typography()).h6)
-    Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+    Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
         Button(
             text = "IntAction",
             onClick = { pxPositionAction?.invoke(param = PxPosition(1.px, 1.px)) })
@@ -277,7 +277,7 @@
 
     val collapsedState = +state { CollapseMode.Collapsed }
 
-    Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+    Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
         Button(text = "Show/Hide Actions", onClick = {
             collapsedState.value = when (collapsedState.value) {
                 CollapseMode.Collapsed -> CollapseMode.Visible
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
index ddbaf52..24deccd 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
@@ -37,7 +37,7 @@
 import androidx.ui.input.ImeAction
 import androidx.ui.input.KeyboardType
 import androidx.ui.layout.Column
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutHeight
 import androidx.ui.layout.Spacer
 import androidx.ui.material.MaterialTheme
 
@@ -71,7 +71,7 @@
                         )
                     }
 
-                    Spacer(Height(40.dp))
+                    Spacer(LayoutHeight(40.dp))
 
                     Text("Email", style = labelStyle)
                     Autofill(
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/focus/FocusableActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/focus/FocusableActivity.kt
index 8f217ae..bf5cc05 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/focus/FocusableActivity.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/focus/FocusableActivity.kt
@@ -29,7 +29,7 @@
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Arrangement
 import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedWidth
 import androidx.ui.layout.Row
 import androidx.ui.layout.RowScope
 import androidx.ui.material.MaterialTheme
@@ -81,5 +81,5 @@
 
 @Composable
 private fun CenteredRow(children: @Composable() RowScope.() -> Unit) {
-    Row(modifier = ExpandedWidth, arrangement = Arrangement.Center, children = children)
+    Row(modifier = LayoutExpandedWidth, arrangement = Arrangement.Center, children = children)
 }
\ No newline at end of file
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
index 64ffd31..d8c0a12 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
@@ -1743,7 +1743,7 @@
                     Draw { canvas, parentSize ->
                         canvas.drawRect(parentSize.toRect(), Paint().apply { color = outerColor })
                     }
-                    FixedSize(10.ipx, PaddingModifier(10.ipx) wraps background(
+                    FixedSize(10.ipx, PaddingModifier(10.ipx) + background(
                         innerColor
                     )
                     ) {
@@ -1790,7 +1790,7 @@
                 val countDownModifier = draw { _, _ ->
                     drawLatch.countDown()
                 }
-                FixedSize(30.ipx, countDownModifier wraps background(
+                FixedSize(30.ipx, countDownModifier + background(
                     color = outerColor
                 )
                 ) {
@@ -1817,7 +1817,7 @@
                 ) {
                     FixedSize(
                         size = 10.ipx,
-                        modifier = PaddingModifier(10.ipx) wraps background(
+                        modifier = PaddingModifier(10.ipx) + background(
                             color = innerColor
                         )
                     ) {
@@ -1871,11 +1871,10 @@
                 FixedSize(30.ipx, background(outerColor)) {
                     FixedSize(
                         size = 10.ipx,
-                        modifier = PaddingModifier(10.ipx) wraps
-                                background(
-                                    shape = CircleShape,
-                                    color = innerColor
-                                )
+                        modifier = PaddingModifier(10.ipx) + background(
+                            shape = CircleShape,
+                            color = innerColor
+                        )
                     ) {
                         Draw { _, _ ->
                             drawLatch.countDown()
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/TextSpanCompose.kt b/ui/ui-framework/src/main/java/androidx/ui/core/TextSpanCompose.kt
index 64c2402..1d93205 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/TextSpanCompose.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/TextSpanCompose.kt
@@ -86,8 +86,8 @@
 internal val invocation = Object()
 
 class TextSpanComposition(val composer: TextSpanComposer) {
-    @Suppress("NOTHING_TO_INLINE")
-    inline operator fun <V> Effect<V>.unaryPlus(): V = resolve([email protected])
+    /* TODO: inline */ operator fun <V> Effect<V>.unaryPlus(): V =
+        resolve([email protected])
 
     inline fun emit(
         key: Any,
@@ -117,8 +117,7 @@
         endNode()
     }
 
-    @Suppress("NOTHING_TO_INLINE")
-    inline fun joinKey(left: Any, right: Any?): Any = composer.joinKey(left, right)
+    /* TODO: inline */ fun joinKey(left: Any, right: Any?): Any = composer.joinKey(left, right)
 
     @Suppress("PLUGIN_WARNING")
     inline fun <T> expr(
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/Wrapper.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Wrapper.kt
index 95bccc2..fafc275 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/Wrapper.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/Wrapper.kt
@@ -40,6 +40,7 @@
 import androidx.compose.unaryPlus
 import androidx.ui.autofill.Autofill
 import androidx.ui.autofill.AutofillTree
+import androidx.ui.core.selection.SelectionContainer
 import androidx.ui.text.font.Font
 import kotlinx.coroutines.Dispatchers
 import kotlin.coroutines.CoroutineContext
@@ -114,11 +115,22 @@
     // kotlinx.coroutines.Dispatchers' not instance of 'Precise Reference: androidx.compose.Ambient'.
     val coroutineContext = Dispatchers.Main
     return Compose.composeInto(composeView.root, this) {
-        WrapWithAmbients(composeView, this, coroutineContext, content)
+        WrapWithAmbients(composeView, this, coroutineContext) {
+            WrapWithSelectionContainer(content)
+        }
     }
 }
 
 /**
+ * We want text/image selection to be enabled by default and disabled per widget. Therefore a root
+ * level [SelectionContainer] is installed at the root.
+ */
+@Composable
+private fun WrapWithSelectionContainer(content: @Composable() () -> Unit) {
+    SelectionContainer(children = content)
+}
+
+/**
  * Composes the given composable into the given view.
  *
  * @param content Composable that will be the content of the view.
@@ -134,7 +146,9 @@
     // kotlinx.coroutines.Dispatchers' not instance of 'Precise Reference: androidx.compose.Ambient'.
     val coroutineContext = Dispatchers.Main
     return Compose.composeInto(composeView.root, context) {
-        WrapWithAmbients(composeView, context, coroutineContext, content)
+        WrapWithAmbients(composeView, context, coroutineContext) {
+            WrapWithSelectionContainer(content)
+        }
     }
 }
 
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt b/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt
index 3a50822..333125a8 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt
@@ -75,7 +75,8 @@
      * @return [Selection] object which is constructed by combining all Composables that are
      * selected.
      */
-    private fun mergeSelections(
+    // This function is internal for testing purposes.
+    internal fun mergeSelections(
         startPosition: PxPosition,
         endPosition: PxPosition,
         longPress: Boolean = false,
diff --git a/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerDragTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerDragTest.kt
new file mode 100644
index 0000000..5b4ff27
--- /dev/null
+++ b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerDragTest.kt
@@ -0,0 +1,209 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.core.selection
+
+import androidx.test.filters.SmallTest
+import androidx.ui.core.LayoutCoordinates
+import androidx.ui.core.PxPosition
+import androidx.ui.core.px
+import androidx.ui.text.style.TextDirection
+import com.google.common.truth.Truth.assertThat
+import com.nhaarman.mockitokotlin2.any
+import com.nhaarman.mockitokotlin2.mock
+import com.nhaarman.mockitokotlin2.spy
+import com.nhaarman.mockitokotlin2.times
+import com.nhaarman.mockitokotlin2.verify
+import com.nhaarman.mockitokotlin2.whenever
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class SelectionManagerDragTest {
+    private val selectionRegistrar = SelectionRegistrarImpl()
+    private val selectable = mock<Selectable>()
+    private val selectionManager = SelectionManager(selectionRegistrar)
+
+    private val containerLayoutCoordinates = mock<LayoutCoordinates>()
+    private val childToLocal_result = PxPosition(300.px, 400.px)
+
+    private val startLayoutCoordinates = mock<LayoutCoordinates>()
+    private val endLayoutCoordinates = mock<LayoutCoordinates>()
+    private val startCoordinates = PxPosition(3.px, 30.px)
+    private val endCoordinates = PxPosition(3.px, 600.px)
+    private val fakeInitialSelection: Selection = Selection(
+        start = Selection.AnchorInfo(
+            coordinates = startCoordinates,
+            direction = TextDirection.Ltr,
+            offset = 0,
+            layoutCoordinates = startLayoutCoordinates
+        ),
+        end = Selection.AnchorInfo(
+            coordinates = endCoordinates,
+            direction = TextDirection.Ltr,
+            offset = 5,
+            layoutCoordinates = endLayoutCoordinates
+        )
+    )
+    private val fakeResultSelection: Selection = Selection(
+        start = Selection.AnchorInfo(
+            coordinates = endCoordinates,
+            direction = TextDirection.Ltr,
+            offset = 5,
+            layoutCoordinates = endLayoutCoordinates
+        ),
+        end = Selection.AnchorInfo(
+            coordinates = startCoordinates,
+            direction = TextDirection.Ltr,
+            offset = 0,
+            layoutCoordinates = startLayoutCoordinates
+        )
+    )
+    private var selection: Selection? = fakeInitialSelection
+    private val lambda: (Selection?) -> Unit = { selection = it }
+    private val spyLambda = spy(lambda)
+
+    @Before
+    fun setup() {
+        selectionRegistrar.subscribe(selectable)
+
+        whenever(
+            containerLayoutCoordinates.childToLocal(
+                child = any(),
+                childLocal = any()
+            )
+        ).thenReturn(childToLocal_result)
+
+        whenever(
+            selectable.getSelection(
+                startPosition = any(),
+                endPosition = any(),
+                containerLayoutCoordinates = any(),
+                longPress = any()
+            )
+        ).thenReturn(fakeResultSelection)
+
+        selectionManager.containerLayoutCoordinates = containerLayoutCoordinates
+        selectionManager.onSelectionChange = spyLambda
+        selectionManager.selection = selection
+    }
+
+    @Test
+    fun handleDragObserver_onStart_startHandle_enable_draggingHandle_get_startHandle_info() {
+        selectionManager.handleDragObserver(isStartHandle = true).onStart(PxPosition.Origin)
+
+        verify(containerLayoutCoordinates, times(1))
+            .childToLocal(
+                child = startLayoutCoordinates,
+                childLocal = getAdjustedCoordinates(startCoordinates)
+            )
+        verify_draggingHandle(expectedDraggingHandleValue = true)
+        verify(spyLambda, times(0)).invoke(fakeResultSelection)
+    }
+
+    @Test
+    fun handleDragObserver_onStart_endHandle_enable_draggingHandle_get_endHandle_info() {
+        selectionManager.handleDragObserver(isStartHandle = false).onStart(PxPosition.Origin)
+
+        verify(containerLayoutCoordinates, times(1))
+            .childToLocal(
+                child = endLayoutCoordinates,
+                childLocal = getAdjustedCoordinates(endCoordinates)
+            )
+        verify_draggingHandle(expectedDraggingHandleValue = true)
+        verify(spyLambda, times(0)).invoke(fakeResultSelection)
+    }
+
+    @Test
+    fun handleDragObserver_onDrag_startHandle_reuse_endHandle_calls_getSelection_change_selection
+                () {
+        val dragDistance = PxPosition(100.px, 100.px)
+        selectionManager.handleDragObserver(isStartHandle = true).onStart(PxPosition.Origin)
+
+        val result = selectionManager.handleDragObserver(isStartHandle = true).onDrag(dragDistance)
+
+        verify(containerLayoutCoordinates, times(1))
+            .childToLocal(
+                child = endLayoutCoordinates,
+                childLocal = getAdjustedCoordinates(endCoordinates)
+            )
+        verify(selectable, times(1))
+            .getSelection(
+                startPosition = childToLocal_result + dragDistance,
+                endPosition = childToLocal_result,
+                containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+                longPress = false
+            )
+        assertThat(selection).isEqualTo(fakeResultSelection)
+        verify(spyLambda, times(1)).invoke(fakeResultSelection)
+        assertThat(result).isEqualTo(dragDistance)
+    }
+
+    @Test
+    fun handleDragObserver_onDrag_endHandle_resue_startHandle_calls_getSelection_change_selection
+                () {
+        val dragDistance = PxPosition(100.px, 100.px)
+        selectionManager.handleDragObserver(isStartHandle = false).onStart(PxPosition.Origin)
+
+        val result = selectionManager.handleDragObserver(isStartHandle = false).onDrag(dragDistance)
+
+        verify(containerLayoutCoordinates, times(1))
+            .childToLocal(
+                child = startLayoutCoordinates,
+                childLocal = getAdjustedCoordinates(startCoordinates)
+            )
+        verify(selectable, times(1))
+            .getSelection(
+                startPosition = childToLocal_result,
+                endPosition = childToLocal_result + dragDistance,
+                containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+                longPress = false
+            )
+        assertThat(selection).isEqualTo(fakeResultSelection)
+        verify(spyLambda, times(1)).invoke(fakeResultSelection)
+        assertThat(result).isEqualTo(dragDistance)
+    }
+
+    @Test
+    fun handleDragObserver_onStop_disable_draggingHandle() {
+        selectionManager.handleDragObserver(false).onStart(PxPosition.Origin)
+        selectionManager.handleDragObserver(false).onDrag(PxPosition.Origin)
+
+        selectionManager.handleDragObserver(false).onStop(PxPosition.Origin)
+
+        verify_draggingHandle(expectedDraggingHandleValue = false)
+    }
+
+    private fun getAdjustedCoordinates(position: PxPosition): PxPosition {
+        return PxPosition(position.x, position.y - 1.px)
+    }
+
+    private fun verify_draggingHandle(expectedDraggingHandleValue: Boolean) {
+        // Verify draggingHandle is true, by verifying LongPress does nothing. Vice Versa.
+        val position = PxPosition(100.px, 100.px)
+        selectionManager.longPressDragObserver.onLongPress(position)
+        verify(selectable, times(if (expectedDraggingHandleValue) 0 else 1))
+            .getSelection(
+                startPosition = position,
+                endPosition = position,
+                containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+                longPress = true
+            )
+    }
+}
diff --git a/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerLongPressDragTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerLongPressDragTest.kt
new file mode 100644
index 0000000..dd309f8
--- /dev/null
+++ b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerLongPressDragTest.kt
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.core.selection
+
+import androidx.test.filters.SmallTest
+import androidx.ui.core.LayoutCoordinates
+import androidx.ui.core.PxPosition
+import androidx.ui.core.px
+import androidx.ui.text.style.TextDirection
+import com.google.common.truth.Truth.assertThat
+import com.nhaarman.mockitokotlin2.any
+import com.nhaarman.mockitokotlin2.mock
+import com.nhaarman.mockitokotlin2.spy
+import com.nhaarman.mockitokotlin2.times
+import com.nhaarman.mockitokotlin2.verify
+import com.nhaarman.mockitokotlin2.whenever
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class SelectionManagerLongPressDragTest {
+    private val selectionRegistrar = SelectionRegistrarImpl()
+    private val selectable = mock<Selectable>()
+    private val selectionManager = SelectionManager(selectionRegistrar)
+
+    private val startLayoutCoordinates = mock<LayoutCoordinates>()
+    private val endLayoutCoordinates = mock<LayoutCoordinates>()
+    private val startCoordinates = PxPosition(3.px, 30.px)
+    private val endCoordinates = PxPosition(3.px, 600.px)
+    private val fakeInitialSelection: Selection = Selection(
+        start = Selection.AnchorInfo(
+            coordinates = startCoordinates,
+            direction = TextDirection.Ltr,
+            offset = 0,
+            layoutCoordinates = startLayoutCoordinates
+        ),
+        end = Selection.AnchorInfo(
+            coordinates = endCoordinates,
+            direction = TextDirection.Ltr,
+            offset = 5,
+            layoutCoordinates = endLayoutCoordinates
+        )
+    )
+
+    private val fakeResultSelection: Selection = Selection(
+        start = Selection.AnchorInfo(
+            coordinates = endCoordinates,
+            direction = TextDirection.Ltr,
+            offset = 5,
+            layoutCoordinates = endLayoutCoordinates
+        ),
+        end = Selection.AnchorInfo(
+            coordinates = startCoordinates,
+            direction = TextDirection.Ltr,
+            offset = 0,
+            layoutCoordinates = startLayoutCoordinates
+        )
+    )
+
+    private var selection: Selection? = null
+    private val lambda: (Selection?) -> Unit = { selection = it }
+    private val spyLambda = spy(lambda)
+
+    @Before
+    fun setup() {
+        val containerLayoutCoordinates = mock<LayoutCoordinates>()
+        selectionRegistrar.subscribe(selectable)
+
+        whenever(
+            selectable.getSelection(
+                startPosition = any(),
+                endPosition = any(),
+                containerLayoutCoordinates = any(),
+                longPress = any()
+            )
+        ).thenReturn(fakeResultSelection)
+
+        selectionManager.containerLayoutCoordinates = containerLayoutCoordinates
+        selectionManager.onSelectionChange = spyLambda
+        selectionManager.selection = selection
+    }
+
+    @Test
+    fun longPressDragObserver_onLongPress_calls_getSelection_change_selection() {
+        val position = PxPosition(100.px, 100.px)
+
+        selectionManager.longPressDragObserver.onLongPress(position)
+
+        verify(selectable, times(1))
+            .getSelection(
+                startPosition = position,
+                endPosition = position,
+                containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+                longPress = true
+            )
+        assertThat(selection).isEqualTo(fakeResultSelection)
+        verify(spyLambda, times(1)).invoke(fakeResultSelection)
+    }
+
+    @Test
+    fun longPressDragObserver_onDragStart_reset_dragTotalDistance() {
+        // Setup. Make sure selectionManager.dragTotalDistance is not 0.
+        val dragDistance1 = PxPosition(15.px, 10.px)
+        val beginPosition1 = PxPosition(30.px, 20.px)
+        val dragDistance2 = PxPosition(100.px, 300.px)
+        val beginPosition2 = PxPosition(300.px, 200.px)
+        selectionManager.longPressDragObserver.onLongPress(beginPosition1)
+        selectionManager.longPressDragObserver.onDragStart()
+        selectionManager.longPressDragObserver.onDrag(dragDistance1)
+        // Setup. Cancel selection and reselect.
+        selectionManager.onRelease()
+        // Start the new selection
+        selectionManager.longPressDragObserver.onLongPress(beginPosition2)
+        selectionManager.selection = fakeInitialSelection
+        selection = fakeInitialSelection
+
+        // Act. Reset selectionManager.dragTotalDistance to zero.
+        selectionManager.longPressDragObserver.onDragStart()
+        selectionManager.longPressDragObserver.onDrag(dragDistance2)
+
+        // Verify.
+        verify(selectable, times(1))
+            .getSelection(
+                startPosition = beginPosition2,
+                endPosition = beginPosition2 + dragDistance2,
+                containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+                longPress = true
+            )
+        assertThat(selection).isEqualTo(fakeResultSelection)
+        verify(spyLambda, times(3)).invoke(fakeResultSelection)
+    }
+
+    @Test
+    fun longPressDragObserver_onDrag_calls_getSelection_change_selection() {
+        val dragDistance = PxPosition(15.px, 10.px)
+        val beginPosition = PxPosition(30.px, 20.px)
+        selectionManager.longPressDragObserver.onLongPress(beginPosition)
+        selectionManager.selection = fakeInitialSelection
+        selection = fakeInitialSelection
+        selectionManager.longPressDragObserver.onDragStart()
+
+        val result = selectionManager.longPressDragObserver.onDrag(dragDistance)
+
+        assertThat(result).isEqualTo(dragDistance)
+        verify(selectable, times(1))
+            .getSelection(
+                startPosition = beginPosition,
+                endPosition = beginPosition + dragDistance,
+                containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+                longPress = true
+            )
+        assertThat(selection).isEqualTo(fakeResultSelection)
+        verify(spyLambda, times(2)).invoke(fakeResultSelection)
+    }
+
+    @Test
+    fun longPressDragObserver_onDrag_directly_not_call_getSelection_not_change_selection() {
+        val dragDistance = PxPosition(15.px, 10.px)
+        val beginPosition = PxPosition(30.px, 20.px)
+
+        selection = fakeInitialSelection
+        val result = selectionManager.longPressDragObserver.onDrag(dragDistance)
+
+        assertThat(result).isEqualTo(PxPosition.Origin)
+        verify(selectable, times(0))
+            .getSelection(
+                startPosition = beginPosition,
+                endPosition = beginPosition + dragDistance,
+                containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+                longPress = true
+            )
+        assertThat(selection).isEqualTo(fakeInitialSelection)
+        verify(spyLambda, times(0)).invoke(fakeResultSelection)
+    }
+}
diff --git a/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerTest.kt
new file mode 100644
index 0000000..dbd4c94
--- /dev/null
+++ b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionManagerTest.kt
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.core.selection
+
+import androidx.test.filters.SmallTest
+import androidx.ui.core.LayoutCoordinates
+import androidx.ui.core.PxPosition
+import androidx.ui.core.px
+import androidx.ui.text.style.TextDirection
+import com.google.common.truth.Truth.assertThat
+import com.nhaarman.mockitokotlin2.mock
+import com.nhaarman.mockitokotlin2.spy
+import com.nhaarman.mockitokotlin2.times
+import com.nhaarman.mockitokotlin2.verify
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class SelectionManagerTest {
+    private val selectionRegistrar = SelectionRegistrarImpl()
+    private val selectable = mock<Selectable>()
+    private val selectionManager = SelectionManager(selectionRegistrar)
+
+    private val startLayoutCoordinates = mock<LayoutCoordinates>()
+    private val endLayoutCoordinates = mock<LayoutCoordinates>()
+    private val startCoordinates = PxPosition(3.px, 30.px)
+    private val endCoordinates = PxPosition(3.px, 600.px)
+
+    @Before
+    fun setup() {
+        val containerLayoutCoordinates = mock<LayoutCoordinates>()
+        selectionRegistrar.subscribe(selectable)
+        selectionManager.containerLayoutCoordinates = containerLayoutCoordinates
+    }
+
+    @Test
+    fun mergeSelections_single_selectable_calls_getSelection_once() {
+        selectionManager.mergeSelections(
+            startPosition = startCoordinates,
+            endPosition = endCoordinates
+        )
+
+        verify(selectable, times(1))
+            .getSelection(
+                startPosition = startCoordinates,
+                endPosition = endCoordinates,
+                containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+                longPress = false
+            )
+    }
+
+    @Test
+    fun mergeSelections_multiple_selectables_calls_getSelection_multiple_times() {
+        val selectable_another = mock<Selectable>()
+        selectionRegistrar.subscribe(selectable_another)
+
+        selectionManager.mergeSelections(
+            startPosition = startCoordinates,
+            endPosition = endCoordinates
+        )
+
+        verify(selectable, times(1))
+            .getSelection(
+                startPosition = startCoordinates,
+                endPosition = endCoordinates,
+                containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+                longPress = false
+            )
+        verify(selectable_another, times(1))
+            .getSelection(
+                startPosition = startCoordinates,
+                endPosition = endCoordinates,
+                containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+                longPress = false
+            )
+    }
+
+    @Test
+    fun cancel_selection_calls_getSelection_selection_becomes_null() {
+        val fakeSelection =
+            Selection(
+                start = Selection.AnchorInfo(
+                    coordinates = startCoordinates,
+                    direction = TextDirection.Ltr,
+                    offset = 0,
+                    layoutCoordinates = startLayoutCoordinates
+                ),
+                end = Selection.AnchorInfo(
+                    coordinates = endCoordinates,
+                    direction = TextDirection.Ltr,
+                    offset = 5,
+                    layoutCoordinates = endLayoutCoordinates
+                )
+            )
+        var selection: Selection? = fakeSelection
+        val lambda: (Selection?) -> Unit = { selection = it }
+        val spyLambda = spy(lambda)
+        selectionManager.onSelectionChange = spyLambda
+        selectionManager.selection = fakeSelection
+
+        selectionManager.onRelease()
+
+        verify(selectable, times(1))
+            .getSelection(
+                startPosition = PxPosition((-1).px, (-1).px),
+                endPosition = PxPosition((-1).px, (-1).px),
+                containerLayoutCoordinates = selectionManager.containerLayoutCoordinates,
+                longPress = false
+            )
+        assertThat(selection).isNull()
+        verify(spyLambda, times(1)).invoke(null)
+    }
+}
diff --git a/ui/ui-layout/api/0.1.0-dev04.txt b/ui/ui-layout/api/0.1.0-dev04.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/0.1.0-dev04.txt
+++ b/ui/ui-layout/api/0.1.0-dev04.txt
@@ -7,40 +7,6 @@
     method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Aligned {
-    method public androidx.ui.core.LayoutModifier getBottom();
-    method public androidx.ui.core.LayoutModifier getBottomCenter();
-    method public androidx.ui.core.LayoutModifier getBottomLeft();
-    method public androidx.ui.core.LayoutModifier getBottomRight();
-    method public androidx.ui.core.LayoutModifier getCenter();
-    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
-    method public androidx.ui.core.LayoutModifier getCenterLeft();
-    method public androidx.ui.core.LayoutModifier getCenterRight();
-    method public androidx.ui.core.LayoutModifier getCenterVertically();
-    method public androidx.ui.core.LayoutModifier getEnd();
-    method public androidx.ui.core.LayoutModifier getStart();
-    method public androidx.ui.core.LayoutModifier getTop();
-    method public androidx.ui.core.LayoutModifier getTopCenter();
-    method public androidx.ui.core.LayoutModifier getTopLeft();
-    method public androidx.ui.core.LayoutModifier getTopRight();
-    property public final androidx.ui.core.LayoutModifier Bottom;
-    property public final androidx.ui.core.LayoutModifier BottomCenter;
-    property public final androidx.ui.core.LayoutModifier BottomLeft;
-    property public final androidx.ui.core.LayoutModifier BottomRight;
-    property public final androidx.ui.core.LayoutModifier Center;
-    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
-    property public final androidx.ui.core.LayoutModifier CenterLeft;
-    property public final androidx.ui.core.LayoutModifier CenterRight;
-    property public final androidx.ui.core.LayoutModifier CenterVertically;
-    property public final androidx.ui.core.LayoutModifier End;
-    property public final androidx.ui.core.LayoutModifier Start;
-    property public final androidx.ui.core.LayoutModifier Top;
-    property public final androidx.ui.core.LayoutModifier TopCenter;
-    property public final androidx.ui.core.LayoutModifier TopLeft;
-    property public final androidx.ui.core.LayoutModifier TopRight;
-    field public static final androidx.ui.layout.Aligned! INSTANCE;
-  }
-
   public final class AlignmentLineKt {
     ctor public AlignmentLineKt();
     method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
 
   public final class AspectRatioKt {
     ctor public AspectRatioKt();
-    method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
     method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class ColumnScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier End;
     property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
 
   public final class ExpandedModifierKt {
     ctor public ExpandedModifierKt();
-    method public static androidx.ui.core.LayoutModifier getExpanded();
-    method public static androidx.ui.core.LayoutModifier getExpandedHeight();
-    method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
   }
 
   public final class FlexChildren {
@@ -187,10 +152,10 @@
   }
 
   @androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
-    method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
-    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
-    method public final androidx.ui.core.LayoutModifier getInflexible();
-    property public final androidx.ui.core.LayoutModifier Inflexible;
+    method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+    method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+    property public final androidx.ui.core.LayoutModifier LayoutInflexible;
   }
 
   public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
     method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Gravity {
-    field public static final androidx.ui.layout.Gravity! INSTANCE;
-  }
-
   public final class IntrinsicKt {
     ctor public IntrinsicKt();
     method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
     method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
+  public final class LayoutAlign {
+    method public androidx.ui.core.LayoutModifier getBottom();
+    method public androidx.ui.core.LayoutModifier getBottomCenter();
+    method public androidx.ui.core.LayoutModifier getBottomLeft();
+    method public androidx.ui.core.LayoutModifier getBottomRight();
+    method public androidx.ui.core.LayoutModifier getCenter();
+    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+    method public androidx.ui.core.LayoutModifier getCenterLeft();
+    method public androidx.ui.core.LayoutModifier getCenterRight();
+    method public androidx.ui.core.LayoutModifier getCenterVertically();
+    method public androidx.ui.core.LayoutModifier getEnd();
+    method public androidx.ui.core.LayoutModifier getStart();
+    method public androidx.ui.core.LayoutModifier getTop();
+    method public androidx.ui.core.LayoutModifier getTopCenter();
+    method public androidx.ui.core.LayoutModifier getTopLeft();
+    method public androidx.ui.core.LayoutModifier getTopRight();
+    property public final androidx.ui.core.LayoutModifier Bottom;
+    property public final androidx.ui.core.LayoutModifier BottomCenter;
+    property public final androidx.ui.core.LayoutModifier BottomLeft;
+    property public final androidx.ui.core.LayoutModifier BottomRight;
+    property public final androidx.ui.core.LayoutModifier Center;
+    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+    property public final androidx.ui.core.LayoutModifier CenterLeft;
+    property public final androidx.ui.core.LayoutModifier CenterRight;
+    property public final androidx.ui.core.LayoutModifier CenterVertically;
+    property public final androidx.ui.core.LayoutModifier End;
+    property public final androidx.ui.core.LayoutModifier Start;
+    property public final androidx.ui.core.LayoutModifier Top;
+    property public final androidx.ui.core.LayoutModifier TopCenter;
+    property public final androidx.ui.core.LayoutModifier TopLeft;
+    property public final androidx.ui.core.LayoutModifier TopRight;
+    field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+  }
+
+  public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+    method public float component1();
+    method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+    method public float getAspectRatio();
+    method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+  }
+
+  public final class LayoutGravity {
+    field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+  }
+
+  public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    ctor public LayoutPadding();
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Dp component3();
+    method public androidx.ui.core.Dp component4();
+    method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    method public androidx.ui.core.Dp getBottom();
+    method public androidx.ui.core.Dp getLeft();
+    method public androidx.ui.core.Dp getRight();
+    method public androidx.ui.core.Dp getTop();
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+    method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+    method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+  }
+
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
@@ -234,11 +262,21 @@
     enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
   }
 
+  public final class PaddingKt {
+    ctor public PaddingKt();
+    method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+  }
+
   public final class RowScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Bottom;
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
 
   public final class SizeModifiersKt {
     ctor public SizeModifiersKt();
-    method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
-    method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
-    method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
-    method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
   }
 
   public final class SpacerKt {
@@ -262,15 +300,6 @@
     method public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
-  public final class SpacingKt {
-    ctor public SpacingKt();
-    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
-  }
-
   public final class StackKt {
     ctor public StackKt();
     method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
 
   @androidx.ui.layout.LayoutScopeMarker public final class StackScope {
     ctor public StackScope();
-    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier BottomCenter;
     property public final androidx.ui.core.LayoutModifier BottomLeft;
     property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
   public final class WrapKt {
     ctor public WrapKt();
     method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier getWrapped();
+    method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
   }
 
 }
diff --git a/ui/ui-layout/api/current.txt b/ui/ui-layout/api/current.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/current.txt
+++ b/ui/ui-layout/api/current.txt
@@ -7,40 +7,6 @@
     method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Aligned {
-    method public androidx.ui.core.LayoutModifier getBottom();
-    method public androidx.ui.core.LayoutModifier getBottomCenter();
-    method public androidx.ui.core.LayoutModifier getBottomLeft();
-    method public androidx.ui.core.LayoutModifier getBottomRight();
-    method public androidx.ui.core.LayoutModifier getCenter();
-    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
-    method public androidx.ui.core.LayoutModifier getCenterLeft();
-    method public androidx.ui.core.LayoutModifier getCenterRight();
-    method public androidx.ui.core.LayoutModifier getCenterVertically();
-    method public androidx.ui.core.LayoutModifier getEnd();
-    method public androidx.ui.core.LayoutModifier getStart();
-    method public androidx.ui.core.LayoutModifier getTop();
-    method public androidx.ui.core.LayoutModifier getTopCenter();
-    method public androidx.ui.core.LayoutModifier getTopLeft();
-    method public androidx.ui.core.LayoutModifier getTopRight();
-    property public final androidx.ui.core.LayoutModifier Bottom;
-    property public final androidx.ui.core.LayoutModifier BottomCenter;
-    property public final androidx.ui.core.LayoutModifier BottomLeft;
-    property public final androidx.ui.core.LayoutModifier BottomRight;
-    property public final androidx.ui.core.LayoutModifier Center;
-    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
-    property public final androidx.ui.core.LayoutModifier CenterLeft;
-    property public final androidx.ui.core.LayoutModifier CenterRight;
-    property public final androidx.ui.core.LayoutModifier CenterVertically;
-    property public final androidx.ui.core.LayoutModifier End;
-    property public final androidx.ui.core.LayoutModifier Start;
-    property public final androidx.ui.core.LayoutModifier Top;
-    property public final androidx.ui.core.LayoutModifier TopCenter;
-    property public final androidx.ui.core.LayoutModifier TopLeft;
-    property public final androidx.ui.core.LayoutModifier TopRight;
-    field public static final androidx.ui.layout.Aligned! INSTANCE;
-  }
-
   public final class AlignmentLineKt {
     ctor public AlignmentLineKt();
     method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
 
   public final class AspectRatioKt {
     ctor public AspectRatioKt();
-    method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
     method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class ColumnScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier End;
     property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
 
   public final class ExpandedModifierKt {
     ctor public ExpandedModifierKt();
-    method public static androidx.ui.core.LayoutModifier getExpanded();
-    method public static androidx.ui.core.LayoutModifier getExpandedHeight();
-    method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
   }
 
   public final class FlexChildren {
@@ -187,10 +152,10 @@
   }
 
   @androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
-    method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
-    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
-    method public final androidx.ui.core.LayoutModifier getInflexible();
-    property public final androidx.ui.core.LayoutModifier Inflexible;
+    method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+    method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+    property public final androidx.ui.core.LayoutModifier LayoutInflexible;
   }
 
   public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
     method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Gravity {
-    field public static final androidx.ui.layout.Gravity! INSTANCE;
-  }
-
   public final class IntrinsicKt {
     ctor public IntrinsicKt();
     method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
     method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
+  public final class LayoutAlign {
+    method public androidx.ui.core.LayoutModifier getBottom();
+    method public androidx.ui.core.LayoutModifier getBottomCenter();
+    method public androidx.ui.core.LayoutModifier getBottomLeft();
+    method public androidx.ui.core.LayoutModifier getBottomRight();
+    method public androidx.ui.core.LayoutModifier getCenter();
+    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+    method public androidx.ui.core.LayoutModifier getCenterLeft();
+    method public androidx.ui.core.LayoutModifier getCenterRight();
+    method public androidx.ui.core.LayoutModifier getCenterVertically();
+    method public androidx.ui.core.LayoutModifier getEnd();
+    method public androidx.ui.core.LayoutModifier getStart();
+    method public androidx.ui.core.LayoutModifier getTop();
+    method public androidx.ui.core.LayoutModifier getTopCenter();
+    method public androidx.ui.core.LayoutModifier getTopLeft();
+    method public androidx.ui.core.LayoutModifier getTopRight();
+    property public final androidx.ui.core.LayoutModifier Bottom;
+    property public final androidx.ui.core.LayoutModifier BottomCenter;
+    property public final androidx.ui.core.LayoutModifier BottomLeft;
+    property public final androidx.ui.core.LayoutModifier BottomRight;
+    property public final androidx.ui.core.LayoutModifier Center;
+    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+    property public final androidx.ui.core.LayoutModifier CenterLeft;
+    property public final androidx.ui.core.LayoutModifier CenterRight;
+    property public final androidx.ui.core.LayoutModifier CenterVertically;
+    property public final androidx.ui.core.LayoutModifier End;
+    property public final androidx.ui.core.LayoutModifier Start;
+    property public final androidx.ui.core.LayoutModifier Top;
+    property public final androidx.ui.core.LayoutModifier TopCenter;
+    property public final androidx.ui.core.LayoutModifier TopLeft;
+    property public final androidx.ui.core.LayoutModifier TopRight;
+    field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+  }
+
+  public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+    method public float component1();
+    method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+    method public float getAspectRatio();
+    method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+  }
+
+  public final class LayoutGravity {
+    field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+  }
+
+  public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    ctor public LayoutPadding();
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Dp component3();
+    method public androidx.ui.core.Dp component4();
+    method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    method public androidx.ui.core.Dp getBottom();
+    method public androidx.ui.core.Dp getLeft();
+    method public androidx.ui.core.Dp getRight();
+    method public androidx.ui.core.Dp getTop();
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+    method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+    method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+  }
+
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
@@ -234,11 +262,21 @@
     enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
   }
 
+  public final class PaddingKt {
+    ctor public PaddingKt();
+    method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+  }
+
   public final class RowScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Bottom;
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
 
   public final class SizeModifiersKt {
     ctor public SizeModifiersKt();
-    method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
-    method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
-    method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
-    method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
   }
 
   public final class SpacerKt {
@@ -262,15 +300,6 @@
     method public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
-  public final class SpacingKt {
-    ctor public SpacingKt();
-    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
-  }
-
   public final class StackKt {
     ctor public StackKt();
     method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
 
   @androidx.ui.layout.LayoutScopeMarker public final class StackScope {
     ctor public StackScope();
-    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier BottomCenter;
     property public final androidx.ui.core.LayoutModifier BottomLeft;
     property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
   public final class WrapKt {
     ctor public WrapKt();
     method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier getWrapped();
+    method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
   }
 
 }
diff --git a/ui/ui-layout/api/public_plus_experimental_0.1.0-dev04.txt b/ui/ui-layout/api/public_plus_experimental_0.1.0-dev04.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/public_plus_experimental_0.1.0-dev04.txt
+++ b/ui/ui-layout/api/public_plus_experimental_0.1.0-dev04.txt
@@ -7,40 +7,6 @@
     method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Aligned {
-    method public androidx.ui.core.LayoutModifier getBottom();
-    method public androidx.ui.core.LayoutModifier getBottomCenter();
-    method public androidx.ui.core.LayoutModifier getBottomLeft();
-    method public androidx.ui.core.LayoutModifier getBottomRight();
-    method public androidx.ui.core.LayoutModifier getCenter();
-    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
-    method public androidx.ui.core.LayoutModifier getCenterLeft();
-    method public androidx.ui.core.LayoutModifier getCenterRight();
-    method public androidx.ui.core.LayoutModifier getCenterVertically();
-    method public androidx.ui.core.LayoutModifier getEnd();
-    method public androidx.ui.core.LayoutModifier getStart();
-    method public androidx.ui.core.LayoutModifier getTop();
-    method public androidx.ui.core.LayoutModifier getTopCenter();
-    method public androidx.ui.core.LayoutModifier getTopLeft();
-    method public androidx.ui.core.LayoutModifier getTopRight();
-    property public final androidx.ui.core.LayoutModifier Bottom;
-    property public final androidx.ui.core.LayoutModifier BottomCenter;
-    property public final androidx.ui.core.LayoutModifier BottomLeft;
-    property public final androidx.ui.core.LayoutModifier BottomRight;
-    property public final androidx.ui.core.LayoutModifier Center;
-    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
-    property public final androidx.ui.core.LayoutModifier CenterLeft;
-    property public final androidx.ui.core.LayoutModifier CenterRight;
-    property public final androidx.ui.core.LayoutModifier CenterVertically;
-    property public final androidx.ui.core.LayoutModifier End;
-    property public final androidx.ui.core.LayoutModifier Start;
-    property public final androidx.ui.core.LayoutModifier Top;
-    property public final androidx.ui.core.LayoutModifier TopCenter;
-    property public final androidx.ui.core.LayoutModifier TopLeft;
-    property public final androidx.ui.core.LayoutModifier TopRight;
-    field public static final androidx.ui.layout.Aligned! INSTANCE;
-  }
-
   public final class AlignmentLineKt {
     ctor public AlignmentLineKt();
     method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
 
   public final class AspectRatioKt {
     ctor public AspectRatioKt();
-    method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
     method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class ColumnScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier End;
     property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
 
   public final class ExpandedModifierKt {
     ctor public ExpandedModifierKt();
-    method public static androidx.ui.core.LayoutModifier getExpanded();
-    method public static androidx.ui.core.LayoutModifier getExpandedHeight();
-    method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
   }
 
   public final class FlexChildren {
@@ -187,10 +152,10 @@
   }
 
   @androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
-    method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
-    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
-    method public final androidx.ui.core.LayoutModifier getInflexible();
-    property public final androidx.ui.core.LayoutModifier Inflexible;
+    method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+    method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+    property public final androidx.ui.core.LayoutModifier LayoutInflexible;
   }
 
   public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
     method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Gravity {
-    field public static final androidx.ui.layout.Gravity! INSTANCE;
-  }
-
   public final class IntrinsicKt {
     ctor public IntrinsicKt();
     method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
     method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
+  public final class LayoutAlign {
+    method public androidx.ui.core.LayoutModifier getBottom();
+    method public androidx.ui.core.LayoutModifier getBottomCenter();
+    method public androidx.ui.core.LayoutModifier getBottomLeft();
+    method public androidx.ui.core.LayoutModifier getBottomRight();
+    method public androidx.ui.core.LayoutModifier getCenter();
+    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+    method public androidx.ui.core.LayoutModifier getCenterLeft();
+    method public androidx.ui.core.LayoutModifier getCenterRight();
+    method public androidx.ui.core.LayoutModifier getCenterVertically();
+    method public androidx.ui.core.LayoutModifier getEnd();
+    method public androidx.ui.core.LayoutModifier getStart();
+    method public androidx.ui.core.LayoutModifier getTop();
+    method public androidx.ui.core.LayoutModifier getTopCenter();
+    method public androidx.ui.core.LayoutModifier getTopLeft();
+    method public androidx.ui.core.LayoutModifier getTopRight();
+    property public final androidx.ui.core.LayoutModifier Bottom;
+    property public final androidx.ui.core.LayoutModifier BottomCenter;
+    property public final androidx.ui.core.LayoutModifier BottomLeft;
+    property public final androidx.ui.core.LayoutModifier BottomRight;
+    property public final androidx.ui.core.LayoutModifier Center;
+    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+    property public final androidx.ui.core.LayoutModifier CenterLeft;
+    property public final androidx.ui.core.LayoutModifier CenterRight;
+    property public final androidx.ui.core.LayoutModifier CenterVertically;
+    property public final androidx.ui.core.LayoutModifier End;
+    property public final androidx.ui.core.LayoutModifier Start;
+    property public final androidx.ui.core.LayoutModifier Top;
+    property public final androidx.ui.core.LayoutModifier TopCenter;
+    property public final androidx.ui.core.LayoutModifier TopLeft;
+    property public final androidx.ui.core.LayoutModifier TopRight;
+    field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+  }
+
+  public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+    method public float component1();
+    method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+    method public float getAspectRatio();
+    method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+  }
+
+  public final class LayoutGravity {
+    field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+  }
+
+  public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    ctor public LayoutPadding();
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Dp component3();
+    method public androidx.ui.core.Dp component4();
+    method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    method public androidx.ui.core.Dp getBottom();
+    method public androidx.ui.core.Dp getLeft();
+    method public androidx.ui.core.Dp getRight();
+    method public androidx.ui.core.Dp getTop();
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+    method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+    method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+  }
+
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
@@ -234,11 +262,21 @@
     enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
   }
 
+  public final class PaddingKt {
+    ctor public PaddingKt();
+    method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+  }
+
   public final class RowScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Bottom;
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
 
   public final class SizeModifiersKt {
     ctor public SizeModifiersKt();
-    method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
-    method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
-    method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
-    method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
   }
 
   public final class SpacerKt {
@@ -262,15 +300,6 @@
     method public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
-  public final class SpacingKt {
-    ctor public SpacingKt();
-    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
-  }
-
   public final class StackKt {
     ctor public StackKt();
     method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
 
   @androidx.ui.layout.LayoutScopeMarker public final class StackScope {
     ctor public StackScope();
-    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier BottomCenter;
     property public final androidx.ui.core.LayoutModifier BottomLeft;
     property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
   public final class WrapKt {
     ctor public WrapKt();
     method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier getWrapped();
+    method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
   }
 
 }
diff --git a/ui/ui-layout/api/public_plus_experimental_current.txt b/ui/ui-layout/api/public_plus_experimental_current.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/public_plus_experimental_current.txt
+++ b/ui/ui-layout/api/public_plus_experimental_current.txt
@@ -7,40 +7,6 @@
     method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Aligned {
-    method public androidx.ui.core.LayoutModifier getBottom();
-    method public androidx.ui.core.LayoutModifier getBottomCenter();
-    method public androidx.ui.core.LayoutModifier getBottomLeft();
-    method public androidx.ui.core.LayoutModifier getBottomRight();
-    method public androidx.ui.core.LayoutModifier getCenter();
-    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
-    method public androidx.ui.core.LayoutModifier getCenterLeft();
-    method public androidx.ui.core.LayoutModifier getCenterRight();
-    method public androidx.ui.core.LayoutModifier getCenterVertically();
-    method public androidx.ui.core.LayoutModifier getEnd();
-    method public androidx.ui.core.LayoutModifier getStart();
-    method public androidx.ui.core.LayoutModifier getTop();
-    method public androidx.ui.core.LayoutModifier getTopCenter();
-    method public androidx.ui.core.LayoutModifier getTopLeft();
-    method public androidx.ui.core.LayoutModifier getTopRight();
-    property public final androidx.ui.core.LayoutModifier Bottom;
-    property public final androidx.ui.core.LayoutModifier BottomCenter;
-    property public final androidx.ui.core.LayoutModifier BottomLeft;
-    property public final androidx.ui.core.LayoutModifier BottomRight;
-    property public final androidx.ui.core.LayoutModifier Center;
-    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
-    property public final androidx.ui.core.LayoutModifier CenterLeft;
-    property public final androidx.ui.core.LayoutModifier CenterRight;
-    property public final androidx.ui.core.LayoutModifier CenterVertically;
-    property public final androidx.ui.core.LayoutModifier End;
-    property public final androidx.ui.core.LayoutModifier Start;
-    property public final androidx.ui.core.LayoutModifier Top;
-    property public final androidx.ui.core.LayoutModifier TopCenter;
-    property public final androidx.ui.core.LayoutModifier TopLeft;
-    property public final androidx.ui.core.LayoutModifier TopRight;
-    field public static final androidx.ui.layout.Aligned! INSTANCE;
-  }
-
   public final class AlignmentLineKt {
     ctor public AlignmentLineKt();
     method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
 
   public final class AspectRatioKt {
     ctor public AspectRatioKt();
-    method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
     method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class ColumnScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier End;
     property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
 
   public final class ExpandedModifierKt {
     ctor public ExpandedModifierKt();
-    method public static androidx.ui.core.LayoutModifier getExpanded();
-    method public static androidx.ui.core.LayoutModifier getExpandedHeight();
-    method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
   }
 
   public final class FlexChildren {
@@ -187,10 +152,10 @@
   }
 
   @androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
-    method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
-    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
-    method public final androidx.ui.core.LayoutModifier getInflexible();
-    property public final androidx.ui.core.LayoutModifier Inflexible;
+    method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+    method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+    property public final androidx.ui.core.LayoutModifier LayoutInflexible;
   }
 
   public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
     method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Gravity {
-    field public static final androidx.ui.layout.Gravity! INSTANCE;
-  }
-
   public final class IntrinsicKt {
     ctor public IntrinsicKt();
     method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
     method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
+  public final class LayoutAlign {
+    method public androidx.ui.core.LayoutModifier getBottom();
+    method public androidx.ui.core.LayoutModifier getBottomCenter();
+    method public androidx.ui.core.LayoutModifier getBottomLeft();
+    method public androidx.ui.core.LayoutModifier getBottomRight();
+    method public androidx.ui.core.LayoutModifier getCenter();
+    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+    method public androidx.ui.core.LayoutModifier getCenterLeft();
+    method public androidx.ui.core.LayoutModifier getCenterRight();
+    method public androidx.ui.core.LayoutModifier getCenterVertically();
+    method public androidx.ui.core.LayoutModifier getEnd();
+    method public androidx.ui.core.LayoutModifier getStart();
+    method public androidx.ui.core.LayoutModifier getTop();
+    method public androidx.ui.core.LayoutModifier getTopCenter();
+    method public androidx.ui.core.LayoutModifier getTopLeft();
+    method public androidx.ui.core.LayoutModifier getTopRight();
+    property public final androidx.ui.core.LayoutModifier Bottom;
+    property public final androidx.ui.core.LayoutModifier BottomCenter;
+    property public final androidx.ui.core.LayoutModifier BottomLeft;
+    property public final androidx.ui.core.LayoutModifier BottomRight;
+    property public final androidx.ui.core.LayoutModifier Center;
+    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+    property public final androidx.ui.core.LayoutModifier CenterLeft;
+    property public final androidx.ui.core.LayoutModifier CenterRight;
+    property public final androidx.ui.core.LayoutModifier CenterVertically;
+    property public final androidx.ui.core.LayoutModifier End;
+    property public final androidx.ui.core.LayoutModifier Start;
+    property public final androidx.ui.core.LayoutModifier Top;
+    property public final androidx.ui.core.LayoutModifier TopCenter;
+    property public final androidx.ui.core.LayoutModifier TopLeft;
+    property public final androidx.ui.core.LayoutModifier TopRight;
+    field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+  }
+
+  public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+    method public float component1();
+    method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+    method public float getAspectRatio();
+    method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+  }
+
+  public final class LayoutGravity {
+    field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+  }
+
+  public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    ctor public LayoutPadding();
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Dp component3();
+    method public androidx.ui.core.Dp component4();
+    method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    method public androidx.ui.core.Dp getBottom();
+    method public androidx.ui.core.Dp getLeft();
+    method public androidx.ui.core.Dp getRight();
+    method public androidx.ui.core.Dp getTop();
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+    method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+    method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+  }
+
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
@@ -234,11 +262,21 @@
     enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
   }
 
+  public final class PaddingKt {
+    ctor public PaddingKt();
+    method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+  }
+
   public final class RowScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Bottom;
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
 
   public final class SizeModifiersKt {
     ctor public SizeModifiersKt();
-    method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
-    method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
-    method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
-    method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
   }
 
   public final class SpacerKt {
@@ -262,15 +300,6 @@
     method public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
-  public final class SpacingKt {
-    ctor public SpacingKt();
-    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
-  }
-
   public final class StackKt {
     ctor public StackKt();
     method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
 
   @androidx.ui.layout.LayoutScopeMarker public final class StackScope {
     ctor public StackScope();
-    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier BottomCenter;
     property public final androidx.ui.core.LayoutModifier BottomLeft;
     property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
   public final class WrapKt {
     ctor public WrapKt();
     method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier getWrapped();
+    method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
   }
 
 }
diff --git a/ui/ui-layout/api/restricted_0.1.0-dev04.txt b/ui/ui-layout/api/restricted_0.1.0-dev04.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/restricted_0.1.0-dev04.txt
+++ b/ui/ui-layout/api/restricted_0.1.0-dev04.txt
@@ -7,40 +7,6 @@
     method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Aligned {
-    method public androidx.ui.core.LayoutModifier getBottom();
-    method public androidx.ui.core.LayoutModifier getBottomCenter();
-    method public androidx.ui.core.LayoutModifier getBottomLeft();
-    method public androidx.ui.core.LayoutModifier getBottomRight();
-    method public androidx.ui.core.LayoutModifier getCenter();
-    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
-    method public androidx.ui.core.LayoutModifier getCenterLeft();
-    method public androidx.ui.core.LayoutModifier getCenterRight();
-    method public androidx.ui.core.LayoutModifier getCenterVertically();
-    method public androidx.ui.core.LayoutModifier getEnd();
-    method public androidx.ui.core.LayoutModifier getStart();
-    method public androidx.ui.core.LayoutModifier getTop();
-    method public androidx.ui.core.LayoutModifier getTopCenter();
-    method public androidx.ui.core.LayoutModifier getTopLeft();
-    method public androidx.ui.core.LayoutModifier getTopRight();
-    property public final androidx.ui.core.LayoutModifier Bottom;
-    property public final androidx.ui.core.LayoutModifier BottomCenter;
-    property public final androidx.ui.core.LayoutModifier BottomLeft;
-    property public final androidx.ui.core.LayoutModifier BottomRight;
-    property public final androidx.ui.core.LayoutModifier Center;
-    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
-    property public final androidx.ui.core.LayoutModifier CenterLeft;
-    property public final androidx.ui.core.LayoutModifier CenterRight;
-    property public final androidx.ui.core.LayoutModifier CenterVertically;
-    property public final androidx.ui.core.LayoutModifier End;
-    property public final androidx.ui.core.LayoutModifier Start;
-    property public final androidx.ui.core.LayoutModifier Top;
-    property public final androidx.ui.core.LayoutModifier TopCenter;
-    property public final androidx.ui.core.LayoutModifier TopLeft;
-    property public final androidx.ui.core.LayoutModifier TopRight;
-    field public static final androidx.ui.layout.Aligned! INSTANCE;
-  }
-
   public final class AlignmentLineKt {
     ctor public AlignmentLineKt();
     method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
 
   public final class AspectRatioKt {
     ctor public AspectRatioKt();
-    method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
     method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class ColumnScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier End;
     property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
 
   public final class ExpandedModifierKt {
     ctor public ExpandedModifierKt();
-    method public static androidx.ui.core.LayoutModifier getExpanded();
-    method public static androidx.ui.core.LayoutModifier getExpandedHeight();
-    method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
   }
 
   public final class FlexChildren {
@@ -187,10 +152,10 @@
   }
 
   @androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
-    method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
-    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
-    method public final androidx.ui.core.LayoutModifier getInflexible();
-    property public final androidx.ui.core.LayoutModifier Inflexible;
+    method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+    method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+    property public final androidx.ui.core.LayoutModifier LayoutInflexible;
   }
 
   public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
     method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Gravity {
-    field public static final androidx.ui.layout.Gravity! INSTANCE;
-  }
-
   public final class IntrinsicKt {
     ctor public IntrinsicKt();
     method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
     method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
+  public final class LayoutAlign {
+    method public androidx.ui.core.LayoutModifier getBottom();
+    method public androidx.ui.core.LayoutModifier getBottomCenter();
+    method public androidx.ui.core.LayoutModifier getBottomLeft();
+    method public androidx.ui.core.LayoutModifier getBottomRight();
+    method public androidx.ui.core.LayoutModifier getCenter();
+    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+    method public androidx.ui.core.LayoutModifier getCenterLeft();
+    method public androidx.ui.core.LayoutModifier getCenterRight();
+    method public androidx.ui.core.LayoutModifier getCenterVertically();
+    method public androidx.ui.core.LayoutModifier getEnd();
+    method public androidx.ui.core.LayoutModifier getStart();
+    method public androidx.ui.core.LayoutModifier getTop();
+    method public androidx.ui.core.LayoutModifier getTopCenter();
+    method public androidx.ui.core.LayoutModifier getTopLeft();
+    method public androidx.ui.core.LayoutModifier getTopRight();
+    property public final androidx.ui.core.LayoutModifier Bottom;
+    property public final androidx.ui.core.LayoutModifier BottomCenter;
+    property public final androidx.ui.core.LayoutModifier BottomLeft;
+    property public final androidx.ui.core.LayoutModifier BottomRight;
+    property public final androidx.ui.core.LayoutModifier Center;
+    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+    property public final androidx.ui.core.LayoutModifier CenterLeft;
+    property public final androidx.ui.core.LayoutModifier CenterRight;
+    property public final androidx.ui.core.LayoutModifier CenterVertically;
+    property public final androidx.ui.core.LayoutModifier End;
+    property public final androidx.ui.core.LayoutModifier Start;
+    property public final androidx.ui.core.LayoutModifier Top;
+    property public final androidx.ui.core.LayoutModifier TopCenter;
+    property public final androidx.ui.core.LayoutModifier TopLeft;
+    property public final androidx.ui.core.LayoutModifier TopRight;
+    field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+  }
+
+  public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+    method public float component1();
+    method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+    method public float getAspectRatio();
+    method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+  }
+
+  public final class LayoutGravity {
+    field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+  }
+
+  public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    ctor public LayoutPadding();
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Dp component3();
+    method public androidx.ui.core.Dp component4();
+    method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    method public androidx.ui.core.Dp getBottom();
+    method public androidx.ui.core.Dp getLeft();
+    method public androidx.ui.core.Dp getRight();
+    method public androidx.ui.core.Dp getTop();
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+    method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+    method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+  }
+
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
@@ -234,11 +262,21 @@
     enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
   }
 
+  public final class PaddingKt {
+    ctor public PaddingKt();
+    method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+  }
+
   public final class RowScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Bottom;
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
 
   public final class SizeModifiersKt {
     ctor public SizeModifiersKt();
-    method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
-    method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
-    method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
-    method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
   }
 
   public final class SpacerKt {
@@ -262,15 +300,6 @@
     method public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
-  public final class SpacingKt {
-    ctor public SpacingKt();
-    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
-  }
-
   public final class StackKt {
     ctor public StackKt();
     method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
 
   @androidx.ui.layout.LayoutScopeMarker public final class StackScope {
     ctor public StackScope();
-    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier BottomCenter;
     property public final androidx.ui.core.LayoutModifier BottomLeft;
     property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
   public final class WrapKt {
     ctor public WrapKt();
     method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier getWrapped();
+    method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
   }
 
 }
diff --git a/ui/ui-layout/api/restricted_current.txt b/ui/ui-layout/api/restricted_current.txt
index 5702127..2a59b89 100644
--- a/ui/ui-layout/api/restricted_current.txt
+++ b/ui/ui-layout/api/restricted_current.txt
@@ -7,40 +7,6 @@
     method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Aligned {
-    method public androidx.ui.core.LayoutModifier getBottom();
-    method public androidx.ui.core.LayoutModifier getBottomCenter();
-    method public androidx.ui.core.LayoutModifier getBottomLeft();
-    method public androidx.ui.core.LayoutModifier getBottomRight();
-    method public androidx.ui.core.LayoutModifier getCenter();
-    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
-    method public androidx.ui.core.LayoutModifier getCenterLeft();
-    method public androidx.ui.core.LayoutModifier getCenterRight();
-    method public androidx.ui.core.LayoutModifier getCenterVertically();
-    method public androidx.ui.core.LayoutModifier getEnd();
-    method public androidx.ui.core.LayoutModifier getStart();
-    method public androidx.ui.core.LayoutModifier getTop();
-    method public androidx.ui.core.LayoutModifier getTopCenter();
-    method public androidx.ui.core.LayoutModifier getTopLeft();
-    method public androidx.ui.core.LayoutModifier getTopRight();
-    property public final androidx.ui.core.LayoutModifier Bottom;
-    property public final androidx.ui.core.LayoutModifier BottomCenter;
-    property public final androidx.ui.core.LayoutModifier BottomLeft;
-    property public final androidx.ui.core.LayoutModifier BottomRight;
-    property public final androidx.ui.core.LayoutModifier Center;
-    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
-    property public final androidx.ui.core.LayoutModifier CenterLeft;
-    property public final androidx.ui.core.LayoutModifier CenterRight;
-    property public final androidx.ui.core.LayoutModifier CenterVertically;
-    property public final androidx.ui.core.LayoutModifier End;
-    property public final androidx.ui.core.LayoutModifier Start;
-    property public final androidx.ui.core.LayoutModifier Top;
-    property public final androidx.ui.core.LayoutModifier TopCenter;
-    property public final androidx.ui.core.LayoutModifier TopLeft;
-    property public final androidx.ui.core.LayoutModifier TopRight;
-    field public static final androidx.ui.layout.Aligned! INSTANCE;
-  }
-
   public final class AlignmentLineKt {
     ctor public AlignmentLineKt();
     method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -69,15 +35,14 @@
 
   public final class AspectRatioKt {
     ctor public AspectRatioKt();
-    method public static androidx.ui.core.LayoutModifier AspectRatio(@FloatRange(from=0.0, fromInclusive=false) float value);
     method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class ColumnScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier End;
     property public final androidx.ui.core.LayoutModifier Start;
@@ -167,9 +132,9 @@
 
   public final class ExpandedModifierKt {
     ctor public ExpandedModifierKt();
-    method public static androidx.ui.core.LayoutModifier getExpanded();
-    method public static androidx.ui.core.LayoutModifier getExpandedHeight();
-    method public static androidx.ui.core.LayoutModifier getExpandedWidth();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpanded();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedHeight();
+    method public static androidx.ui.core.LayoutModifier getLayoutExpandedWidth();
   }
 
   public final class FlexChildren {
@@ -187,10 +152,10 @@
   }
 
   @androidx.ui.layout.LayoutScopeMarker public abstract sealed class FlexScope {
-    method public final androidx.ui.core.LayoutModifier Flexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
-    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
-    method public final androidx.ui.core.LayoutModifier getInflexible();
-    property public final androidx.ui.core.LayoutModifier Inflexible;
+    method public final androidx.ui.core.LayoutModifier LayoutFlexible(@FloatRange(from=0.0, fromInclusive=false) float flex, boolean tight = true);
+    method public final androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable,androidx.ui.core.IntPx> alignmentLineBlock);
+    method public final androidx.ui.core.LayoutModifier getLayoutInflexible();
+    property public final androidx.ui.core.LayoutModifier LayoutInflexible;
   }
 
   public enum FlowCrossAxisAlignment {
@@ -205,10 +170,6 @@
     method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
-  public final class Gravity {
-    field public static final androidx.ui.layout.Gravity! INSTANCE;
-  }
-
   public final class IntrinsicKt {
     ctor public IntrinsicKt();
     method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -217,6 +178,73 @@
     method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
+  public final class LayoutAlign {
+    method public androidx.ui.core.LayoutModifier getBottom();
+    method public androidx.ui.core.LayoutModifier getBottomCenter();
+    method public androidx.ui.core.LayoutModifier getBottomLeft();
+    method public androidx.ui.core.LayoutModifier getBottomRight();
+    method public androidx.ui.core.LayoutModifier getCenter();
+    method public androidx.ui.core.LayoutModifier getCenterHorizontally();
+    method public androidx.ui.core.LayoutModifier getCenterLeft();
+    method public androidx.ui.core.LayoutModifier getCenterRight();
+    method public androidx.ui.core.LayoutModifier getCenterVertically();
+    method public androidx.ui.core.LayoutModifier getEnd();
+    method public androidx.ui.core.LayoutModifier getStart();
+    method public androidx.ui.core.LayoutModifier getTop();
+    method public androidx.ui.core.LayoutModifier getTopCenter();
+    method public androidx.ui.core.LayoutModifier getTopLeft();
+    method public androidx.ui.core.LayoutModifier getTopRight();
+    property public final androidx.ui.core.LayoutModifier Bottom;
+    property public final androidx.ui.core.LayoutModifier BottomCenter;
+    property public final androidx.ui.core.LayoutModifier BottomLeft;
+    property public final androidx.ui.core.LayoutModifier BottomRight;
+    property public final androidx.ui.core.LayoutModifier Center;
+    property public final androidx.ui.core.LayoutModifier CenterHorizontally;
+    property public final androidx.ui.core.LayoutModifier CenterLeft;
+    property public final androidx.ui.core.LayoutModifier CenterRight;
+    property public final androidx.ui.core.LayoutModifier CenterVertically;
+    property public final androidx.ui.core.LayoutModifier End;
+    property public final androidx.ui.core.LayoutModifier Start;
+    property public final androidx.ui.core.LayoutModifier Top;
+    property public final androidx.ui.core.LayoutModifier TopCenter;
+    property public final androidx.ui.core.LayoutModifier TopLeft;
+    property public final androidx.ui.core.LayoutModifier TopRight;
+    field public static final androidx.ui.layout.LayoutAlign! INSTANCE;
+  }
+
+  public final class LayoutAspectRatio implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutAspectRatio(@FloatRange(from=null, fromInclusive=null) float aspectRatio);
+    method public float component1();
+    method public androidx.ui.layout.LayoutAspectRatio copy(float aspectRatio);
+    method public float getAspectRatio();
+    method public androidx.ui.core.IntPx maxIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx maxIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.IntPx minIntrinsicHeightOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx minIntrinsicWidthOf(androidx.ui.core.DensityScope, androidx.ui.core.Measurable measurable, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+  }
+
+  public final class LayoutGravity {
+    field public static final androidx.ui.layout.LayoutGravity! INSTANCE;
+  }
+
+  public final class LayoutPadding implements androidx.ui.core.LayoutModifier {
+    ctor public LayoutPadding(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    ctor public LayoutPadding();
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Dp component3();
+    method public androidx.ui.core.Dp component4();
+    method public androidx.ui.layout.LayoutPadding copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    method public androidx.ui.core.Dp getBottom();
+    method public androidx.ui.core.Dp getLeft();
+    method public androidx.ui.core.Dp getRight();
+    method public androidx.ui.core.Dp getTop();
+    method public androidx.ui.core.Constraints modifyConstraints(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints);
+    method public androidx.ui.core.IntPxPosition modifyPosition(androidx.ui.core.DensityScope, androidx.ui.core.IntPxSize childSize, androidx.ui.core.IntPxSize containerSize);
+    method public androidx.ui.core.IntPxSize modifySize(androidx.ui.core.DensityScope, androidx.ui.core.Constraints constraints, androidx.ui.core.IntPxSize childSize);
+  }
+
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
@@ -234,11 +262,21 @@
     enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
   }
 
+  public final class PaddingKt {
+    ctor public PaddingKt();
+    method public static androidx.ui.layout.LayoutPadding LayoutPadding(androidx.ui.core.Dp all);
+    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
+    method @Deprecated public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
+  }
+
   public final class RowScope extends androidx.ui.layout.FlexScope {
-    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.Gravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier RelativeToSiblings(androidx.ui.layout.LayoutGravity, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier Bottom;
     property public final androidx.ui.core.LayoutModifier Center;
     property public final androidx.ui.core.LayoutModifier Top;
@@ -246,15 +284,15 @@
 
   public final class SizeModifiersKt {
     ctor public SizeModifiersKt();
-    method public static androidx.ui.core.LayoutModifier Height(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
-    method public static androidx.ui.core.LayoutModifier MaxWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinHeight(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier MinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
-    method public static androidx.ui.core.LayoutModifier MinWidth(androidx.ui.core.Dp value);
-    method public static androidx.ui.core.LayoutModifier Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
-    method public static androidx.ui.core.LayoutModifier Width(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxSize(androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp maxHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMaxWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinHeight(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutMinSize(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp minHeight);
+    method public static androidx.ui.core.LayoutModifier LayoutMinWidth(androidx.ui.core.Dp value);
+    method public static androidx.ui.core.LayoutModifier LayoutSize(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public static androidx.ui.core.LayoutModifier LayoutWidth(androidx.ui.core.Dp value);
   }
 
   public final class SpacerKt {
@@ -262,15 +300,6 @@
     method public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
-  public final class SpacingKt {
-    ctor public SpacingKt();
-    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp);
-    method public static androidx.ui.core.LayoutModifier Spacing(androidx.ui.core.Dp all = 0.dp);
-  }
-
   public final class StackKt {
     ctor public StackKt();
     method public static void Stack(androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackScope,kotlin.Unit> children);
@@ -278,16 +307,16 @@
 
   @androidx.ui.layout.LayoutScopeMarker public final class StackScope {
     ctor public StackScope();
-    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.Gravity);
-    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.Gravity);
+    method public androidx.ui.core.LayoutModifier getBottomCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getBottomRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getCenterRight(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getStretch(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopCenter(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopLeft(androidx.ui.layout.LayoutGravity);
+    method public androidx.ui.core.LayoutModifier getTopRight(androidx.ui.layout.LayoutGravity);
     property public final androidx.ui.core.LayoutModifier BottomCenter;
     property public final androidx.ui.core.LayoutModifier BottomLeft;
     property public final androidx.ui.core.LayoutModifier BottomRight;
@@ -387,7 +416,7 @@
   public final class WrapKt {
     ctor public WrapKt();
     method public static void Wrap(androidx.ui.core.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.core.LayoutModifier getWrapped();
+    method public static androidx.ui.core.LayoutModifier getLayoutWrapped();
   }
 
 }
diff --git a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
index 03ea3fc..11ec997 100644
--- a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
+++ b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
@@ -17,43 +17,43 @@
 package androidx.ui.layout.demos
 
 import android.os.Handler
-import androidx.ui.core.Constraints
-import androidx.ui.core.Draw
-import androidx.ui.core.IntPx
-import androidx.ui.core.IntPxSize
-import androidx.ui.core.Layout
-import androidx.ui.core.WithConstraints
-import androidx.ui.core.constrain
-import androidx.ui.core.dp
-import androidx.ui.core.ipx
-import androidx.ui.core.max
-import androidx.ui.core.toRect
-import androidx.ui.layout.Align
-import androidx.ui.layout.Center
-import androidx.ui.layout.Column
-import androidx.ui.layout.ConstrainedBox
-import androidx.ui.layout.DpConstraints
-import androidx.ui.layout.FlexColumn
-import androidx.ui.layout.FlexRow
-import androidx.ui.layout.Padding
-import androidx.ui.layout.Row
-import androidx.ui.layout.Stack
-import androidx.ui.graphics.Color
-import androidx.ui.graphics.Paint
 import androidx.compose.Composable
 import androidx.compose.Model
 import androidx.compose.effectOf
 import androidx.compose.memo
 import androidx.compose.onCommit
 import androidx.ui.core.Alignment
+import androidx.ui.core.Constraints
+import androidx.ui.core.Draw
 import androidx.ui.core.FirstBaseline
 import androidx.ui.core.HorizontalAlignmentLine
+import androidx.ui.core.IntPx
+import androidx.ui.core.IntPxSize
+import androidx.ui.core.Layout
 import androidx.ui.core.Text
 import androidx.ui.core.VerticalAlignmentLine
+import androidx.ui.core.WithConstraints
+import androidx.ui.core.constrain
+import androidx.ui.core.dp
+import androidx.ui.core.ipx
+import androidx.ui.core.max
 import androidx.ui.core.sp
+import androidx.ui.core.toRect
+import androidx.ui.graphics.Color
+import androidx.ui.graphics.Paint
+import androidx.ui.layout.Align
 import androidx.ui.layout.AlignmentLineOffset
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.Center
+import androidx.ui.layout.Column
+import androidx.ui.layout.ConstrainedBox
+import androidx.ui.layout.DpConstraints
+import androidx.ui.layout.FlexColumn
+import androidx.ui.layout.FlexRow
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutPadding
+import androidx.ui.layout.Padding
+import androidx.ui.layout.Row
+import androidx.ui.layout.Stack
 import androidx.ui.layout.Wrap
 import androidx.ui.layout.samples.DrawRectangle
 import androidx.ui.layout.samples.SizedRectangle
@@ -177,17 +177,17 @@
 @Composable
 fun StackUsage() {
     Stack {
-        SizedRectangle(Gravity.Stretch, color = Color(0xFFA52A2A))
-        SizedRectangle(Gravity.Stretch wraps Spacing(40.dp), color = Color(0xFFFFA500))
+        SizedRectangle(LayoutGravity.Stretch, color = Color(0xFFA52A2A))
+        SizedRectangle(LayoutGravity.Stretch + LayoutPadding(40.dp), color = Color(0xFFFFA500))
         SizedRectangle(
-            modifier = Gravity.Center,
+            modifier = LayoutGravity.Center,
             color = Color(0xFF0000FF),
             width = 300.dp,
             height = 300.dp
         )
         SizedRectangle(color = Color(0xFF00FF00), width = 150.dp, height = 150.dp)
         SizedRectangle(
-            modifier = Gravity.BottomRight,
+            modifier = LayoutGravity.BottomRight,
             color = Color(0xFFFF0000),
             width = 150.dp,
             height = 150.dp
@@ -376,8 +376,8 @@
 @Composable
 fun RowBaselineAlignment() {
     Row {
-        Text("First text", modifier = Gravity.RelativeToSiblings(FirstBaseline))
-        Column(modifier = Gravity.RelativeToSiblings(FirstBaseline)) {
+        Text("First text", modifier = LayoutGravity.RelativeToSiblings(FirstBaseline))
+        Column(modifier = LayoutGravity.RelativeToSiblings(FirstBaseline)) {
             SizedRectangle(color = Color.Blue, width = 10.dp, height = 50.dp)
             Padding(30.dp) {
                 Text("Second text", style = TextStyle(fontSize = 45.sp))
diff --git a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt
index 72a62e2..56e6259 100644
--- a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt
+++ b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt
@@ -23,10 +23,10 @@
 import androidx.ui.core.dp
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutHeight
 import androidx.ui.layout.Spacer
 import androidx.ui.layout.Row
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
 import androidx.ui.layout.Wrap
 import androidx.ui.graphics.Color
 import androidx.ui.text.TextStyle
@@ -35,9 +35,9 @@
 import androidx.ui.core.setContent
 import androidx.ui.core.sp
 import androidx.ui.layout.Arrangement
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
 import androidx.ui.layout.samples.DrawRectangle
 
 class LayoutActivity : Activity() {
@@ -69,74 +69,74 @@
     Column {
         Text(text = "Row", style = TextStyle(fontSize = 48.sp))
         ContainerWithBackground(width = ExampleSize, color = lightGrey) {
-            Row(ExpandedWidth) {
+            Row(LayoutExpandedWidth) {
                 PurpleSquare()
                 CyanSquare()
             }
         }
-        Spacer(Height(24.dp))
+        Spacer(LayoutHeight(24.dp))
         ContainerWithBackground(width = ExampleSize, color = lightGrey) {
-            Row(ExpandedWidth, arrangement = Arrangement.Center) {
+            Row(LayoutExpandedWidth, arrangement = Arrangement.Center) {
                 PurpleSquare()
                 CyanSquare()
             }
         }
-        Spacer(Height(24.dp))
+        Spacer(LayoutHeight(24.dp))
         ContainerWithBackground(width = ExampleSize, color = lightGrey) {
-            Row(ExpandedWidth, arrangement = Arrangement.End) {
+            Row(LayoutExpandedWidth, arrangement = Arrangement.End) {
                 PurpleSquare()
                 CyanSquare()
             }
         }
-        Spacer(Height(24.dp))
+        Spacer(LayoutHeight(24.dp))
         ContainerWithBackground(width = ExampleSize, color = lightGrey) {
-            Row(ExpandedWidth) {
+            Row(LayoutExpandedWidth) {
                 PurpleSquare()
                 CyanSquare()
             }
         }
-        Spacer(Height(24.dp))
+        Spacer(LayoutHeight(24.dp))
         ContainerWithBackground(width = ExampleSize, color = lightGrey) {
-            Row(ExpandedWidth) {
-                PurpleSquare(Gravity.Bottom)
-                CyanSquare(Gravity.Bottom)
+            Row(LayoutExpandedWidth) {
+                PurpleSquare(LayoutGravity.Bottom)
+                CyanSquare(LayoutGravity.Bottom)
             }
         }
-        Spacer(Height(24.dp))
+        Spacer(LayoutHeight(24.dp))
         Text(text = "Column", style = TextStyle(fontSize = 48.sp))
-        Row(ExpandedWidth) {
+        Row(LayoutExpandedWidth) {
             ContainerWithBackground(height = ExampleSize, color = lightGrey) {
-                Column(ExpandedHeight) {
+                Column(LayoutExpandedHeight) {
                     PurpleSquare()
                     CyanSquare()
                 }
             }
-            Spacer(Width(24.dp))
+            Spacer(LayoutWidth(24.dp))
             ContainerWithBackground(height = ExampleSize, color = lightGrey) {
-                Column(ExpandedHeight, arrangement = Arrangement.Center) {
+                Column(LayoutExpandedHeight, arrangement = Arrangement.Center) {
                     PurpleSquare()
                     CyanSquare()
                 }
             }
-            Spacer(Width(24.dp))
+            Spacer(LayoutWidth(24.dp))
             ContainerWithBackground(height = ExampleSize, color = lightGrey) {
-                Column(ExpandedHeight, arrangement = Arrangement.End) {
+                Column(LayoutExpandedHeight, arrangement = Arrangement.End) {
                     PurpleSquare()
                     CyanSquare()
                 }
             }
-            Spacer(Width(24.dp))
+            Spacer(LayoutWidth(24.dp))
             ContainerWithBackground(height = ExampleSize, color = lightGrey) {
-                Column(ExpandedHeight) {
+                Column(LayoutExpandedHeight) {
                     PurpleSquare()
                     CyanSquare()
                 }
             }
-            Spacer(Width(24.dp))
+            Spacer(LayoutWidth(24.dp))
             ContainerWithBackground(height = ExampleSize, color = lightGrey) {
-                Column(ExpandedHeight) {
-                    PurpleSquare(Gravity.End)
-                    CyanSquare(Gravity.End)
+                Column(LayoutExpandedHeight) {
+                    PurpleSquare(LayoutGravity.End)
+                    CyanSquare(LayoutGravity.End)
                 }
             }
         }
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt
index 69af541..c435d16 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt
@@ -22,12 +22,12 @@
 import androidx.ui.core.dp
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Align
-import androidx.ui.layout.Aligned
+import androidx.ui.layout.LayoutAlign
 import androidx.ui.layout.Center
 import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
 import androidx.ui.layout.Row
 
 @Sampled
@@ -49,49 +49,49 @@
 @Sampled
 @Composable
 fun SimpleAlignedModifier() {
-    SizedRectangle(modifier = Aligned.TopCenter, color = Color.Blue, width = 20.dp, height = 20.dp)
+    SizedRectangle(LayoutAlign.TopCenter, color = Color.Blue, width = 20.dp, height = 20.dp)
 }
 
 @Sampled
 @Composable
 fun SimpleVerticallyAlignedModifier() {
-    SizedRectangle(modifier = Aligned.CenterVertically, color = Color.Blue, height = 50.dp)
+    SizedRectangle(LayoutAlign.CenterVertically, color = Color.Blue, height = 50.dp)
 }
 
 @Sampled
 @Composable
 fun SimpleGravityInRow() {
-    Row(ExpandedHeight) {
+    Row(LayoutExpandedHeight) {
         // The child with no gravity modifier is positioned by default so that its top edge is
         // aligned to the top of the vertical axis.
         SizedRectangle(color = Color.Magenta, width = 80.dp, height = 40.dp)
         // Gravity.Top, the child will be positioned so that its top edge is aligned to the top
         // of the vertical axis.
-        SizedRectangle(Gravity.Top, color = Color.Red, width = 80.dp, height = 40.dp)
+        SizedRectangle(LayoutGravity.Top, color = Color.Red, width = 80.dp, height = 40.dp)
         // Gravity.Center, the child will be positioned so that its center is in the middle of
         // the vertical axis.
-        SizedRectangle(Gravity.Center, color = Color.Yellow, width = 80.dp, height = 40.dp)
+        SizedRectangle(LayoutGravity.Center, color = Color.Yellow, width = 80.dp, height = 40.dp)
         // Gravity.Bottom, the child will be positioned so that its bottom edge is aligned to the
         // bottom of the vertical axis.
-        SizedRectangle(Gravity.Bottom, color = Color.Green, width = 80.dp, height = 40.dp)
+        SizedRectangle(LayoutGravity.Bottom, color = Color.Green, width = 80.dp, height = 40.dp)
     }
 }
 
 @Sampled
 @Composable
 fun SimpleGravityInColumn() {
-    Column(ExpandedWidth) {
+    Column(LayoutExpandedWidth) {
         // The child with no gravity modifier is positioned by default so that its start edge
         // aligned with the start edge of the horizontal axis.
         SizedRectangle(color = Color.Magenta, width = 80.dp, height = 40.dp)
         // Gravity.Start, the child will be positioned so that its start edge is aligned with
         // the start edge of the horizontal axis.
-        SizedRectangle(Gravity.Start, color = Color.Red, width = 80.dp, height = 40.dp)
+        SizedRectangle(LayoutGravity.Start, color = Color.Red, width = 80.dp, height = 40.dp)
         // Gravity.Center, the child will be positioned so that its center is in the middle of
         // the horizontal axis.
-        SizedRectangle(Gravity.Center, color = Color.Yellow, width = 80.dp, height = 40.dp)
+        SizedRectangle(LayoutGravity.Center, color = Color.Yellow, width = 80.dp, height = 40.dp)
         // Gravity.End, the child will be positioned so that its end edge aligned to the end of
         // the horizontal axis.
-        SizedRectangle(Gravity.End, color = Color.Green, width = 80.dp, height = 40.dp)
+        SizedRectangle(LayoutGravity.End, color = Color.Green, width = 80.dp, height = 40.dp)
     }
 }
\ No newline at end of file
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AspectRatioSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AspectRatioSample.kt
index 930e0a0..55151bc 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AspectRatioSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AspectRatioSample.kt
@@ -21,7 +21,7 @@
 import androidx.ui.core.dp
 import androidx.ui.foundation.ColoredRect
 import androidx.ui.graphics.Color
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import androidx.ui.layout.Container
 import androidx.ui.layout.DpConstraints
 
@@ -29,6 +29,6 @@
 @Composable
 fun SimpleAspectRatio() {
     Container(constraints = DpConstraints.tightConstraintsForWidth(100.dp)) {
-        ColoredRect(color = Color.Gray, modifier = AspectRatio(2f))
+        ColoredRect(color = Color.Gray, modifier = LayoutAspectRatio(2f))
     }
 }
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/ExpandedModifierSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/ExpandedModifierSample.kt
index f35731c..5417fdc 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/ExpandedModifierSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/ExpandedModifierSample.kt
@@ -26,14 +26,14 @@
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Align
 import androidx.ui.layout.Container
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
 
 @Sampled
 @Composable
 fun SimpleExpandedWidthModifier() {
-    Container(modifier = ExpandedWidth) {
+    Container(modifier = LayoutExpandedWidth) {
         DrawShape(RectangleShape, Color.Red)
         ColoredRect(color = Color.Magenta, width = 100.dp, height = 100.dp)
     }
@@ -43,7 +43,7 @@
 @Composable
 fun SimpleExpandedHeightModifier() {
     Align(alignment = Alignment.TopLeft) {
-        Container(modifier = ExpandedHeight) {
+        Container(modifier = LayoutExpandedHeight) {
             DrawShape(RectangleShape, Color.Red)
             ColoredRect(color = Color.Magenta, width = 100.dp, height = 100.dp)
         }
@@ -54,7 +54,7 @@
 @Composable
 fun SimpleExpandedModifier() {
     Align(alignment = Alignment.TopLeft) {
-        Container(modifier = Expanded) {
+        Container(modifier = LayoutExpanded) {
             DrawShape(RectangleShape, Color.Red)
             ColoredRect(color = Color.Magenta, width = 100.dp, height = 100.dp)
         }
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/FlexSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/FlexSample.kt
index bc02f20..232448f 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/FlexSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/FlexSample.kt
@@ -26,10 +26,10 @@
 import androidx.ui.layout.Center
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
 import androidx.ui.layout.FlexColumn
 import androidx.ui.layout.FlexRow
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutGravity
 import androidx.ui.layout.Row
 import androidx.ui.text.TextStyle
 
@@ -77,11 +77,11 @@
         // size.
         SizedRectangle(color = Color.Magenta, width = 40.dp, height = 80.dp)
         // Inflexible, the child will have the specified size.
-        SizedRectangle(Inflexible, color = Color.Red, width = 80.dp, height = 40.dp)
+        SizedRectangle(LayoutInflexible, color = Color.Red, width = 80.dp, height = 40.dp)
         // Flexible, the child will occupy have of the remaining width.
-        SizedRectangle(Flexible(1f), color = Color.Yellow, height = 40.dp)
+        SizedRectangle(LayoutFlexible(1f), color = Color.Yellow, height = 40.dp)
         // Flexible not tight, the child will occupy at most half of the remaining width.
-        SizedRectangle(Flexible(1f, tight = false), color = Color.Green, height = 80.dp)
+        SizedRectangle(LayoutFlexible(1f, tight = false), color = Color.Green, height = 80.dp)
     }
 }
 
@@ -93,11 +93,11 @@
         // size.
         SizedRectangle(color = Color.Magenta, width = 40.dp, height = 80.dp)
         // Inflexible, the child will have the specified size.
-        SizedRectangle(Inflexible, color = Color.Red, width = 80.dp, height = 40.dp)
+        SizedRectangle(LayoutInflexible, color = Color.Red, width = 80.dp, height = 40.dp)
         // Flexible, the child will occupy have of the remaining height.
-        SizedRectangle(Flexible(1f), color = Color.Yellow, width = 40.dp)
+        SizedRectangle(LayoutFlexible(1f), color = Color.Yellow, width = 40.dp)
         // Flexible not tight, the child will occupy at most half of the remaining height.
-        SizedRectangle(Flexible(1f, tight = false), color = Color.Green, width = 80.dp)
+        SizedRectangle(LayoutFlexible(1f, tight = false), color = Color.Green, width = 80.dp)
     }
 }
 
@@ -108,19 +108,19 @@
         // Center of the first rectangle is aligned to the right edge of the second rectangle and
         // left edge of the third one.
         SizedRectangle(
-            Gravity.RelativeToSiblings { it.width * 0.5 },
+            LayoutGravity.RelativeToSiblings { it.width * 0.5 },
             color = Color.Blue,
             width = 80.dp,
             height = 40.dp
         )
         SizedRectangle(
-            Gravity.RelativeToSiblings { it.width },
+            LayoutGravity.RelativeToSiblings { it.width },
             color = Color.Magenta,
             width = 80.dp,
             height = 40.dp
         )
         SizedRectangle(
-            Gravity.RelativeToSiblings { 0.ipx },
+            LayoutGravity.RelativeToSiblings { 0.ipx },
             color = Color.Red,
             width = 80.dp,
             height = 40.dp
@@ -131,15 +131,15 @@
 @Sampled
 @Composable
 fun SimpleRelativeToSiblingsInRow() {
-    Row(ExpandedHeight) {
+    Row(LayoutExpandedHeight) {
         // Center of the colored rectangle is aligned to first baseline of the text.
         SizedRectangle(
             color = Color.Red,
             width = 80.dp,
             height = 40.dp,
-            modifier = Gravity.RelativeToSiblings { it.height * 0.5 }
+            modifier = LayoutGravity.RelativeToSiblings { it.height * 0.5 }
         )
-        Container(width = 80.dp, modifier = Gravity.RelativeToSiblings(FirstBaseline)) {
+        Container(width = 80.dp, modifier = LayoutGravity.RelativeToSiblings(FirstBaseline)) {
             Text(text = "Text.", style = TextStyle(background = Color.Cyan))
         }
     }
@@ -152,19 +152,19 @@
         // Center of the first rectangle is aligned to the right edge of the second rectangle and
         // left edge of the third one.
         SizedRectangle(
-            Gravity.RelativeToSiblings { it.width * 0.5 },
+            LayoutGravity.RelativeToSiblings { it.width * 0.5 },
             color = Color.Blue,
             width = 80.dp,
             height = 40.dp
         )
         SizedRectangleWithLines(
-            Gravity.RelativeToSiblings(End),
+            LayoutGravity.RelativeToSiblings(End),
             color = Color.Magenta,
             width = 80.dp,
             height = 40.dp
         )
         SizedRectangleWithLines(
-            Gravity.RelativeToSiblings(Start),
+            LayoutGravity.RelativeToSiblings(Start),
             color = Color.Red,
             width = 80.dp,
             height = 40.dp
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/IntrinsicSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/IntrinsicSample.kt
index 14f1f30..f4413f4 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/IntrinsicSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/IntrinsicSample.kt
@@ -23,14 +23,14 @@
 import androidx.ui.foundation.shape.DrawShape
 import androidx.ui.foundation.shape.RectangleShape
 import androidx.ui.graphics.Color
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import androidx.ui.layout.Column
 import androidx.ui.layout.ConstrainedBox
 import androidx.ui.layout.Container
 import androidx.ui.layout.CrossAxisAlignment
 import androidx.ui.layout.DpConstraints
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
 import androidx.ui.layout.FlexRow
 import androidx.ui.layout.MaxIntrinsicHeight
 import androidx.ui.layout.MaxIntrinsicWidth
@@ -44,7 +44,7 @@
  * Here [MinIntrinsicWidth] is adding a speculative width measurement pass for the [Column],
  * whose minimum intrinsic width will correspond to the preferred width of the largest
  * [ConstrainedBox]. Then [MinIntrinsicWidth] will measure the [Column] with tight width, the same
- * as the premeasured minimum intrinsic width, which due to [ExpandedWidth] will force
+ * as the premeasured minimum intrinsic width, which due to [LayoutExpandedWidth] will force
  * the [ConstrainedBox]s to use the same width.
  */
 @Sampled
@@ -52,22 +52,22 @@
 fun SameWidthBoxes() {
     Wrap {
         MinIntrinsicWidth {
-            Column(ExpandedHeight) {
+            Column(LayoutExpandedHeight) {
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(width = 20.dp, height = 10.dp),
-                    modifier = ExpandedWidth
+                    modifier = LayoutExpandedWidth
                 ) {
                     DrawShape(RectangleShape, Color.Gray)
                 }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(width = 30.dp, height = 10.dp),
-                    modifier = ExpandedWidth
+                    modifier = LayoutExpandedWidth
                 ) {
                     DrawShape(RectangleShape, Color.Blue)
                 }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(width = 10.dp, height = 10.dp),
-                    modifier = ExpandedWidth
+                    modifier = LayoutExpandedWidth
                 ) {
                     DrawShape(RectangleShape, Color.Magenta)
                 }
@@ -113,7 +113,7 @@
  * Here [MaxIntrinsicWidth] is adding a speculative width measurement pass for the [Column],
  * whose maximum intrinsic width will correspond to the preferred width of the largest
  * [ConstrainedBox]. Then [MaxIntrinsicWidth] will measure the [Column] with tight width, the same
- * as the premeasured maximum intrinsic width, which due to [ExpandedWidth] modifiers will force
+ * as the premeasured maximum intrinsic width, which due to [LayoutExpandedWidth] modifiers will force
  * the [ConstrainedBox]s to use the same width.
  */
 @Sampled
@@ -121,16 +121,16 @@
 fun SameWidthTextBoxes() {
     Wrap {
         MaxIntrinsicWidth {
-            Column(ExpandedHeight) {
-                Container(ExpandedWidth) {
+            Column(LayoutExpandedHeight) {
+                Container(LayoutExpandedWidth) {
                     DrawShape(RectangleShape, Color.Gray)
                     Text("Short text")
                 }
-                Container(ExpandedWidth) {
+                Container(LayoutExpandedWidth) {
                     DrawShape(RectangleShape, Color.Blue)
                     Text("Extremely long text giving the width of its siblings")
                 }
-                Container(ExpandedWidth) {
+                Container(LayoutExpandedWidth) {
                     DrawShape(RectangleShape, Color.Magenta)
                     Text("Medium length text")
                 }
@@ -156,13 +156,13 @@
         MaxIntrinsicHeight {
             FlexRow(crossAxisAlignment = CrossAxisAlignment.Stretch) {
                 expanded(flex = 1f) {
-                    Container(AspectRatio(2f)) { DrawShape(RectangleShape, Color.Gray) }
+                    Container(LayoutAspectRatio(2f)) { DrawShape(RectangleShape, Color.Gray) }
                 }
                 inflexible {
                     Container(width = 1.dp) { DrawShape(RectangleShape, Color.Black) }
                 }
                 expanded(flex = 1f) {
-                    Container(AspectRatio(1f)) { DrawShape(RectangleShape, Color.Blue) }
+                    Container(LayoutAspectRatio(1f)) { DrawShape(RectangleShape, Color.Blue) }
                 }
             }
         }
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacingSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/LayoutPaddingSample.kt
similarity index 92%
rename from ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacingSample.kt
rename to ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/LayoutPaddingSample.kt
index 4dc05d3..37210ce5 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacingSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/LayoutPaddingSample.kt
@@ -24,17 +24,17 @@
 import androidx.ui.layout.Align
 import androidx.ui.layout.Container
 import androidx.ui.layout.EdgeInsets
+import androidx.ui.layout.LayoutPadding
 import androidx.ui.layout.Padding
-import androidx.ui.layout.Spacing
 
 @Sampled
 @Composable
-fun SpacingModifier() {
+fun LayoutPaddingModifier() {
     Align(Alignment.TopLeft) {
         Container {
             DrawRectangle(Color.Gray)
             SizedRectangle(
-                modifier = Spacing(
+                modifier = LayoutPadding(
                     left = 20.dp, top = 30.dp, right = 20.dp, bottom = 30.dp
                 ),
                 color = Color.Blue,
@@ -47,12 +47,12 @@
 
 @Sampled
 @Composable
-fun SpacingAllModifier() {
+fun LayoutPaddingAllModifier() {
     Align(Alignment.TopLeft) {
         Container {
             DrawRectangle(Color.Gray)
             SizedRectangle(
-                modifier = Spacing(all = 20.dp),
+                modifier = LayoutPadding(all = 20.dp),
                 color = Color.Blue,
                 width = 50.dp,
                 height = 50.dp
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SizeModifierSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SizeModifierSample.kt
index b6b6172..0fe118c 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SizeModifierSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SizeModifierSample.kt
@@ -22,18 +22,18 @@
 import androidx.ui.foundation.shape.DrawShape
 import androidx.ui.foundation.shape.RectangleShape
 import androidx.ui.graphics.Color
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import androidx.ui.layout.Center
 import androidx.ui.layout.Container
-import androidx.ui.layout.Height
-import androidx.ui.layout.Size
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutHeight
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWidth
 
 @Sampled
 @Composable
 fun SimpleSizeModifier() {
     Center {
-        Container(modifier = Size(width = 100.dp, height = 100.dp)) {
+        Container(modifier = LayoutSize(width = 100.dp, height = 100.dp)) {
             DrawShape(shape = RectangleShape, color = Color.Red)
         }
     }
@@ -43,7 +43,7 @@
 @Composable
 fun SimpleWidthModifier() {
     Center {
-        Container(modifier = Width(100.dp) wraps AspectRatio(1f)) {
+        Container(modifier = LayoutWidth(100.dp) + LayoutAspectRatio(1f)) {
             DrawShape(shape = RectangleShape, color = Color.Magenta)
         }
     }
@@ -53,7 +53,7 @@
 @Composable
 fun SimpleHeightModifier() {
     Center {
-        Container(modifier = Height(100.dp) wraps AspectRatio(1f)) {
+        Container(modifier = LayoutHeight(100.dp) + LayoutAspectRatio(1f)) {
             DrawShape(shape = RectangleShape, color = Color.Blue)
         }
     }
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacerSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacerSample.kt
index bf8e38c..6a8ca70 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacerSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/SpacerSample.kt
@@ -22,16 +22,16 @@
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Row
 import androidx.ui.layout.Spacer
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
 
 @Sampled
 @Composable
 fun SpacerExample() {
     Row {
         SizedRectangle(color = Color.Red, width = 100.dp, height = 100.dp)
-        Spacer(modifier = Width(20.dp))
+        Spacer(modifier = LayoutWidth(20.dp))
         SizedRectangle(color = Color.Magenta, width = 100.dp, height = 100.dp)
-        Spacer(modifier = Flexible(1f))
+        Spacer(modifier = LayoutFlexible(1f))
         SizedRectangle(color = Color.Black, width = 100.dp, height = 100.dp)
     }
 }
\ No newline at end of file
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSample.kt
index 6f3f0d5..39b97bc 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSample.kt
@@ -20,26 +20,26 @@
 import androidx.compose.Composable
 import androidx.ui.core.dp
 import androidx.ui.graphics.Color
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Size
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutPadding
+import androidx.ui.layout.LayoutSize
 import androidx.ui.layout.Stack
 
 @Sampled
 @Composable
 fun SimpleStack() {
     Stack {
-        SizedRectangle(modifier = Expanded, color = Color.Cyan)
+        SizedRectangle(LayoutExpanded, color = Color.Cyan)
         SizedRectangle(
-            modifier = Gravity.Stretch wraps Spacing(top = 20.dp, bottom = 20.dp),
+            LayoutGravity.Stretch + LayoutPadding(top = 20.dp, bottom = 20.dp),
             color = Color.Yellow
         )
-        SizedRectangle(modifier = Gravity.Stretch wraps Spacing(40.dp), color = Color.Magenta)
-        SizedRectangle(modifier = Gravity.Center wraps Size(300.dp, 300.dp), color = Color.Green)
-        SizedRectangle(modifier = Gravity.TopLeft wraps Size(150.dp, 150.dp), color = Color.Red)
+        SizedRectangle(LayoutGravity.Stretch + LayoutPadding(40.dp), color = Color.Magenta)
+        SizedRectangle(LayoutGravity.Center + LayoutSize(300.dp, 300.dp), color = Color.Green)
+        SizedRectangle(LayoutGravity.TopLeft + LayoutSize(150.dp, 150.dp), color = Color.Red)
         SizedRectangle(
-            modifier = Gravity.BottomRight wraps Size(150.dp, 150.dp),
+            LayoutGravity.BottomRight + LayoutSize(150.dp, 150.dp),
             color = Color.Blue
         )
     }
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/TableSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/TableSample.kt
index d9fb082..8ecdd34 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/TableSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/TableSample.kt
@@ -23,7 +23,7 @@
 import androidx.ui.foundation.shape.DrawShape
 import androidx.ui.foundation.shape.corner.CircleShape
 import androidx.ui.graphics.Color
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import androidx.ui.layout.Padding
 import androidx.ui.layout.Table
 import androidx.ui.layout.TableColumnWidth
@@ -104,5 +104,5 @@
 
 @Composable
 private fun SizedSquare(color: Color, size: Dp? = null) {
-    SizedRectangle(AspectRatio(1f), color = color, width = size)
+    SizedRectangle(LayoutAspectRatio(1f), color = color, width = size)
 }
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt
index 2de62fa..7c7aec6 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt
@@ -32,12 +32,12 @@
 import androidx.ui.core.px
 import androidx.ui.core.withDensity
 import androidx.ui.layout.Align
-import androidx.ui.layout.Aligned
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAlign
+import androidx.ui.layout.LayoutAspectRatio
 import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.Size
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWidth
 import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -105,7 +105,7 @@
                     position = alignPosition,
                     positionedLatch = positionedLatch
                 )
-                Container(modifier = Aligned.BottomRight wraps Size(sizeDp, sizeDp)) {
+                Container(modifier = LayoutAlign.BottomRight + LayoutSize(sizeDp, sizeDp)) {
                     SaveLayoutInfo(
                         size = childSize,
                         position = childPosition,
@@ -145,7 +145,7 @@
                     position = alignPosition,
                     positionedLatch = positionedLatch
                 )
-                Container(modifier = Aligned.End wraps ExpandedHeight wraps Width(sizeDp)) {
+                Container(LayoutAlign.End + LayoutExpandedHeight + LayoutWidth(sizeDp)) {
                     SaveLayoutInfo(
                         size = childSize,
                         position = childPosition,
@@ -233,7 +233,7 @@
                             position = alignPosition,
                             positionedLatch = positionedLatch
                         )
-                        Container(modifier = Aligned.BottomRight wraps Size(sizeDp, sizeDp)) {
+                        Container(LayoutAlign.BottomRight + LayoutSize(sizeDp, sizeDp)) {
                             SaveLayoutInfo(
                                 size = childSize,
                                 position = childPosition,
@@ -295,7 +295,7 @@
     fun testAlign_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
             Align(alignment = Alignment.TopLeft) {
-                Container(AspectRatio(2f)) { }
+                Container(LayoutAspectRatio(2f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
@@ -316,7 +316,7 @@
     @Test
     fun test2DAlignedModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(Aligned.TopLeft wraps AspectRatio(2f)) { }
+            Container(LayoutAlign.TopLeft + LayoutAspectRatio(2f)) { }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
             assertEquals(0.ipx, minIntrinsicWidth(0.ipx))
@@ -343,7 +343,7 @@
     @Test
     fun test1DAlignedModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(Aligned.CenterVertically wraps AspectRatio(2f)) { }
+            Container(LayoutAlign.CenterVertically + LayoutAspectRatio(2f)) { }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
 
             // Min width.
@@ -463,13 +463,13 @@
         show {
             Layout(
                 children = {
-                    Container(Size(parentSize, parentSize)) {
+                    Container(LayoutSize(parentSize, parentSize)) {
                         SaveLayoutInfo(
                             size = alignSize,
                             position = alignPosition,
                             positionedLatch = positionedLatch
                         )
-                        Container(Aligned.BottomRight wraps Size(childSizeDp, childSizeDp)) {
+                        Container(LayoutAlign.BottomRight + LayoutSize(childSizeDp, childSizeDp)) {
                             SaveLayoutInfo(
                                 size = childSize,
                                 position = childPosition,
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioModifierTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioModifierTest.kt
index e1a5d43..ef08953 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioModifierTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioModifierTest.kt
@@ -29,7 +29,7 @@
 import androidx.ui.core.px
 import androidx.ui.core.withDensity
 import androidx.ui.layout.Container
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
@@ -43,7 +43,7 @@
     @Test
     fun testAspectRatioModifier_intrinsicDimensions() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(modifier = AspectRatio(2f), width = 30.dp, height = 40.dp) { }
+            Container(modifier = LayoutAspectRatio(2f), width = 30.dp, height = 40.dp) { }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             assertEquals(40.ipx, minIntrinsicWidth(20.ipx))
             assertEquals(40.ipx, maxIntrinsicWidth(20.ipx))
@@ -60,14 +60,14 @@
     @Test(expected = IllegalArgumentException::class)
     fun testAspectRatioModifier_zeroRatio() {
         show {
-            Container(AspectRatio(0f)) { }
+            Container(LayoutAspectRatio(0f)) { }
         }
     }
 
     @Test(expected = IllegalArgumentException::class)
     fun testAspectRatioModifier_negativeRatio() {
         show {
-            Container(AspectRatio(-2f)) { }
+            Container(LayoutAspectRatio(-2f)) { }
         }
     }
 
@@ -99,7 +99,7 @@
         val position = Ref<PxPosition>()
         show {
             Layout(@Composable {
-                Container(AspectRatio(aspectRatio)) {
+                Container(LayoutAspectRatio(aspectRatio)) {
                     SaveLayoutInfo(size, position, positionedLatch)
                 }
             }) { measurables, incomingConstraints ->
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt
index b2ab6ed..4c9e899 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt
@@ -28,7 +28,7 @@
 import androidx.ui.core.px
 import androidx.ui.core.withDensity
 import androidx.ui.layout.Align
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import androidx.ui.layout.ConstrainedBox
 import androidx.ui.layout.Container
 import androidx.ui.layout.DpConstraints
@@ -141,7 +141,7 @@
     fun testConstrainedBox_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
             ConstrainedBox(constraints = DpConstraints(10.dp, 20.dp, 30.dp, 40.dp)) {
-                Container(AspectRatio(1f)) { }
+                Container(LayoutAspectRatio(1f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt
index 7d233a9..c980823f 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt
@@ -36,7 +36,7 @@
 import androidx.ui.layout.Container
 import androidx.ui.layout.DpConstraints
 import androidx.ui.layout.EdgeInsets
-import androidx.ui.layout.Size
+import androidx.ui.layout.LayoutSize
 import androidx.ui.layout.Spacer
 import androidx.ui.layout.Row
 import androidx.ui.layout.Wrap
@@ -311,7 +311,7 @@
         show {
             Wrap {
                 Container(padding = edgeInsets) {
-                    Spacer(Size(width = childSizeDp, height = childSizeDp))
+                    Spacer(LayoutSize(width = childSizeDp, height = childSizeDp))
                     OnPositioned(onPositioned = { coordinates ->
                         containerSize = coordinates.size
                         latch.countDown()
@@ -340,7 +340,7 @@
                         childCoordinates = coordinates
                         latch.countDown()
                     }) {
-                        Spacer(Size(width = childSize, height = childSize))
+                        Spacer(LayoutSize(width = childSize, height = childSize))
                     }
                 }
             }
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ExpandedModifierTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ExpandedModifierTest.kt
index e0edb23..5074feb 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ExpandedModifierTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ExpandedModifierTest.kt
@@ -33,11 +33,11 @@
 import androidx.ui.core.withDensity
 import androidx.ui.engine.geometry.Rect
 import androidx.ui.layout.Align
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import androidx.ui.layout.Container
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
 import org.junit.Assert
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -63,23 +63,23 @@
         )
         Assert.assertEquals(
             Rect(0f, 0f, screenWidth, Height.toIntPx().value.toFloat()),
-            getSize(ExpandedWidth).toRect()
+            getSize(LayoutExpandedWidth).toRect()
         )
         Assert.assertEquals(
             Rect(0f, 0f, Width.toIntPx().value.toFloat(), screenHeight),
-            getSize(ExpandedHeight).toRect()
+            getSize(LayoutExpandedHeight).toRect()
         )
         Assert.assertEquals(
             Rect(0f, 0f, screenWidth, screenHeight),
-            getSize(Expanded).toRect()
+            getSize(LayoutExpanded).toRect()
         )
     }
 
     @Test
     fun testExpandedModifier_noChangeIntrinsicMeasurements() = withDensity(density) {
-        verifyIntrinsicMeasurements(ExpandedWidth)
-        verifyIntrinsicMeasurements(ExpandedHeight)
-        verifyIntrinsicMeasurements(Expanded)
+        verifyIntrinsicMeasurements(LayoutExpandedWidth)
+        verifyIntrinsicMeasurements(LayoutExpandedHeight)
+        verifyIntrinsicMeasurements(LayoutExpanded)
     }
 
     private fun getSize(modifier: Modifier = Modifier.None): PxSize {
@@ -112,7 +112,9 @@
     private fun verifyIntrinsicMeasurements(expandedModifier: Modifier) = withDensity(density) {
         // intrinsic measurements do not change with the ExpandedModifier
         testIntrinsics(@Composable {
-            Container(expandedModifier wraps AspectRatio(2f), width = 30.dp, height = 40.dp) { }
+            Container(
+                expandedModifier + LayoutAspectRatio(2f),
+                width = 30.dp, height = 40.dp) { }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Width
             assertEquals(40.ipx, minIntrinsicWidth(20.ipx))
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
index ac79d36..2a566e7 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
@@ -49,17 +49,17 @@
 import androidx.ui.core.min
 import androidx.ui.layout.Align
 import androidx.ui.layout.Arrangement
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import androidx.ui.layout.Center
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
 import androidx.ui.layout.FlexColumn
 import androidx.ui.layout.FlexRow
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutGravity
 import androidx.ui.layout.Row
-import androidx.ui.layout.Size
+import androidx.ui.layout.LayoutSize
 import androidx.ui.layout.Spacer
 import androidx.ui.layout.Wrap
 import org.junit.Assert
@@ -131,7 +131,7 @@
         show {
             Container(alignment = Alignment.TopLeft) {
                 Row {
-                    Container(Flexible(1f), width = width, height = height) {
+                    Container(LayoutFlexible(1f), width = width, height = height) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[0] = coordinates.size
                             childPosition[0] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -139,7 +139,7 @@
                         })
                     }
 
-                    Container(Flexible(2f), width = width, height = height) {
+                    Container(LayoutFlexible(2f), width = width, height = height) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[1] = coordinates.size
                             childPosition[1] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -181,7 +181,7 @@
             Container(alignment = Alignment.TopLeft) {
                 Row {
                     Container(
-                        Flexible(1f, tight = false),
+                        LayoutFlexible(1f, tight = false),
                         width = width,
                         height = height
                     ) {
@@ -193,7 +193,7 @@
                     }
 
                     Container(
-                        Flexible(2f, tight = false),
+                        LayoutFlexible(2f, tight = false),
                         width = width,
                         height = height * 2
                     ) {
@@ -374,7 +374,7 @@
         show {
             Container(alignment = Alignment.TopLeft) {
                 Column {
-                    Container(Flexible(1f), width = width, height = height) {
+                    Container(LayoutFlexible(1f), width = width, height = height) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[0] = coordinates.size
                             childPosition[0] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -382,7 +382,7 @@
                         })
                     }
 
-                    Container(Flexible(2f), width = width, height = height) {
+                    Container(LayoutFlexible(2f), width = width, height = height) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[1] = coordinates.size
                             childPosition[1] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -421,14 +421,14 @@
         show {
             Container(alignment = Alignment.TopLeft) {
                 Column {
-                    Container(Flexible(1f, tight = false), width = width, height = height) {
+                    Container(LayoutFlexible(1f, tight = false), width = width, height = height) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[0] = coordinates.size
                             childPosition[0] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
                             drawLatch.countDown()
                         })
                     }
-                    Container(Flexible(2f, tight = false), width = width, height = height) {
+                    Container(LayoutFlexible(2f, tight = false), width = width, height = height) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[1] = coordinates.size
                             childPosition[1] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -565,7 +565,7 @@
         show {
             Align(Alignment.CenterLeft) {
                 Row {
-                    Container(width = sizeDp, height = sizeDp, modifier = ExpandedHeight) {
+                    Container(width = sizeDp, height = sizeDp, modifier = LayoutExpandedHeight) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[0] = coordinates.size
                             childPosition[0] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -576,7 +576,7 @@
                     Container(
                         width = (sizeDp * 2),
                         height = (sizeDp * 2),
-                        modifier = ExpandedHeight
+                        modifier = LayoutExpandedHeight
                     ) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[1] = coordinates.size
@@ -611,22 +611,22 @@
         val childPosition = arrayOfNulls<PxPosition>(3)
         show {
             Align(Alignment.TopLeft) {
-                Row(ExpandedHeight) {
-                    Container(width = sizeDp, height = sizeDp, modifier = Gravity.Top) {
+                Row(LayoutExpandedHeight) {
+                    Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.Top) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[0] = coordinates.size
                             childPosition[0] = coordinates.globalPosition
                             drawLatch.countDown()
                         })
                     }
-                    Container(width = sizeDp, height = sizeDp, modifier = Gravity.Center) {
+                    Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.Center) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[1] = coordinates.size
                             childPosition[1] = coordinates.globalPosition
                             drawLatch.countDown()
                         })
                     }
-                    Container(width = sizeDp, height = sizeDp, modifier = Gravity.Bottom) {
+                    Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.Bottom) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[2] = coordinates.size
                             childPosition[2] = coordinates.globalPosition
@@ -669,12 +669,12 @@
         val childPosition = arrayOfNulls<PxPosition>(4)
         show {
             Align(Alignment.TopLeft) {
-                Row(ExpandedHeight) {
+                Row(LayoutExpandedHeight) {
                     BaselineTestLayout(
                         baseline = baseline1Dp,
                         width = sizeDp,
                         height = sizeDp,
-                        modifier = Gravity.RelativeToSiblings(TestHorizontalLine)
+                        modifier = LayoutGravity.RelativeToSiblings(TestHorizontalLine)
                     ) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[0] = coordinates.size
@@ -685,7 +685,7 @@
                     Container(
                         width = sizeDp,
                         height = sizeDp,
-                        modifier = Gravity.RelativeToSiblings { it.height * 0.5 }
+                        modifier = LayoutGravity.RelativeToSiblings { it.height * 0.5 }
                     ) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[1] = coordinates.size
@@ -697,7 +697,7 @@
                         baseline = baseline2Dp,
                         width = sizeDp,
                         height = sizeDp,
-                        modifier = Gravity.RelativeToSiblings(TestHorizontalLine)
+                        modifier = LayoutGravity.RelativeToSiblings(TestHorizontalLine)
                     ) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[2] = coordinates.size
@@ -708,7 +708,7 @@
                     Container(
                         width = sizeDp,
                         height = sizeDp,
-                        modifier = Gravity.RelativeToSiblings { it.height * 0.75 }
+                        modifier = LayoutGravity.RelativeToSiblings { it.height * 0.75 }
                     ) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[3] = coordinates.size
@@ -756,7 +756,7 @@
         show {
             Align(Alignment.TopCenter) {
                 Column {
-                    Container(width = sizeDp, height = sizeDp, modifier = ExpandedWidth) {
+                    Container(width = sizeDp, height = sizeDp, modifier = LayoutExpandedWidth) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[0] = coordinates.size
                             childPosition[0] = coordinates.localToGlobal(PxPosition(0.px, 0.px))
@@ -765,7 +765,7 @@
                     }
 
                     Container(
-                        width = (sizeDp * 2), height = (sizeDp * 2), modifier = ExpandedWidth
+                        width = (sizeDp * 2), height = (sizeDp * 2), modifier = LayoutExpandedWidth
                     ) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[1] = coordinates.size
@@ -800,22 +800,22 @@
         val childPosition = arrayOfNulls<PxPosition>(3)
         show {
             Align(Alignment.TopCenter) {
-                Column(ExpandedWidth) {
-                    Container(width = sizeDp, height = sizeDp, modifier = Gravity.Start) {
+                Column(LayoutExpandedWidth) {
+                    Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.Start) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[0] = coordinates.size
                             childPosition[0] = coordinates.globalPosition
                             drawLatch.countDown()
                         })
                     }
-                    Container(width = sizeDp, height = sizeDp, modifier = Gravity.Center) {
+                    Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.Center) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[1] = coordinates.size
                             childPosition[1] = coordinates.globalPosition
                             drawLatch.countDown()
                         })
                     }
-                    Container(width = sizeDp, height = sizeDp, modifier = Gravity.End) {
+                    Container(width = sizeDp, height = sizeDp, modifier = LayoutGravity.End) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[2] = coordinates.size
                             childPosition[2] = coordinates.globalPosition
@@ -856,11 +856,11 @@
         val childPosition = arrayOfNulls<PxPosition>(4)
         show {
             Align(Alignment.TopLeft) {
-                Column(ExpandedWidth) {
+                Column(LayoutExpandedWidth) {
                     Container(
                         width = sizeDp,
                         height = sizeDp,
-                        modifier = Gravity.RelativeToSiblings { it.width }
+                        modifier = LayoutGravity.RelativeToSiblings { it.width }
                     ) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[0] = coordinates.size
@@ -871,7 +871,7 @@
                     Container(
                         width = sizeDp,
                         height = sizeDp,
-                        modifier = Gravity.RelativeToSiblings { 0.ipx }
+                        modifier = LayoutGravity.RelativeToSiblings { 0.ipx }
                     ) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[1] = coordinates.size
@@ -883,7 +883,7 @@
                         width = sizeDp,
                         height = sizeDp,
                         baseline = firstBaseline1Dp,
-                        modifier = Gravity.RelativeToSiblings(TestVerticalLine)
+                        modifier = LayoutGravity.RelativeToSiblings(TestVerticalLine)
                     ) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[2] = coordinates.size
@@ -895,7 +895,7 @@
                         width = sizeDp,
                         height = sizeDp,
                         baseline = firstBaseline2Dp,
-                        modifier = Gravity.RelativeToSiblings(TestVerticalLine)
+                        modifier = LayoutGravity.RelativeToSiblings(TestVerticalLine)
                     ) {
                         OnPositioned(onPositioned = { coordinates ->
                             childSize[3] = coordinates.size
@@ -937,9 +937,9 @@
         lateinit var rowSize: PxSize
         show {
             Center {
-                Row(ExpandedWidth) {
-                    Spacer(Size(width = sizeDp, height = sizeDp))
-                    Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+                Row(LayoutExpandedWidth) {
+                    Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                    Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
 
                     OnPositioned(onPositioned = { coordinates ->
                         rowSize = coordinates.size
@@ -968,8 +968,8 @@
         show {
             Center {
                 Row {
-                    Spacer(Size(width = sizeDp, height = sizeDp))
-                    Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+                    Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                    Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
 
                     OnPositioned(onPositioned = { coordinates ->
                         rowSize = coordinates.size
@@ -998,7 +998,7 @@
         show {
             Center {
                 Row {
-                    Container(Flexible(1f), width = sizeDp, height = sizeDp) {}
+                    Container(LayoutFlexible(1f), width = sizeDp, height = sizeDp) {}
                     Container(width = (sizeDp * 2), height = (sizeDp * 2)) {}
 
                     OnPositioned(onPositioned = { coordinates ->
@@ -1027,9 +1027,9 @@
         lateinit var rowSize: PxSize
         show {
             Center {
-                Row(ExpandedHeight) {
-                    Spacer(Size(width = sizeDp, height = sizeDp))
-                    Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+                Row(LayoutExpandedHeight) {
+                    Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                    Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
 
                     OnPositioned(onPositioned = { coordinates ->
                         rowSize = coordinates.size
@@ -1058,8 +1058,8 @@
         show {
             Center {
                 Row {
-                    Spacer(Size(width = sizeDp, height = sizeDp))
-                    Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+                    Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                    Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
 
                     OnPositioned(onPositioned = { coordinates ->
                         rowSize = coordinates.size
@@ -1089,9 +1089,9 @@
         show {
             Center {
                 ConstrainedBox(constraints = DpConstraints(maxWidth = rowWidthDp)) {
-                    Row(ExpandedWidth) {
-                        Spacer(Size(width = sizeDp, height = sizeDp))
-                        Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+                    Row(LayoutExpandedWidth) {
+                        Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                        Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
 
                         OnPositioned(onPositioned = { coordinates ->
                             rowSize = coordinates.size
@@ -1123,7 +1123,7 @@
             Center {
                 ConstrainedBox(constraints = DpConstraints(maxWidth = rowWidthDp)) {
                     Row {
-                        Container(Flexible(1f), width = sizeDp, height = sizeDp) {}
+                        Container(LayoutFlexible(1f), width = sizeDp, height = sizeDp) {}
                         Container(width = sizeDp * 2, height = sizeDp * 2) {}
 
                         OnPositioned(onPositioned = { coordinates ->
@@ -1156,8 +1156,8 @@
             Center {
                 ConstrainedBox(constraints = DpConstraints(minWidth = rowWidthDp)) {
                     Row {
-                        Spacer(Size(width = sizeDp, height = sizeDp))
-                        Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+                        Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                        Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
 
                         OnPositioned(onPositioned = { coordinates ->
                             rowSize = coordinates.size
@@ -1188,9 +1188,9 @@
         show {
             Center {
                 ConstrainedBox(constraints = DpConstraints(maxHeight = rowHeightDp)) {
-                    Row(ExpandedHeight) {
-                        Spacer(Size(width = sizeDp, height = sizeDp))
-                        Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+                    Row(LayoutExpandedHeight) {
+                        Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                        Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
 
                         OnPositioned(onPositioned = { coordinates ->
                             rowSize = coordinates.size
@@ -1222,8 +1222,8 @@
             Center {
                 ConstrainedBox(constraints = DpConstraints(minHeight = rowHeightDp)) {
                     Row {
-                        Spacer(Size(width = sizeDp, height = sizeDp))
-                        Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+                        Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                        Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
 
                         OnPositioned(onPositioned = { coordinates ->
                             rowSize = coordinates.size
@@ -1310,7 +1310,7 @@
                             Assert.assertEquals(Constraints(), constraints)
                             FixedSizeLayout(inflexibleChildWidth.toIntPx(), 0.ipx, mapOf())
                         }
-                        Layout({}, Flexible(1f)) { _, constraints ->
+                        Layout({}, LayoutFlexible(1f)) { _, constraints ->
                             Assert.assertEquals(
                                 rowMinWidth.toIntPx() - inflexibleChildWidth.toIntPx() * 2,
                                 constraints.minWidth
@@ -1385,9 +1385,9 @@
         lateinit var columnSize: PxSize
         show {
             Center {
-                Column(ExpandedHeight) {
-                    Spacer(Size(width = sizeDp, height = sizeDp))
-                    Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+                Column(LayoutExpandedHeight) {
+                    Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                    Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
 
                     OnPositioned(onPositioned = { coordinates ->
                         columnSize = coordinates.size
@@ -1416,8 +1416,8 @@
         show {
             Center {
                 Column {
-                    Spacer(Size(width = sizeDp, height = sizeDp))
-                    Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+                    Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                    Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
 
                     OnPositioned(onPositioned = { coordinates ->
                         columnSize = coordinates.size
@@ -1446,7 +1446,7 @@
         show {
             Center {
                 Column {
-                    Container(Flexible(1f), width = sizeDp, height = sizeDp) {}
+                    Container(LayoutFlexible(1f), width = sizeDp, height = sizeDp) {}
                     Container(width = (sizeDp * 2), height = (sizeDp * 2)) {}
 
                     OnPositioned(onPositioned = { coordinates ->
@@ -1475,9 +1475,9 @@
         lateinit var columnSize: PxSize
         show {
             Center {
-                Column(ExpandedWidth) {
-                    Spacer(Size(width = sizeDp, height = sizeDp))
-                    Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+                Column(LayoutExpandedWidth) {
+                    Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                    Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
 
                     OnPositioned(onPositioned = { coordinates ->
                         columnSize = coordinates.size
@@ -1506,8 +1506,8 @@
         show {
             Center {
                 Column {
-                    Spacer(Size(width = sizeDp, height = sizeDp))
-                    Spacer(Size(width = (sizeDp * 2), height = (sizeDp * 2)))
+                    Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                    Spacer(LayoutSize(width = (sizeDp * 2), height = (sizeDp * 2)))
 
                     OnPositioned(onPositioned = { coordinates ->
                         columnSize = coordinates.size
@@ -1537,9 +1537,9 @@
         show {
             Center {
                 ConstrainedBox(constraints = DpConstraints(maxHeight = columnHeightDp)) {
-                    Column(ExpandedHeight) {
-                        Spacer(Size(width = sizeDp, height = sizeDp))
-                        Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+                    Column(LayoutExpandedHeight) {
+                        Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                        Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
 
                         OnPositioned(onPositioned = { coordinates ->
                             columnSize = coordinates.size
@@ -1571,7 +1571,7 @@
             Center {
                 ConstrainedBox(constraints = DpConstraints(maxHeight = columnHeightDp)) {
                     Column {
-                        Container(Flexible(1f), width = sizeDp, height = sizeDp) {}
+                        Container(LayoutFlexible(1f), width = sizeDp, height = sizeDp) {}
                         Container(width = sizeDp * 2, height = sizeDp * 2) {}
 
                         OnPositioned(onPositioned = { coordinates ->
@@ -1604,8 +1604,8 @@
             Center {
                 ConstrainedBox(constraints = DpConstraints(minHeight = columnHeightDp)) {
                     Column {
-                        Spacer(Size(width = sizeDp, height = sizeDp))
-                        Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+                        Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                        Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
 
                         OnPositioned(onPositioned = { coordinates ->
                             columnSize = coordinates.size
@@ -1636,9 +1636,9 @@
         show {
             Center {
                 ConstrainedBox(constraints = DpConstraints(maxWidth = columnWidthDp)) {
-                    Column(ExpandedWidth) {
-                        Spacer(Size(width = sizeDp, height = sizeDp))
-                        Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+                    Column(LayoutExpandedWidth) {
+                        Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                        Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
 
                         OnPositioned(onPositioned = { coordinates ->
                             columnSize = coordinates.size
@@ -1670,8 +1670,8 @@
             Center {
                 ConstrainedBox(constraints = DpConstraints(minWidth = columnWidthDp)) {
                     Column {
-                        Spacer(Size(width = sizeDp, height = sizeDp))
-                        Spacer(Size(width = sizeDp * 2, height = sizeDp * 2))
+                        Spacer(LayoutSize(width = sizeDp, height = sizeDp))
+                        Spacer(LayoutSize(width = sizeDp * 2, height = sizeDp * 2))
 
                         OnPositioned(onPositioned = { coordinates ->
                             columnSize = coordinates.size
@@ -1759,7 +1759,7 @@
                             Assert.assertEquals(Constraints(), constraints)
                             FixedSizeLayout(0.ipx, inflexibleChildHeight.toIntPx(), mapOf())
                         }
-                        Layout({}, Flexible(1f)) { _, constraints ->
+                        Layout({}, LayoutFlexible(1f)) { _, constraints ->
                             assertEquals(
                                 columnMinHeight.toIntPx() - inflexibleChildHeight.toIntPx() * 2,
                                 constraints.minHeight
@@ -1837,7 +1837,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Row(ExpandedWidth) {
+                Row(LayoutExpandedWidth) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -1878,7 +1878,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Row(ExpandedWidth, arrangement = Arrangement.End) {
+                Row(LayoutExpandedWidth, arrangement = Arrangement.End) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -1919,7 +1919,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Row(ExpandedWidth, arrangement = Arrangement.Center) {
+                Row(LayoutExpandedWidth, arrangement = Arrangement.Center) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -1961,7 +1961,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+                Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -2003,7 +2003,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Row(ExpandedWidth, arrangement = Arrangement.SpaceBetween) {
+                Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceBetween) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -2045,7 +2045,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Row(ExpandedWidth, arrangement = Arrangement.SpaceAround) {
+                Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceAround) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -2087,7 +2087,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Row(ExpandedWidth, arrangement = Arrangement(customArrangement)) {
+                Row(LayoutExpandedWidth, arrangement = Arrangement(customArrangement)) {
                     for (i in childPosition.indices) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -2134,7 +2134,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Column(ExpandedHeight) {
+                Column(LayoutExpandedHeight) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -2175,7 +2175,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Column(ExpandedHeight, arrangement = Arrangement.End) {
+                Column(LayoutExpandedHeight, arrangement = Arrangement.End) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -2216,7 +2216,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Column(ExpandedHeight, arrangement = Arrangement.Center) {
+                Column(LayoutExpandedHeight, arrangement = Arrangement.Center) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -2258,7 +2258,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Column(ExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
+                Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -2300,7 +2300,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Column(ExpandedHeight, arrangement = Arrangement.SpaceBetween) {
+                Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceBetween) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -2342,7 +2342,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Column(ExpandedHeight, arrangement = Arrangement.SpaceAround) {
+                Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceAround) {
                     for (i in 0 until childPosition.size) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -2390,7 +2390,7 @@
         val childLayoutCoordinates = arrayOfNulls<LayoutCoordinates?>(childPosition.size)
         show {
             Center {
-                Column(ExpandedHeight, arrangement = Arrangement(customArrangement)) {
+                Column(LayoutExpandedHeight, arrangement = Arrangement(customArrangement)) {
                     for (i in childPosition.indices) {
                         Container(width = sizeDp, height = sizeDp) {
                             OnPositioned(onPositioned = { coordinates ->
@@ -2441,7 +2441,7 @@
                             containerSize.value = coordinates.size
                             layoutLatch.countDown()
                         }) {
-                            Spacer(Size(width = childSizeDp, height = childSizeDp))
+                            Spacer(LayoutSize(width = childSizeDp, height = childSizeDp))
                         }
                     }
                 }
@@ -2470,7 +2470,7 @@
                             containerSize.value = coordinates.size
                             layoutLatch.countDown()
                         }) {
-                            Spacer(Size(width = childSizeDp, height = childSizeDp))
+                            Spacer(LayoutSize(width = childSizeDp, height = childSizeDp))
                         }
                     }
                 }
@@ -2487,57 +2487,61 @@
     fun testRow_withInflexibleChildren_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
             Row {
-                Container(AspectRatio(2f)) { }
+                Container(LayoutAspectRatio(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
             }
         }, @Composable {
-            Row(ExpandedWidth) {
-                Container(AspectRatio(2f)) { }
+            Row(LayoutExpandedWidth) {
+                Container(LayoutAspectRatio(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
             }
         }, @Composable {
             Row {
-                Container(AspectRatio(2f) wraps Gravity.Top) { }
-                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.Center) { }
+                Container(LayoutAspectRatio(2f) + LayoutGravity.Top) { }
+                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp),
+                    LayoutGravity.Center) { }
             }
         }, @Composable {
             Row {
                 Container(
-                    AspectRatio(2f) wraps Gravity.RelativeToSiblings(FirstBaseline)
+                    LayoutAspectRatio(2f) + LayoutGravity.RelativeToSiblings(FirstBaseline)
                 ) { }
                 ConstrainedBox(
                     DpConstraints.tightConstraints(50.dp, 40.dp),
-                    Gravity.RelativeToSiblings { it.width }
+                    LayoutGravity.RelativeToSiblings { it.width }
                 ) { }
             }
         }, @Composable {
-            Row(ExpandedWidth, arrangement = Arrangement.Begin) {
-                Container(AspectRatio(2f)) { }
+            Row(LayoutExpandedWidth, arrangement = Arrangement.Begin) {
+                Container(LayoutAspectRatio(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
             }
         }, @Composable {
-            Row(ExpandedWidth, arrangement = Arrangement.Center) {
-                Container(Gravity.Center wraps AspectRatio(2f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.Center) { }
+            Row(LayoutExpandedWidth, arrangement = Arrangement.Center) {
+                Container(LayoutGravity.Center + LayoutAspectRatio(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp),
+                    LayoutGravity.Center) { }
             }
         }, @Composable {
-            Row(ExpandedWidth, arrangement = Arrangement.End) {
-                Container(Gravity.Bottom wraps AspectRatio(2f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.Bottom) { }
+            Row(LayoutExpandedWidth, arrangement = Arrangement.End) {
+                Container(LayoutGravity.Bottom + LayoutAspectRatio(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp),
+                    LayoutGravity.Bottom) { }
             }
         }, @Composable {
-            Row(ExpandedWidth, arrangement = Arrangement.SpaceAround) {
-                Container(ExpandedHeight wraps AspectRatio(2f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), ExpandedHeight) { }
+            Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceAround) {
+                Container(LayoutExpandedHeight + LayoutAspectRatio(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp),
+                    LayoutExpandedHeight) { }
             }
         }, @Composable {
-            Row(ExpandedWidth, arrangement = Arrangement.SpaceBetween) {
-                Container(AspectRatio(2f)) { }
+            Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceBetween) {
+                Container(LayoutAspectRatio(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
             }
         }, @Composable {
-            Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
-                Container(AspectRatio(2f)) { }
+            Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+                Container(LayoutAspectRatio(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
@@ -2564,97 +2568,98 @@
     fun testRow_withFlexibleChildren_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
             Row {
-                ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), Flexible(3f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), Flexible(2f)) { }
-                Container(AspectRatio(2f) wraps Flexible(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), LayoutFlexible(3f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), LayoutFlexible(2f)) { }
+                Container(LayoutAspectRatio(2f) + LayoutFlexible(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
             }
         }, @Composable {
             Row {
                 ConstrainedBox(
                     DpConstraints.tightConstraints(20.dp, 30.dp),
-                    Flexible(3f) wraps Gravity.Top
+                    LayoutFlexible(3f) + LayoutGravity.Top
                 ) { }
                 ConstrainedBox(
                     DpConstraints.tightConstraints(30.dp, 40.dp),
-                    Flexible(2f) wraps Gravity.Center
+                    LayoutFlexible(2f) + LayoutGravity.Center
                 ) { }
-                Container(AspectRatio(2f) wraps Flexible(2f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), Gravity.Bottom) { }
+                Container(LayoutAspectRatio(2f) + LayoutFlexible(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp),
+                    LayoutGravity.Bottom) { }
             }
         }, @Composable {
             Row(arrangement = Arrangement.Begin) {
-                ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), Flexible(3f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), Flexible(2f)) { }
-                Container(AspectRatio(2f) wraps Flexible(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), LayoutFlexible(3f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), LayoutFlexible(2f)) { }
+                Container(LayoutAspectRatio(2f) + LayoutFlexible(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
             }
         }, @Composable {
             Row(arrangement = Arrangement.Center) {
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
-                    modifier = Flexible(3f) wraps Gravity.Center
+                    modifier = LayoutFlexible(3f) + LayoutGravity.Center
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(30.dp, 40.dp),
-                    modifier = Flexible(2f) wraps Gravity.Center
+                    modifier = LayoutFlexible(2f) + LayoutGravity.Center
                 ) { }
                 Container(
-                    AspectRatio(2f) wraps Flexible(2f) wraps Gravity.Center
+                    LayoutAspectRatio(2f) + LayoutFlexible(2f) + LayoutGravity.Center
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
-                    modifier = Gravity.Center
+                    modifier = LayoutGravity.Center
                 ) { }
             }
         }, @Composable {
             Row(arrangement = Arrangement.End) {
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
-                    modifier = Flexible(3f) wraps Gravity.Bottom
+                    modifier = LayoutFlexible(3f) + LayoutGravity.Bottom
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(30.dp, 40.dp),
-                    modifier = Flexible(2f) wraps Gravity.Bottom
+                    modifier = LayoutFlexible(2f) + LayoutGravity.Bottom
                 ) { }
                 Container(
-                    AspectRatio(2f) wraps Flexible(2f) wraps Gravity.Bottom
+                    LayoutAspectRatio(2f) + LayoutFlexible(2f) + LayoutGravity.Bottom
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
-                    modifier = Gravity.Bottom
+                    modifier = LayoutGravity.Bottom
                 ) { }
             }
         }, @Composable {
             Row(arrangement = Arrangement.SpaceAround) {
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
-                    modifier = Flexible(3f) wraps ExpandedHeight
+                    modifier = LayoutFlexible(3f) + LayoutExpandedHeight
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(30.dp, 40.dp),
-                    modifier = Flexible(2f) wraps ExpandedHeight
+                    modifier = LayoutFlexible(2f) + LayoutExpandedHeight
                 ) { }
                 Container(
-                    AspectRatio(2f) wraps Flexible(2f) wraps ExpandedHeight
+                    LayoutAspectRatio(2f) + LayoutFlexible(2f) + LayoutExpandedHeight
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(20.dp, 30.dp),
-                    modifier = ExpandedHeight
+                    modifier = LayoutExpandedHeight
                 ) { }
             }
         }, @Composable {
             Row(arrangement = Arrangement.SpaceBetween) {
-                ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), Flexible(3f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), Flexible(2f)) { }
-                Container(AspectRatio(2f) wraps Flexible(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), LayoutFlexible(3f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), LayoutFlexible(2f)) { }
+                Container(LayoutAspectRatio(2f) + LayoutFlexible(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
             }
         }, @Composable {
             Row(arrangement = Arrangement.SpaceEvenly) {
-                ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), Flexible(3f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), Flexible(2f)) { }
-                Container(AspectRatio(2f) wraps Flexible(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), LayoutFlexible(3f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp), LayoutFlexible(2f)) { }
+                Container(LayoutAspectRatio(2f) + LayoutFlexible(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
@@ -2709,55 +2714,56 @@
     fun testColumn_withInflexibleChildren_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
             Column {
-                Container(AspectRatio(2f)) { }
+                Container(LayoutAspectRatio(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
             }
         }, @Composable {
             Column {
-                Container(AspectRatio(2f) wraps Gravity.Start) { }
-                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.End) { }
+                Container(LayoutAspectRatio(2f) + LayoutGravity.Start) { }
+                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), LayoutGravity.End) { }
             }
         }, @Composable {
             Column {
-                Container(AspectRatio(2f) wraps Gravity.RelativeToSiblings { 0.ipx }) { }
+                Container(LayoutAspectRatio(2f) + LayoutGravity.RelativeToSiblings { 0.ipx }) { }
                 ConstrainedBox(
                     DpConstraints.tightConstraints(50.dp, 40.dp),
-                    Gravity.RelativeToSiblings(TestVerticalLine)
+                    LayoutGravity.RelativeToSiblings(TestVerticalLine)
                 ) { }
             }
         }, @Composable {
-            Column(ExpandedHeight) {
-                Container(AspectRatio(2f)) { }
+            Column(LayoutExpandedHeight) {
+                Container(LayoutAspectRatio(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
             }
         }, @Composable {
-            Column(ExpandedHeight, arrangement = Arrangement.Begin) {
-                Container(AspectRatio(2f)) { }
+            Column(LayoutExpandedHeight, arrangement = Arrangement.Begin) {
+                Container(LayoutAspectRatio(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
             }
         }, @Composable {
-            Column(ExpandedHeight, arrangement = Arrangement.Center) {
-                Container(Gravity.Center wraps AspectRatio(2f)) { }
+            Column(LayoutExpandedHeight, arrangement = Arrangement.Center) {
+                Container(LayoutGravity.Center + LayoutAspectRatio(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
             }
         }, @Composable {
-            Column(ExpandedHeight, arrangement = Arrangement.End) {
-                Container(Gravity.End wraps AspectRatio(2f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.End) { }
+            Column(LayoutExpandedHeight, arrangement = Arrangement.End) {
+                Container(LayoutGravity.End + LayoutAspectRatio(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), LayoutGravity.End) { }
             }
         }, @Composable {
-            Column(ExpandedHeight, arrangement = Arrangement.SpaceAround) {
-                Container(ExpandedWidth wraps AspectRatio(2f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), ExpandedWidth) { }
+            Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceAround) {
+                Container(LayoutExpandedWidth + LayoutAspectRatio(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp),
+                    LayoutExpandedWidth) { }
             }
         }, @Composable {
-            Column(ExpandedHeight, arrangement = Arrangement.SpaceBetween) {
-                Container(AspectRatio(2f)) { }
+            Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceBetween) {
+                Container(LayoutAspectRatio(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
             }
         }, @Composable {
-            Column(ExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
-                Container(AspectRatio(2f)) { }
+            Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
+                Container(LayoutAspectRatio(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
@@ -2784,97 +2790,97 @@
     fun testColumn_withFlexibleChildren_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
             Column {
-                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), Flexible(3f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), Flexible(2f)) { }
-                Container(AspectRatio(0.5f) wraps Flexible(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), LayoutFlexible(3f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), LayoutFlexible(2f)) { }
+                Container(LayoutAspectRatio(0.5f) + LayoutFlexible(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
             }
         }, @Composable {
             Column {
                 ConstrainedBox(
                     DpConstraints.tightConstraints(30.dp, 20.dp),
-                    Flexible(3f) wraps Gravity.Start
+                    LayoutFlexible(3f) + LayoutGravity.Start
                 ) { }
                 ConstrainedBox(
                     DpConstraints.tightConstraints(40.dp, 30.dp),
-                    Flexible(2f) wraps Gravity.Center
+                    LayoutFlexible(2f) + LayoutGravity.Center
                 ) { }
-                Container(AspectRatio(0.5f) wraps Flexible(2f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), Gravity.End) { }
+                Container(LayoutAspectRatio(0.5f) + LayoutFlexible(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), LayoutGravity.End) { }
             }
         }, @Composable {
             Column(arrangement = Arrangement.Begin) {
-                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), Flexible(3f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), Flexible(2f)) { }
-                Container(AspectRatio(0.5f) wraps Flexible(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), LayoutFlexible(3f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), LayoutFlexible(2f)) { }
+                Container(LayoutAspectRatio(0.5f) + LayoutFlexible(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
             }
         }, @Composable {
             Column(arrangement = Arrangement.Center) {
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
-                    modifier = Flexible(3f) wraps Gravity.Center
+                    modifier = LayoutFlexible(3f) + LayoutGravity.Center
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(40.dp, 30.dp),
-                    modifier = Flexible(2f) wraps Gravity.Center
+                    modifier = LayoutFlexible(2f) + LayoutGravity.Center
                 ) { }
                 Container(
-                    AspectRatio(0.5f) wraps Flexible(2f) wraps Gravity.Center
+                    LayoutAspectRatio(0.5f) + LayoutFlexible(2f) + LayoutGravity.Center
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
-                    modifier = Gravity.Center
+                    modifier = LayoutGravity.Center
                 ) { }
             }
         }, @Composable {
             Column(arrangement = Arrangement.End) {
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
-                    modifier = Flexible(3f) wraps Gravity.End
+                    modifier = LayoutFlexible(3f) + LayoutGravity.End
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(40.dp, 30.dp),
-                    modifier = Flexible(2f) wraps Gravity.End
+                    modifier = LayoutFlexible(2f) + LayoutGravity.End
                 ) { }
                 Container(
-                    AspectRatio(0.5f) wraps Flexible(2f) wraps Gravity.End
+                    LayoutAspectRatio(0.5f) + LayoutFlexible(2f) + LayoutGravity.End
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
-                    modifier = Gravity.End
+                    modifier = LayoutGravity.End
                 ) { }
             }
         }, @Composable {
             Column(arrangement = Arrangement.SpaceAround) {
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
-                    modifier = Flexible(3f) wraps ExpandedWidth
+                    modifier = LayoutFlexible(3f) + LayoutExpandedWidth
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(40.dp, 30.dp),
-                    modifier = Flexible(2f) wraps ExpandedWidth
+                    modifier = LayoutFlexible(2f) + LayoutExpandedWidth
                 ) { }
                 Container(
-                    AspectRatio(0.5f) wraps Flexible(2f) wraps ExpandedWidth
+                    LayoutAspectRatio(0.5f) + LayoutFlexible(2f) + LayoutExpandedWidth
                 ) { }
                 ConstrainedBox(
                     constraints = DpConstraints.tightConstraints(30.dp, 20.dp),
-                    modifier = ExpandedWidth
+                    modifier = LayoutExpandedWidth
                 ) { }
             }
         }, @Composable {
             Column(arrangement = Arrangement.SpaceBetween) {
-                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), Flexible(3f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), Flexible(2f)) { }
-                Container(AspectRatio(0.5f) wraps Flexible(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), LayoutFlexible(3f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), LayoutFlexible(2f)) { }
+                Container(LayoutAspectRatio(0.5f) + LayoutFlexible(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
             }
         }, @Composable {
             Column(arrangement = Arrangement.SpaceEvenly) {
-                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), Flexible(3f)) { }
-                ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), Flexible(2f)) { }
-                Container(AspectRatio(0.5f) wraps Flexible(2f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), LayoutFlexible(3f)) { }
+                ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp), LayoutFlexible(2f)) { }
+                Container(LayoutAspectRatio(0.5f) + LayoutFlexible(2f)) { }
                 ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
@@ -2936,7 +2942,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(2f)) { }
+                    Container(LayoutAspectRatio(2f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -2951,7 +2957,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(2f)) { }
+                    Container(LayoutAspectRatio(2f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -2969,7 +2975,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(2f)) { }
+                    Container(LayoutAspectRatio(2f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -2987,7 +2993,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(2f)) { }
+                    Container(LayoutAspectRatio(2f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -3005,7 +3011,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(2f)) { }
+                    Container(LayoutAspectRatio(2f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -3020,7 +3026,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(2f)) { }
+                    Container(LayoutAspectRatio(2f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -3035,7 +3041,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 40.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(2f)) { }
+                    Container(LayoutAspectRatio(2f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
@@ -3100,7 +3106,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(0.5f)) { }
+                    Container(LayoutAspectRatio(0.5f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3115,7 +3121,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(0.5f)) { }
+                    Container(LayoutAspectRatio(0.5f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3133,7 +3139,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(0.5f)) { }
+                    Container(LayoutAspectRatio(0.5f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3151,7 +3157,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(0.5f)) { }
+                    Container(LayoutAspectRatio(0.5f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3169,7 +3175,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(0.5f)) { }
+                    Container(LayoutAspectRatio(0.5f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3184,7 +3190,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(0.5f)) { }
+                    Container(LayoutAspectRatio(0.5f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3199,7 +3205,7 @@
                     ConstrainedBox(DpConstraints.tightConstraints(40.dp, 30.dp)) { }
                 }
                 expanded(flex = 2f) {
-                    Container(AspectRatio(0.5f)) { }
+                    Container(LayoutAspectRatio(0.5f)) { }
                 }
                 inflexible {
                     ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
@@ -3348,13 +3354,15 @@
 
         show {
             Align(Alignment.TopLeft) {
-                Column(ExpandedHeight) {
+                Column(LayoutExpandedHeight) {
                     OnChildPositioned(onPositioned = { coordinates ->
                         containerSize.value = coordinates.size
                         containerPosition.value = coordinates.localToGlobal(PxPosition(0.px, 0.px))
                         positionedLatch.countDown()
                     }) {
-                        Container(Inflexible wraps Flexible(1f), width = 40.dp, height = 40.dp) {}
+                        Container(
+                            LayoutInflexible + LayoutFlexible(1f),
+                            width = 40.dp, height = 40.dp) {}
                     }
                 }
             }
@@ -3376,7 +3384,7 @@
         show {
             Row {
                 Container(
-                    modifier = Gravity.RelativeToSiblings { it.height },
+                    modifier = LayoutGravity.RelativeToSiblings { it.height },
                     width = size,
                     height = size
                 ) {}
@@ -3386,8 +3394,8 @@
                     positionedLatch.countDown()
                 }) {
                     Container(
-                        modifier = Gravity.RelativeToSiblings { 0.ipx }
-                                wraps Gravity.RelativeToSiblings { it.height * 0.5 },
+                        modifier = LayoutGravity.RelativeToSiblings { 0.ipx } +
+                                LayoutGravity.RelativeToSiblings { it.height * 0.5 },
                         width = size,
                         height = size
                     ) {}
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacingModifierTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/LayoutPaddingTest.kt
similarity index 69%
rename from ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacingModifierTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/LayoutPaddingTest.kt
index cd84d9c..91dc6a5 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacingModifierTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/LayoutPaddingTest.kt
@@ -35,8 +35,8 @@
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.ui.core.min
-import androidx.ui.layout.AspectRatio
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutAspectRatio
+import androidx.ui.layout.LayoutPadding
 import org.junit.Assert
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -46,85 +46,86 @@
 
 @SmallTest
 @RunWith(JUnit4::class)
-class SpacingModifierTest : LayoutTest() {
+class LayoutPaddingTest : LayoutTest() {
 
     /**
-     * Tests that the [Spacing]-all and [Spacing] factories return equivalent modifiers.
+     * Tests that the [LayoutPadding]-all and [LayoutPadding] factories return equivalent modifiers.
      */
     @Test
     fun allEqualToAbsoluteWithExplicitSides() {
         Assert.assertEquals(
-            Spacing(10.dp, 10.dp, 10.dp, 10.dp),
-            Spacing(10.dp)
+            LayoutPadding(10.dp, 10.dp, 10.dp, 10.dp),
+            LayoutPadding(10.dp)
         )
     }
 
     /**
-     * Tests the top-level [Spacing] modifier factory with a single "all sides" argument,
-     * checking that a uniform spacing of all sides is applied to a child when plenty of space is
-     * available for both content and spacing.
+     * Tests the top-level [LayoutPadding] modifier factory with a single "all sides" argument,
+     * checking that a uniform padding of all sides is applied to a child when plenty of space is
+     * available for both content and padding.
      */
     @Test
-    fun spacingAllAppliedToChild() = withDensity(density) {
-        val spacing = 10.dp
-        testSpacingIsAppliedImplementation(spacing) { child: @Composable() () -> Unit ->
-            TestBox(modifier = Spacing(spacing), body = child)
+    fun paddingAllAppliedToChild() = withDensity(density) {
+        val padding = 10.dp
+        testPaddingIsAppliedImplementation(padding) { child: @Composable() () -> Unit ->
+            TestBox(modifier = LayoutPadding(padding), body = child)
         }
     }
 
     /**
-     * Tests the top-level [Spacing] modifier factory with different values for left, top,
-     * right and bottom spacings, checking that this spacing is applied as expected when plenty of
-     * space is available for both the content and spacing.
+     * Tests the top-level [LayoutPadding] modifier factory with different values for left, top,
+     * right and bottom paddings, checking that this padding is applied as expected when plenty of
+     * space is available for both the content and padding.
      */
     @Test
-    fun absoluteSpacingAppliedToChild() {
-        val spacingLeft = 10.dp
-        val spacingTop = 15.dp
-        val spacingRight = 20.dp
-        val spacingBottom = 30.dp
-        val spacing = Spacing(spacingLeft, spacingTop, spacingRight, spacingBottom)
-        testSpacingWithDifferentInsetsImplementation(
-            spacingLeft,
-            spacingTop,
-            spacingRight,
-            spacingBottom
+    fun absolutePaddingAppliedToChild() {
+        val paddingLeft = 10.dp
+        val paddingTop = 15.dp
+        val paddingRight = 20.dp
+        val paddingBottom = 30.dp
+        val padding = LayoutPadding(paddingLeft, paddingTop, paddingRight, paddingBottom)
+        testPaddingWithDifferentInsetsImplementation(
+            paddingLeft,
+            paddingTop,
+            paddingRight,
+            paddingBottom
         ) { child: @Composable() () -> Unit ->
-            TestBox(modifier = spacing, body = child)
+            TestBox(modifier = padding, body = child)
         }
     }
 
     /**
-     * Tests the result of the [Spacing] modifier factory when not enough space is available to
-     * accommodate both the spacing and the content. In this case, the spacing should still be
-     * applied, modifying the final position of the content by its left and top spacings even if it
-     * would result in constraints that the child content is unable or unwilling to satisfy.
+     * Tests the result of the [LayoutPadding] modifier factory when not enough space is
+     * available to accommodate both the padding and the content. In this case, the padding
+     * should still be applied, modifying the final position of the content by its left and top
+     * paddings even if it would result in constraints that the child content is unable or
+     * unwilling to satisfy.
      */
     @Test
     fun insufficientSpaceAvailable() = withDensity(density) {
-        val spacing = 30.dp
-        testSpacingWithInsufficientSpaceImplementation(spacing) { child: @Composable() () -> Unit ->
-            TestBox(modifier = Spacing(spacing), body = child)
+        val padding = 30.dp
+        testPaddingWithInsufficientSpaceImplementation(padding) { child: @Composable() () -> Unit ->
+            TestBox(modifier = LayoutPadding(padding), body = child)
         }
     }
 
     @Test
     fun intrinsicMeasurements() = withDensity(density) {
-        val spacing = 100.ipx.toDp()
+        val padding = 100.ipx.toDp()
 
         val latch = CountDownLatch(1)
         var error: Throwable? = null
         testIntrinsics(@Composable {
-            TestBox(modifier = Spacing(spacing)) {
-                Container(AspectRatio(2f)) { }
+            TestBox(modifier = LayoutPadding(padding)) {
+                Container(LayoutAspectRatio(2f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Spacing is applied on both sides of an axis
-            val totalAxisSpacing = (spacing * 2).toIntPx()
+            val totalAxisSpacing = (padding * 2).toIntPx()
 
-            // When the width/height is measured as 3 x the spacing
-            val testDimension = (spacing * 3).toIntPx()
-            // The actual dimension for the AspectRatio will be: test dimension - total spacing
+            // When the width/height is measured as 3 x the padding
+            val testDimension = (padding * 3).toIntPx()
+            // The actual dimension for the AspectRatio will be: test dimension - total padding
             val actualAspectRatioDimension = testDimension - totalAxisSpacing
 
             // When we measure the width first, the height will be half
@@ -132,9 +133,9 @@
             // When we measure the height first, the width will be double
             val expectedAspectRatioWidth = actualAspectRatioDimension * 2
 
-            // Add back the spacing on both sides to get the total expected height
+            // Add back the padding on both sides to get the total expected height
             val expectedTotalHeight = expectedAspectRatioHeight + totalAxisSpacing
-            // Add back the spacing on both sides to get the total expected height
+            // Add back the padding on both sides to get the total expected height
             val expectedTotalWidth = expectedAspectRatioWidth + totalAxisSpacing
 
             try {
@@ -167,13 +168,13 @@
         Unit
     }
 
-    private fun testSpacingIsAppliedImplementation(
-        spacing: Dp,
-        spacingContainer: @Composable() (@Composable() () -> Unit) -> Unit
+    private fun testPaddingIsAppliedImplementation(
+        padding: Dp,
+        paddingContainer: @Composable() (@Composable() () -> Unit) -> Unit
     ) = withDensity(density) {
         val sizeDp = 50.dp
         val size = sizeDp.toIntPx()
-        val spacingPx = spacing.toIntPx()
+        val paddingPx = padding.toIntPx()
 
         val drawLatch = CountDownLatch(1)
         var childSize = PxSize(-1.px, -1.px)
@@ -191,7 +192,7 @@
                             })
                         }
                     }
-                    spacingContainer(children)
+                    paddingContainer(children)
                 }
             }
         }
@@ -200,22 +201,22 @@
         val root = findAndroidComposeView()
         waitForDraw(root)
 
-        val innerSize = (size - spacingPx * 2)
+        val innerSize = (size - paddingPx * 2)
         assertEquals(PxSize(innerSize, innerSize), childSize)
-        val left = ((root.width.ipx - size) / 2) + spacingPx
-        val top = ((root.height.ipx - size) / 2) + spacingPx
+        val left = ((root.width.ipx - size) / 2) + paddingPx
+        val top = ((root.height.ipx - size) / 2) + paddingPx
         assertEquals(
             PxPosition(left.toPx(), top.toPx()),
             childPosition
         )
     }
 
-    private fun testSpacingWithDifferentInsetsImplementation(
+    private fun testPaddingWithDifferentInsetsImplementation(
         left: Dp,
         top: Dp,
         right: Dp,
         bottom: Dp,
-        spacingContainer: @Composable() ((@Composable() () -> Unit) -> Unit)
+        paddingContainer: @Composable() ((@Composable() () -> Unit) -> Unit)
     ) = withDensity(density) {
         val sizeDp = 50.dp
         val size = sizeDp.toIntPx()
@@ -236,7 +237,7 @@
                             })
                         }
                     }
-                    spacingContainer(children)
+                    paddingContainer(children)
                 }
             }
         }
@@ -245,32 +246,32 @@
         val root = findAndroidComposeView()
         waitForDraw(root)
 
-        val spacingLeft = left.toIntPx()
-        val spacingRight = right.toIntPx()
-        val spacingTop = top.toIntPx()
-        val spacingBottom = bottom.toIntPx()
+        val paddingLeft = left.toIntPx()
+        val paddingRight = right.toIntPx()
+        val paddingTop = top.toIntPx()
+        val paddingBottom = bottom.toIntPx()
         assertEquals(
             PxSize(
-                size - spacingLeft - spacingRight,
-                size - spacingTop - spacingBottom
+                size - paddingLeft - paddingRight,
+                size - paddingTop - paddingBottom
             ),
             childSize
         )
-        val viewLeft = ((root.width.ipx - size) / 2) + spacingLeft
-        val viewTop = ((root.height.ipx - size) / 2) + spacingTop
+        val viewLeft = ((root.width.ipx - size) / 2) + paddingLeft
+        val viewTop = ((root.height.ipx - size) / 2) + paddingTop
         assertEquals(
             PxPosition(viewLeft.toPx(), viewTop.toPx()),
             childPosition
         )
     }
 
-    private fun testSpacingWithInsufficientSpaceImplementation(
-        spacing: Dp,
-        spacingContainer: @Composable() (@Composable() () -> Unit) -> Unit
+    private fun testPaddingWithInsufficientSpaceImplementation(
+        padding: Dp,
+        paddingContainer: @Composable() (@Composable() () -> Unit) -> Unit
     ) = withDensity(density) {
         val sizeDp = 50.dp
         val size = sizeDp.toIntPx()
-        val spacingPx = spacing.toIntPx()
+        val paddingPx = padding.toIntPx()
 
         val drawLatch = CountDownLatch(1)
         var childSize = PxSize(-1.px, -1.px)
@@ -278,7 +279,7 @@
         show {
             Center {
                 ConstrainedBox(constraints = DpConstraints.tightConstraints(sizeDp, sizeDp)) {
-                    spacingContainer {
+                    paddingContainer {
                         Container {
                             OnPositioned(onPositioned = { coordinates ->
                                 childSize = coordinates.size
@@ -296,8 +297,8 @@
         waitForDraw(root)
 
         assertEquals(PxSize(0.px, 0.px), childSize)
-        val left = ((root.width.ipx - size) / 2) + spacingPx
-        val top = ((root.height.ipx - size) / 2) + spacingPx
+        val left = ((root.width.ipx - size) / 2) + paddingPx
+        val top = ((root.height.ipx - size) / 2) + paddingPx
         assertEquals(PxPosition(left.toPx(), top.toPx()), childPosition)
     }
 
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt
index d1dd28a..0bcac82 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt
@@ -34,7 +34,7 @@
 import androidx.ui.layout.EdgeInsets
 import androidx.ui.layout.Padding
 import androidx.compose.Composable
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
@@ -267,7 +267,7 @@
 
         testIntrinsics(@Composable {
             Padding(padding = padding) {
-                Container(AspectRatio(2f)) { }
+                Container(LayoutAspectRatio(2f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Padding is applied on both sides of an axis
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SizeModifiersTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SizeModifiersTest.kt
index fef4e8f..5ec3e40 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SizeModifiersTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SizeModifiersTest.kt
@@ -29,19 +29,19 @@
 import androidx.ui.core.ipx
 import androidx.ui.core.withDensity
 import androidx.ui.layout.Align
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
-import androidx.ui.layout.Height
-import androidx.ui.layout.MaxHeight
-import androidx.ui.layout.MaxSize
-import androidx.ui.layout.MaxWidth
-import androidx.ui.layout.MinHeight
-import androidx.ui.layout.MinSize
-import androidx.ui.layout.MinWidth
+import androidx.ui.layout.LayoutHeight
+import androidx.ui.layout.LayoutMaxHeight
+import androidx.ui.layout.LayoutMaxSize
+import androidx.ui.layout.LayoutMaxWidth
+import androidx.ui.layout.LayoutMinHeight
+import androidx.ui.layout.LayoutMinSize
+import androidx.ui.layout.LayoutMinWidth
 import androidx.ui.layout.Row
-import androidx.ui.layout.Size
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWidth
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
@@ -64,27 +64,27 @@
             Align(alignment = Alignment.TopLeft) {
                 Column {
                     Container(
-                        MaxWidth(sizeDp * 2) wraps MinWidth(sizeDp) wraps Height(sizeDp)
+                        LayoutMaxWidth(sizeDp * 2) + LayoutMinWidth(sizeDp) + LayoutHeight(sizeDp)
                     ) {
                         SaveLayoutInfo(size[0], position[0], positionedLatch)
                     }
-                    Container(MaxWidth(sizeDp * 2) wraps Height(sizeDp)) {
+                    Container(LayoutMaxWidth(sizeDp * 2) + LayoutHeight(sizeDp)) {
                         SaveLayoutInfo(size[1], position[1], positionedLatch)
                     }
-                    Container(MinWidth(sizeDp) wraps Height(sizeDp)) {
+                    Container(LayoutMinWidth(sizeDp) + LayoutHeight(sizeDp)) {
                         SaveLayoutInfo(size[2], position[2], positionedLatch)
                     }
                     Container(
-                        MaxWidth(sizeDp) wraps MinWidth(sizeDp * 2) wraps Height(sizeDp)
+                        LayoutMaxWidth(sizeDp) + LayoutMinWidth(sizeDp * 2) + LayoutHeight(sizeDp)
                     ) {
                         SaveLayoutInfo(size[3], position[3], positionedLatch)
                     }
                     Container(
-                        MinWidth(sizeDp * 2) wraps MaxWidth(sizeDp) wraps Height(sizeDp)
+                        LayoutMinWidth(sizeDp * 2) + LayoutMaxWidth(sizeDp) + LayoutHeight(sizeDp)
                     ) {
                         SaveLayoutInfo(size[4], position[4], positionedLatch)
                     }
-                    Container(Width(sizeDp) wraps Height(sizeDp)) {
+                    Container(LayoutWidth(sizeDp) + LayoutHeight(sizeDp)) {
                         SaveLayoutInfo(size[5], position[5], positionedLatch)
                     }
                 }
@@ -123,27 +123,27 @@
             Align(alignment = Alignment.TopLeft) {
                 Row {
                     Container(
-                        MaxHeight(sizeDp * 2) wraps MinHeight(sizeDp) wraps Width(sizeDp)
+                        LayoutMaxHeight(sizeDp * 2) + LayoutMinHeight(sizeDp) + LayoutWidth(sizeDp)
                     ) {
                         SaveLayoutInfo(size[0], position[0], positionedLatch)
                     }
-                    Container(MaxHeight(sizeDp * 2) wraps Width(sizeDp)) {
+                    Container(LayoutMaxHeight(sizeDp * 2) + LayoutWidth(sizeDp)) {
                         SaveLayoutInfo(size[1], position[1], positionedLatch)
                     }
-                    Container(MinHeight(sizeDp) wraps Width(sizeDp)) {
+                    Container(LayoutMinHeight(sizeDp) + LayoutWidth(sizeDp)) {
                         SaveLayoutInfo(size[2], position[2], positionedLatch)
                     }
                     Container(
-                        MaxHeight(sizeDp) wraps MinHeight(sizeDp * 2) wraps Width(sizeDp)
+                        LayoutMaxHeight(sizeDp) + LayoutMinHeight(sizeDp * 2) + LayoutWidth(sizeDp)
                     ) {
                         SaveLayoutInfo(size[3], position[3], positionedLatch)
                     }
                     Container(
-                        MinHeight(sizeDp * 2) wraps MaxHeight(sizeDp) wraps Width(sizeDp)
+                        LayoutMinHeight(sizeDp * 2) + LayoutMaxHeight(sizeDp) + LayoutWidth(sizeDp)
                     ) {
                         SaveLayoutInfo(size[4], position[4], positionedLatch)
                     }
-                    Container(Height(sizeDp) wraps Width(sizeDp)) {
+                    Container(LayoutHeight(sizeDp) + LayoutWidth(sizeDp)) {
                         SaveLayoutInfo(size[5], position[5], positionedLatch)
                     }
                 }
@@ -182,28 +182,26 @@
             Align(alignment = Alignment.TopLeft) {
                 Row {
                     Container(
-                        MaxSize(sizeDp * 2, sizeDp * 2)
-                                wraps MinSize(sizeDp, sizeDp)
+                        LayoutMaxSize(sizeDp * 2, sizeDp * 2) + LayoutMinSize(sizeDp, sizeDp)
                     ) {
                         SaveLayoutInfo(size[0], position[0], positionedLatch)
                     }
                     Container(
-                        MaxSize(sizeDp, sizeDp) wraps MinSize(sizeDp * 2, sizeDp)
+                        LayoutMaxSize(sizeDp, sizeDp) + LayoutMinSize(sizeDp * 2, sizeDp)
                     ) {
                         SaveLayoutInfo(size[1], position[1], positionedLatch)
                     }
                     Container(
-                        MinSize(sizeDp, sizeDp) wraps MaxSize(sizeDp * 2, sizeDp * 2)
+                        LayoutMinSize(sizeDp, sizeDp) + LayoutMaxSize(sizeDp * 2, sizeDp * 2)
                     ) {
                         SaveLayoutInfo(size[2], position[2], positionedLatch)
                     }
                     Container(
-                        MinSize(sizeDp * 2, sizeDp * 2)
-                                wraps MaxSize(sizeDp, sizeDp)
+                        LayoutMinSize(sizeDp * 2, sizeDp * 2) + LayoutMaxSize(sizeDp, sizeDp)
                     ) {
                         SaveLayoutInfo(size[3], position[3], positionedLatch)
                     }
-                    Container(Size(sizeDp, sizeDp)) {
+                    Container(LayoutSize(sizeDp, sizeDp)) {
                         SaveLayoutInfo(size[4], position[4], positionedLatch)
                     }
                 }
@@ -243,7 +241,7 @@
                         constrainedBoxSize.value = coordinates.size
                         positionedLatch.countDown()
                     }) {
-                        Container(Width(sizeDp * 2) wraps Height(sizeDp * 3)) {
+                        Container(LayoutWidth(sizeDp * 2) + LayoutHeight(sizeDp * 3)) {
                             Container(expanded = true) {
                                 SaveLayoutInfo(
                                     size = childSize,
@@ -274,21 +272,23 @@
         show {
             Align(alignment = Alignment.TopLeft) {
                 Row {
-                    Container(MaxWidth(Dp.Infinity)) {
+                    Container(LayoutMaxWidth(Dp.Infinity)) {
                         Container(width = sizeDp, height = sizeDp) {
                             SaveLayoutInfo(size[0], position[0], positionedLatch)
                         }
                     }
-                    Container(MaxHeight(Dp.Infinity)) {
+                    Container(LayoutMaxHeight(Dp.Infinity)) {
                         Container(width = sizeDp, height = sizeDp) {
                             SaveLayoutInfo(size[1], position[1], positionedLatch)
                         }
                     }
-                    Container(Width(sizeDp) wraps Height(sizeDp) wraps MaxWidth(Dp.Infinity)
-                            wraps MaxHeight(Dp.Infinity)) {
+                    Container(
+                        LayoutWidth(sizeDp) + LayoutHeight(sizeDp) + LayoutMaxWidth(Dp.Infinity) +
+                                LayoutMaxHeight(Dp.Infinity)
+                    ) {
                         SaveLayoutInfo(size[2], position[2], positionedLatch)
                     }
-                    Container(MaxSize(Dp.Infinity, Dp.Infinity)) {
+                    Container(LayoutMaxSize(Dp.Infinity, Dp.Infinity)) {
                         Container(width = sizeDp, height = sizeDp) {
                             SaveLayoutInfo(size[3], position[3], positionedLatch)
                         }
@@ -307,8 +307,8 @@
     @Test
     fun testMinWidthModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(MinWidth(10.dp)) {
-                Container(AspectRatio(1f)) { }
+            Container(LayoutMinWidth(10.dp)) {
+                Container(LayoutAspectRatio(1f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
@@ -337,8 +337,8 @@
     @Test
     fun testMaxWidthModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(MaxWidth(20.dp)) {
-                Container(AspectRatio(1f)) { }
+            Container(LayoutMaxWidth(20.dp)) {
+                Container(LayoutAspectRatio(1f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
@@ -367,8 +367,8 @@
     @Test
     fun testMinHeightModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(MinHeight(30.dp)) {
-                Container(AspectRatio(1f)) { }
+            Container(LayoutMinHeight(30.dp)) {
+                Container(LayoutAspectRatio(1f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
@@ -397,8 +397,8 @@
     @Test
     fun testMaxHeightModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(MaxHeight(40.dp)) {
-                Container(AspectRatio(1f)) { }
+            Container(LayoutMaxHeight(40.dp)) {
+                Container(LayoutAspectRatio(1f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
@@ -427,8 +427,8 @@
     @Test
     fun testWidthModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(Width(10.dp)) {
-                Container(AspectRatio(1f)) { }
+            Container(LayoutWidth(10.dp)) {
+                Container(LayoutAspectRatio(1f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
@@ -457,8 +457,8 @@
     @Test
     fun testHeightModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(Height(10.dp)) {
-                Container(AspectRatio(1f)) { }
+            Container(LayoutHeight(10.dp)) {
+                Container(LayoutAspectRatio(1f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
@@ -487,9 +487,9 @@
     @Test
     fun testWidthHeightModifiers_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(MinWidth(10.dp) wraps MaxWidth(20.dp) wraps MinHeight(30.dp) wraps
-                    MaxHeight(40.dp)) {
-                Container(AspectRatio(1f)) { }
+            Container(LayoutMinWidth(10.dp) + LayoutMaxWidth(20.dp) + LayoutMinHeight(30.dp) +
+                    LayoutMaxHeight(40.dp)) {
+                Container(LayoutAspectRatio(1f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
@@ -518,8 +518,8 @@
     @Test
     fun testMinSizeModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(MinSize(20.dp, 30.dp)) {
-                Container(AspectRatio(1f)) { }
+            Container(LayoutMinSize(20.dp, 30.dp)) {
+                Container(LayoutAspectRatio(1f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
@@ -548,8 +548,8 @@
     @Test
     fun testMaxSizeModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(MaxSize(40.dp, 50.dp)) {
-                Container(AspectRatio(1f)) { }
+            Container(LayoutMaxSize(40.dp, 50.dp)) {
+                Container(LayoutAspectRatio(1f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
@@ -578,8 +578,8 @@
     @Test
     fun testSizeModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(Size(40.dp, 50.dp)) {
-                Container(AspectRatio(1f)) { }
+            Container(LayoutSize(40.dp, 50.dp)) {
+                Container(LayoutAspectRatio(1f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt
index 854f9f5..31f942b 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt
@@ -26,10 +26,10 @@
 import androidx.ui.layout.Center
 import androidx.ui.layout.Container
 import androidx.ui.layout.DpConstraints
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutHeight
 import androidx.ui.layout.Spacer
-import androidx.ui.layout.Size
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWidth
 import com.google.common.truth.Truth
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -59,7 +59,7 @@
                     size = position.size
                     drawLatch.countDown()
                 }) {
-                    Spacer(Size(width = width, height = height))
+                    Spacer(LayoutSize(width = width, height = height))
                 }
             }
         }
@@ -92,7 +92,7 @@
                         size = position.size
                         drawLatch.countDown()
                     }) {
-                        Spacer(Size(width = width, height = height))
+                        Spacer(LayoutSize(width = width, height = height))
                     }
                 }
             }
@@ -117,7 +117,7 @@
                     size = position.size
                     drawLatch.countDown()
                 }) {
-                    Spacer(Width(width))
+                    Spacer(LayoutWidth(width))
                 }
             }
         }
@@ -149,7 +149,7 @@
                         size = position.size
                         drawLatch.countDown()
                     }) {
-                        Spacer(Width(width))
+                        Spacer(LayoutWidth(width))
                     }
                 }
             }
@@ -174,7 +174,7 @@
                     size = position.size
                     drawLatch.countDown()
                 }) {
-                    Spacer(Height(height))
+                    Spacer(LayoutHeight(height))
                 }
             }
         }
@@ -206,7 +206,7 @@
                         size = position.size
                         drawLatch.countDown()
                     }) {
-                        Spacer(Height(height))
+                        Spacer(LayoutHeight(height))
                     }
                 }
             }
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt
index b6e3118..7f40c2e 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt
@@ -16,9 +16,11 @@
 
 package androidx.ui.layout.test
 
+import androidx.compose.Composable
 import androidx.test.filters.SmallTest
-import androidx.ui.core.OnChildPositioned
+import androidx.ui.core.Alignment
 import androidx.ui.core.IntPx
+import androidx.ui.core.OnChildPositioned
 import androidx.ui.core.PxPosition
 import androidx.ui.core.PxSize
 import androidx.ui.core.Ref
@@ -30,14 +32,12 @@
 import androidx.ui.layout.ConstrainedBox
 import androidx.ui.layout.Container
 import androidx.ui.layout.DpConstraints
+import androidx.ui.layout.LayoutAspectRatio
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutPadding
+import androidx.ui.layout.LayoutSize
 import androidx.ui.layout.Stack
-import androidx.compose.Composable
-import androidx.ui.core.Alignment
-import androidx.ui.layout.AspectRatio
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Size
-import androidx.ui.layout.Spacing
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
@@ -65,7 +65,7 @@
                     positionedLatch.countDown()
                 }) {
                     Stack {
-                        Container(modifier = Gravity.BottomRight, width = sizeDp, height = sizeDp) {
+                        Container(LayoutGravity.BottomRight, width = sizeDp, height = sizeDp) {
                             SaveLayoutInfo(
                                 size = alignedChildSize,
                                 position = alignedChildPosition,
@@ -73,7 +73,7 @@
                             )
                         }
 
-                        Container(Gravity.Stretch wraps Spacing(10.dp)) {
+                        Container(LayoutGravity.Stretch + LayoutPadding(10.dp)) {
                             SaveLayoutInfo(
                                 size = positionedChildSize,
                                 position = positionedChildPosition,
@@ -112,7 +112,7 @@
                 }) {
                     Stack {
                         Container(
-                            modifier = Gravity.BottomRight, width = sizeDp, height = sizeDp
+                            modifier = LayoutGravity.BottomRight, width = sizeDp, height = sizeDp
                         ) {
                             SaveLayoutInfo(
                                 size = childSize[0],
@@ -121,7 +121,7 @@
                             )
                         }
                         Container(
-                            modifier = Gravity.BottomRight,
+                            modifier = LayoutGravity.BottomRight,
                             width = doubleSizeDp,
                             height = doubleSizeDp
                         ) {
@@ -163,7 +163,7 @@
                     positionedLatch.countDown()
                 }) {
                     Stack {
-                        Container(modifier = Gravity.Center, width = sizeDp, height = sizeDp) {
+                        Container(LayoutGravity.Center, width = sizeDp, height = sizeDp) {
                             SaveLayoutInfo(
                                 size = childSize[0],
                                 position = childPosition[0],
@@ -171,7 +171,10 @@
                             )
                         }
                         Container(
-                            Gravity.Stretch wraps Spacing(left = insetDp, top = insetDp),
+                            LayoutGravity.Stretch + LayoutPadding(
+                                left = insetDp,
+                                top = insetDp
+                            ),
                             width = halfSizeDp,
                             height = halfSizeDp
                         ) {
@@ -182,7 +185,10 @@
                             )
                         }
                         Container(
-                            Gravity.Stretch wraps Spacing(right = insetDp, bottom = insetDp),
+                            LayoutGravity.Stretch + LayoutPadding(
+                                right = insetDp,
+                                bottom = insetDp
+                            ),
                             width = halfSizeDp,
                             height = halfSizeDp
                         ) {
@@ -193,7 +199,10 @@
                             )
                         }
                         Container(
-                            Gravity.Stretch wraps Spacing(right = insetDp, left = insetDp),
+                            LayoutGravity.Stretch + LayoutPadding(
+                                left = insetDp,
+                                right = insetDp
+                            ),
                             width = halfSizeDp,
                             height = halfSizeDp) {
                             SaveLayoutInfo(
@@ -203,7 +212,10 @@
                             )
                         }
                         Container(
-                            Gravity.Stretch wraps Spacing(top = insetDp, bottom = insetDp),
+                            LayoutGravity.Stretch + LayoutPadding(
+                                top = insetDp,
+                                bottom = insetDp
+                            ),
                             width = halfSizeDp,
                             height = halfSizeDp
                         ) {
@@ -249,9 +261,9 @@
                     stackSize.value = coordinates.size
                     positionedLatch.countDown()
                 }) {
-                    Container(Size(sizeDp, sizeDp)) {
+                    Container(LayoutSize(sizeDp, sizeDp)) {
                         Stack {
-                            Container(Expanded) {
+                            Container(LayoutExpanded) {
                                 SaveLayoutInfo(
                                     size = childSize[0],
                                     position = childPosition[0],
@@ -259,7 +271,7 @@
                                 )
                             }
                             Container(
-                                Gravity.BottomRight,
+                                LayoutGravity.BottomRight,
                                 width = halfSizeDp,
                                 height = halfSizeDp
                             ) {
@@ -296,13 +308,14 @@
 
         testIntrinsics(@Composable {
             Stack {
-                Container(Gravity.TopLeft wraps AspectRatio(2f)) { }
+                Container(LayoutGravity.TopLeft + LayoutAspectRatio(2f)) { }
                 ConstrainedBox(
-                    DpConstraints.tightConstraints(testWidth, testHeight), Gravity.BottomCenter
+                    DpConstraints.tightConstraints(testWidth, testHeight),
+                    LayoutGravity.BottomCenter
                 ) { }
                 ConstrainedBox(
                     DpConstraints.tightConstraints(200.dp, 200.dp),
-                    Gravity.Stretch wraps Spacing(10.dp)
+                    LayoutGravity.Stretch + LayoutPadding(10.dp)
                 ) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
@@ -330,7 +343,7 @@
         testIntrinsics(@Composable {
             Stack {
                 ConstrainedBox(
-                    modifier = Gravity.Stretch wraps Spacing(10.dp),
+                    modifier = LayoutGravity.Stretch + LayoutPadding(10.dp),
                     constraints = DpConstraints.tightConstraints(200.dp, 200.dp)
                 ) { }
             }
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/TableTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/TableTest.kt
index 5beeb0e5..c7f590d7 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/TableTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/TableTest.kt
@@ -31,7 +31,7 @@
 import androidx.ui.core.min
 import androidx.ui.core.withDensity
 import androidx.ui.layout.Align
-import androidx.ui.layout.AspectRatio
+import androidx.ui.layout.LayoutAspectRatio
 import androidx.ui.layout.ConstrainedBox
 import androidx.ui.layout.Container
 import androidx.ui.layout.DpConstraints
@@ -1309,7 +1309,7 @@
                     for (i in 0 until rows) {
                         tableRow {
                             for (j in 0 until columns) {
-                                Container(AspectRatio(2f)) { }
+                                Container(LayoutAspectRatio(2f)) { }
                             }
                         }
                     }
@@ -1354,7 +1354,7 @@
                     for (i in 0 until rows) {
                         tableRow {
                             for (j in 0 until columns) {
-                                Container(AspectRatio(2f)) { }
+                                Container(LayoutAspectRatio(2f)) { }
                             }
                         }
                     }
@@ -1399,7 +1399,7 @@
                     for (i in 0 until rows) {
                         tableRow {
                             for (j in 0 until columns) {
-                                Container(AspectRatio(2f)) { }
+                                Container(LayoutAspectRatio(2f)) { }
                             }
                         }
                     }
@@ -1444,7 +1444,7 @@
                     for (i in 0 until rows) {
                         tableRow {
                             for (j in 0 until columns) {
-                                Container(AspectRatio(2f)) { }
+                                Container(LayoutAspectRatio(2f)) { }
                             }
                         }
                     }
@@ -1489,7 +1489,7 @@
                     for (i in 0 until rows) {
                         tableRow {
                             for (j in 0 until columns) {
-                                Container(AspectRatio(2f)) { }
+                                Container(LayoutAspectRatio(2f)) { }
                             }
                         }
                     }
@@ -1536,7 +1536,7 @@
                     for (i in 0 until rows) {
                         tableRow {
                             for (j in 0 until columns) {
-                                Container(AspectRatio(2f)) { }
+                                Container(LayoutAspectRatio(2f)) { }
                             }
                         }
                     }
@@ -1581,7 +1581,7 @@
                     for (i in 0 until rows) {
                         tableRow {
                             for (j in 0 until columns) {
-                                Container(AspectRatio(2f)) { }
+                                Container(LayoutAspectRatio(2f)) { }
                             }
                         }
                     }
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt
index bc36812..d1e7eae 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt
@@ -36,10 +36,10 @@
 import androidx.ui.core.Layout
 import androidx.ui.core.OnPositioned
 import androidx.ui.core.enforce
-import androidx.ui.layout.Aligned
-import androidx.ui.layout.AspectRatio
-import androidx.ui.layout.Size
-import androidx.ui.layout.Wrapped
+import androidx.ui.layout.LayoutAlign
+import androidx.ui.layout.LayoutAspectRatio
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWrapped
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
@@ -91,12 +91,12 @@
         val positionedLatch = CountDownLatch(2)
         val wrapSize = Ref<PxSize>()
         show {
-            Container(Wrapped) {
+            Container(LayoutWrapped) {
                 OnPositioned(onPositioned = { coordinates ->
                     wrapSize.value = coordinates.size
                     positionedLatch.countDown()
                 })
-                Container(Size(sizeDp, sizeDp)) { }
+                Container(LayoutSize(sizeDp, sizeDp)) { }
             }
         }
         positionedLatch.await(1, TimeUnit.SECONDS)
@@ -156,14 +156,14 @@
         val childSize = Ref<PxSize>()
         val childPosition = Ref<PxPosition>()
         show {
-            Container(Aligned.TopLeft) {
+            Container(LayoutAlign.TopLeft) {
                 OnChildPositioned(onPositioned = { coordinates ->
                     wrapSize.value = coordinates.size
                     positionedLatch.countDown()
                 }) {
                     Layout(
                         children = {
-                            Container(Wrapped wraps Size(sizeDp, sizeDp)) {
+                            Container(LayoutWrapped + LayoutSize(sizeDp, sizeDp)) {
                                 SaveLayoutInfo(
                                     size = childSize,
                                     position = childPosition,
@@ -242,7 +242,7 @@
     fun testWrap_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
             Wrap {
-                Container(modifier = AspectRatio(2f)) { }
+                Container(modifier = LayoutAspectRatio(2f)) { }
             }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
@@ -263,7 +263,7 @@
     @Test
     fun testWrappedModifier_hasCorrectIntrinsicMeasurements() = withDensity(density) {
         testIntrinsics(@Composable {
-            Container(modifier = AspectRatio(2f) wraps Wrapped) { }
+            Container(modifier = LayoutAspectRatio(2f) + LayoutWrapped) { }
         }) { minIntrinsicWidth, minIntrinsicHeight, maxIntrinsicWidth, maxIntrinsicHeight ->
             // Min width.
             assertEquals(25.dp.toIntPx() * 2, minIntrinsicWidth(25.dp.toIntPx()))
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt
index 1ef4221..8beb58b 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt
@@ -93,9 +93,9 @@
 /**
  * Provides scope-dependent alignment options for children layouts where the alignment is handled
  * by the parent layout rather than the child itself. Different layout models allow different
- * [Gravity] options. For example, [Row] provides Top and Bottom, while [Column] provides
+ * [LayoutGravity] options. For example, [Row] provides Top and Bottom, while [Column] provides
  * Start and End.
- * Unlike [Aligned], layout children with [Gravity] are aligned only after the size
+ * Unlike [LayoutAlign], layout children with [LayoutGravity] are aligned only after the size
  * of the parent is known, therefore not affecting the size of the parent in order to achieve
  * their own alignment.
  *
@@ -105,7 +105,7 @@
  *
  * @sample androidx.ui.layout.samples.SimpleGravityInColumn
  */
-object Gravity
+object LayoutGravity
 
 /**
  * Provides alignment options for a target layout where the alignment is handled by the modifier
@@ -118,7 +118,7 @@
  * @sample androidx.ui.layout.samples.SimpleAlignedModifier
  * @sample androidx.ui.layout.samples.SimpleVerticallyAlignedModifier
  */
-object Aligned {
+object LayoutAlign {
     /**
      * A layout modifier that positions the target component inside its parent to the top in
      * vertical direction and wraps the component in horizontal direction.
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/AspectRatio.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/AspectRatio.kt
index 76529d1..d39f868 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/AspectRatio.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/AspectRatio.kt
@@ -45,20 +45,14 @@
  * Example usage:
  * @sample androidx.ui.layout.samples.SimpleAspectRatio
  *
- * @param value A positive non-zero value representing the aspect ratio.
+ * @param aspectRatio A positive non-zero value representing the aspect ratio.
  */
-fun AspectRatio(
-    @FloatRange(from = 0.0, fromInclusive = false) value: Float
-): LayoutModifier = AspectRatioModifier(value)
-
-/**
- * A [LayoutModifier] that applies an aspect ratio to the wrapped UI element's size.
- */
-private data class AspectRatioModifier(val aspectRatio: Float) : LayoutModifier {
+data class LayoutAspectRatio(
+    @FloatRange(from = 0.0, fromInclusive = false)
+    val aspectRatio: Float
+) : LayoutModifier {
     init {
-        require(aspectRatio > 0) {
-            "Received aspect ratio value $aspectRatio is expected to be positive non-zero."
-        }
+        require(aspectRatio > 0) { "aspectRatio $aspectRatio must be > 0" }
     }
 
     override fun DensityScope.modifyConstraints(constraints: Constraints): Constraints {
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/ExpandedModifier.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/ExpandedModifier.kt
index 3d70787..6d24e01 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/ExpandedModifier.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/ExpandedModifier.kt
@@ -29,7 +29,7 @@
  * Example usage:
  * @sample androidx.ui.layout.samples.SimpleExpandedWidthModifier
  */
-val ExpandedWidth: LayoutModifier = object : LayoutModifier {
+val LayoutExpandedWidth: LayoutModifier = object : LayoutModifier {
     override fun DensityScope.modifyConstraints(constraints: Constraints): Constraints {
         return if (constraints.hasBoundedWidth) {
             constraints.withTight(width = constraints.maxWidth)
@@ -45,7 +45,7 @@
  * Example usage:
  * @sample androidx.ui.layout.samples.SimpleExpandedHeightModifier
  */
-val ExpandedHeight: LayoutModifier = object : LayoutModifier {
+val LayoutExpandedHeight: LayoutModifier = object : LayoutModifier {
     override fun DensityScope.modifyConstraints(constraints: Constraints): Constraints {
         return if (constraints.hasBoundedHeight) {
             constraints.withTight(height = constraints.maxHeight)
@@ -61,7 +61,7 @@
  * Example usage:
  * @sample androidx.ui.layout.samples.SimpleExpandedModifier
  */
-val Expanded: LayoutModifier = object : LayoutModifier {
+val LayoutExpanded: LayoutModifier = object : LayoutModifier {
     override fun DensityScope.modifyConstraints(constraints: Constraints): Constraints {
         return if (constraints.hasBoundedWidth && constraints.hasBoundedHeight) {
             Constraints.tightConstraints(constraints.maxWidth, constraints.maxHeight)
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt
index 3f4a401..77d4155 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt
@@ -171,11 +171,11 @@
      * A layout modifier within a [Column] or [Row] that makes the target component flexible.
      * It will be assigned a space according to its flex weight relative to the flexible siblings.
      * When [tight] is set to true, the target component is forced to occupy the entire space
-     * assigned to it by the parent. [Flexible] children will be measured after all the
-     * [Inflexible] ones have been measured, in order to divide the unclaimed space between
+     * assigned to it by the parent. [LayoutFlexible] children will be measured after all the
+     * [LayoutInflexible] ones have been measured, in order to divide the unclaimed space between
      * them.
      */
-    fun Flexible(
+    fun LayoutFlexible(
         @FloatRange(from = 0.0, fromInclusive = false) flex: Float,
         tight: Boolean = true
     ): LayoutModifier {
@@ -189,15 +189,15 @@
 
     /**
      * A layout modifier within a [Column] or [Row] that makes the target component inflexible.
-     * All [Inflexible] children will be measured before the [Flexible] ones. They will be
-     * measured in the order they appear, without min constraints and with max constraints in
+     * All [LayoutInflexible] children will be measured before the [LayoutFlexible] ones. They will
+     * be measured in the order they appear, without min constraints and with max constraints in
      * the main direction of the layout (maxHeight for Column and maxWidth for Row) such that
      * the sum of the space occupied by inflexible children will not exceed the incoming constraint
      * of the [Column] or [Row]: for example the first child of a [Column] will be measured with
      * maxHeight = column's maxHeight; the second child will be measured with maxHeight = column's
      * maxHeight - first child's height, and so on.
      */
-    val Inflexible: LayoutModifier = inflexibleModifier
+    val LayoutInflexible: LayoutModifier = inflexibleModifier
 
     internal companion object {
         val inflexibleModifier: LayoutModifier = FlexModifier(
@@ -211,13 +211,14 @@
      * [alignmentLineBlock].
      * If target component is the only component with the specified RelativeToSiblings modifier
      * within a Column or Row, then the component will be positioned using
-     * [ColumnScope.Gravity.Start] in Column or [RowScope.Gravity.Top] in Row respectively.
+     * [LayoutGravity.Start][ColumnScope.Start] in Column or [LayoutGravity.Top][RowScope.Top] in
+     * Row respectively.
      *
      * Example usage:
      * @sample androidx.ui.layout.samples.SimpleRelativeToSiblings
      */
     @Suppress("unused")
-    fun Gravity.RelativeToSiblings(alignmentLineBlock: (Placeable) -> IntPx): LayoutModifier =
+    fun LayoutGravity.RelativeToSiblings(alignmentLineBlock: (Placeable) -> IntPx): LayoutModifier =
         SiblingsAlignedModifier.WithAlignmentLineBlock(alignmentLineBlock)
 }
 
@@ -231,29 +232,29 @@
      * so that its start edge is aligned to the start edge of the horizontal axis.
      */
     // TODO: Consider ltr/rtl.
-    val Gravity.Start: LayoutModifier get() = StartGravityModifier
+    val LayoutGravity.Start: LayoutModifier get() = StartGravityModifier
     /**
      * A layout modifier within a Column that positions target component in a horizontal direction
      * so that its center is in the middle of the horizontal axis.
      */
-    val Gravity.Center: LayoutModifier get() = CenterGravityModifier
+    val LayoutGravity.Center: LayoutModifier get() = CenterGravityModifier
     /**
      * A layout modifier within a Column that positions target component in a horizontal direction
      * so that its end edge is aligned to the end edge of the horizontal axis.
      */
-    val Gravity.End: LayoutModifier get() = EndGravityModifier
+    val LayoutGravity.End: LayoutModifier get() = EndGravityModifier
     /**
      * A layout modifier within a [Column] that positions target component in a perpendicular
      * direction according to the [AlignmentLine].
      * If target component is the only component within a Column with the specified
      * RelativeToSiblings modifier, or if the provided alignment line is not defined for the
-     * component, the component will be positioned using [Gravity.Start].
+     * component, the component will be positioned using [LayoutGravity.Start].
      *
      * Example usage:
      *
      * @sample androidx.ui.layout.samples.SimpleRelativeToSiblingsInColumn
      */
-    fun Gravity.RelativeToSiblings(alignmentLine: VerticalAlignmentLine): LayoutModifier =
+    fun LayoutGravity.RelativeToSiblings(alignmentLine: VerticalAlignmentLine): LayoutModifier =
         SiblingsAlignedModifier.WithAlignmentLine(alignmentLine)
 
     internal companion object {
@@ -272,28 +273,28 @@
      * A layout modifier within a Row that positions target component in a vertical direction
      * so that its top edge is aligned to the top edge of the vertical axis.
      */
-    val Gravity.Top: LayoutModifier get() = TopGravityModifier
+    val LayoutGravity.Top: LayoutModifier get() = TopGravityModifier
     /**
      * A layout modifier within a Row that positions target component in a vertical direction
      * so that its center is in the middle of the vertical axis.
      */
-    val Gravity.Center: LayoutModifier get() = CenterGravityModifier
+    val LayoutGravity.Center: LayoutModifier get() = CenterGravityModifier
     /**
      * A layout modifier within a Row that positions target component in a vertical direction
      * so that its bottom edge is aligned to the bottom edge of the vertical axis.
      */
-    val Gravity.Bottom: LayoutModifier get() = BottomGravityModifier
+    val LayoutGravity.Bottom: LayoutModifier get() = BottomGravityModifier
     /**
      * A layout modifier within a [Row] that positions target component in a perpendicular
      * direction according to the [AlignmentLine].
      * If target component is the only component within a Row with the specified
      * RelativeToSiblings modifier, or if the provided alignment line is not defined for the
-     * component, the component will be positioned using [Gravity.Top].
+     * component, the component will be positioned using [LayoutGravity.Top].
      *
      * Example usage:
      * @sample androidx.ui.layout.samples.SimpleRelativeToSiblingsInRow
      */
-    fun Gravity.RelativeToSiblings(alignmentLine: HorizontalAlignmentLine): LayoutModifier =
+    fun LayoutGravity.RelativeToSiblings(alignmentLine: HorizontalAlignmentLine): LayoutModifier =
         SiblingsAlignedModifier.WithAlignmentLine(alignmentLine)
 
     internal companion object {
@@ -305,9 +306,9 @@
 
 /**
  * A composable that places its children in a horizontal sequence and is able to assign them widths
- * according to their flex weights provided through [androidx.ui.layout.FlexScope.Flexible]
+ * according to their flex weights provided through [androidx.ui.layout.FlexScope.LayoutFlexible]
  * modifier.
- * If [androidx.ui.layout.FlexScope.Inflexible] or no modifier is provided, the child will be
+ * If [androidx.ui.layout.FlexScope.LayoutInflexible] or no modifier is provided, the child will be
  * treated as inflexible, and will be sized to its preferred width.
  *
  * Example usage:
@@ -335,9 +336,9 @@
 
 /**
  * A composable that places its children in a vertical sequence and is able to assign them heights
- * according to their flex weights provided through [androidx.ui.layout.FlexScope.Flexible]
+ * according to their flex weights provided through [androidx.ui.layout.FlexScope.LayoutFlexible]
  * modifiers.
- * If [androidx.ui.layout.FlexScope.Inflexible] or no modifier is provided, the child will be
+ * If [androidx.ui.layout.FlexScope.LayoutInflexible] or no modifier is provided, the child will be
  * treated as inflexible, and will be sized to its preferred height.
  *
  * Example usage:
@@ -376,6 +377,7 @@
 /**
  * Used to specify how a layout chooses its own size when multiple behaviors are possible.
  */
+// TODO Rename? Layout prefix should be reserved for LayoutModifiers.
 enum class LayoutSize {
     /**
      * Minimize the amount of free space by wrapping the children,
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Intrinsic.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Intrinsic.kt
index b3ac166..bcdcc16 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Intrinsic.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Intrinsic.kt
@@ -165,13 +165,13 @@
  *
  * @sample androidx.ui.layout.samples.MatchParentDividerForAspectRatio
  *
- * The sample builds a layout containing two [AspectRatio]s separated by a divider, where the
- * divider is sized according to the height of the taller [AspectRatio].
+ * The sample builds a layout containing two [LayoutAspectRatio]s separated by a divider, where the
+ * divider is sized according to the height of the taller [LayoutAspectRatio].
  *
  * Here [MaxIntrinsicHeight] is adding a speculative height measurement pass for the [FlexRow],
- * whose maximum intrinsic height will correspond to the height of the taller [AspectRatio]. Then
+ * whose maximum intrinsic height will correspond to the height of the taller [LayoutAspectRatio]. Then
  * [MaxIntrinsicHeight] will measure the [FlexRow] with tight height, the same as the premeasured
- * maximum intrinsic height, which due to [CrossAxisAlignment.Stretch] will force the [AspectRatio]s
+ * maximum intrinsic height, which due to [CrossAxisAlignment.Stretch] will force the [LayoutAspectRatio]s
  * and the divider to use the same height.
  */
 @Composable
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Spacing.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Padding.kt
similarity index 85%
rename from ui/ui-layout/src/main/java/androidx/ui/layout/Spacing.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/Padding.kt
index ff997af..599d57a 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Spacing.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Padding.kt
@@ -33,31 +33,57 @@
  * Layout modifier that applies whitespace spacing on specified sides of the target layout.
  *
  * Example usage:
- * @sample androidx.ui.layout.samples.SpacingModifier
+ * @sample androidx.ui.layout.samples.LayoutPaddingModifier
  */
+@Deprecated(
+    "use LayoutPadding",
+    replaceWith = ReplaceWith(
+        "LayoutPadding(left, top, right, bottom)",
+        "androidx.ui.layout.LayoutPadding"
+    )
+)
 fun Spacing(
     left: Dp = 0.dp,
     top: Dp = 0.dp,
     right: Dp = 0.dp,
     bottom: Dp = 0.dp
-): LayoutModifier = SpacingModifier(left = left, top = top, right = right, bottom = bottom)
+): LayoutModifier = LayoutPadding(left = left, top = top, right = right, bottom = bottom)
 
 /**
  * Layout modifier that applies the same whitespace spacing of [all] dp on each side
  * of the target layout.
  *
  * Example usage:
- * @sample androidx.ui.layout.samples.SpacingAllModifier
+ * @sample androidx.ui.layout.samples.LayoutPaddingAllModifier
  */
+@Deprecated(
+    "use LayoutPadding",
+    replaceWith = ReplaceWith(
+        "LayoutPadding(all)",
+        "androidx.ui.layout.LayoutPadding"
+    )
+)
 fun Spacing(all: Dp = 0.dp): LayoutModifier =
-    SpacingModifier(left = all, top = all, right = all, bottom = all)
+    LayoutPadding(left = all, top = all, right = all, bottom = all)
+
+/**
+ * Layout modifier that applies the same padding of [all] dp on each side of the target layout.
+ *
+ * Example usage:
+ * @sample androidx.ui.layout.samples.LayoutPaddingAllModifier
+ */
+fun LayoutPadding(all: Dp): LayoutPadding = LayoutPadding(
+    left = all,
+    top = all,
+    right = all,
+    bottom = all
+)
 
 /**
  * A [LayoutModifier] that adds [left], [top], [right] and [bottom] padding
  * to the wrapped layout.
- * Used as shared implementation for the [Spacing] overloads.
  */
-private data class SpacingModifier(
+data class LayoutPadding(
     val left: Dp = 0.dp,
     val top: Dp = 0.dp,
     val right: Dp = 0.dp,
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/SizeModifiers.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/SizeModifiers.kt
index f98cec6..c480ee4 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/SizeModifiers.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/SizeModifiers.kt
@@ -31,10 +31,10 @@
  *
  * @sample androidx.ui.layout.samples.SimpleSizeModifier
  *
- * If the [Size] modifier's target layout is measured with constraints that do not allow the
+ * If the [LayoutSize] modifier's target layout is measured with constraints that do not allow the
  * specified width and/or height, the size will be coerced inside the incoming constraints.
  */
-fun Size(width: Dp, height: Dp): LayoutModifier {
+fun LayoutSize(width: Dp, height: Dp): LayoutModifier {
     require(width.isFinite() && height.isFinite()) {
         "Width and height parameters should be finite."
     }
@@ -44,11 +44,11 @@
 /**
  * A layout modifier that sets the minimum width and height of the component.
  *
- * If the [MinSize] modifier's target layout is measured with constraints that do not allow the
- * specified minimum width and/or height, the minimum size will be coerced inside the incoming
+ * If the [LayoutMinSize] modifier's target layout is measured with constraints that do not allow
+ * the specified minimum width and/or height, the minimum size will be coerced inside the incoming
  * constraints.
  */
-fun MinSize(minWidth: Dp, minHeight: Dp): LayoutModifier {
+fun LayoutMinSize(minWidth: Dp, minHeight: Dp): LayoutModifier {
     require(minWidth.isFinite() && minHeight.isFinite()) {
         "MinWidth and minHeight parameters should be finite."
     }
@@ -58,11 +58,11 @@
 /**
  * A layout modifier that sets the maximum width and height of the component.
  *
- * If the [MaxSize] modifier's target layout is measured with constraints that do not allow the
- * specified maximum width and/or height, the maximum size will be coerced inside the incoming
+ * If the [LayoutMaxSize] modifier's target layout is measured with constraints that do not allow
+ * the specified maximum width and/or height, the maximum size will be coerced inside the incoming
  * constraints.
  */
-fun MaxSize(maxWidth: Dp, maxHeight: Dp): LayoutModifier =
+fun LayoutMaxSize(maxWidth: Dp, maxHeight: Dp): LayoutModifier =
     SizeModifier(DpConstraints(maxWidth = maxWidth, maxHeight = maxHeight))
 
 /**
@@ -70,10 +70,10 @@
  *
  * @sample androidx.ui.layout.samples.SimpleWidthModifier
  *
- * If the [Width] modifier's target layout is measured with constraints that do not allow the
+ * If the [LayoutWidth] modifier's target layout is measured with constraints that do not allow the
  * specified width, the width will be coerced inside the incoming constraints.
  */
-fun Width(value: Dp): LayoutModifier {
+fun LayoutWidth(value: Dp): LayoutModifier {
     require(value.isFinite()) { "Width value parameter should be finite." }
     return SizeModifier(DpConstraints.tightConstraintsForWidth(value))
 }
@@ -81,10 +81,11 @@
 /**
  * A layout modifier that sets the minimum width of the component.
  *
- * If the [MinWidth] modifier's target layout is measured with constraints that do not allow the
- * specified minimum width, the minimum width will be coerced inside the incoming constraints.
+ * If the [LayoutMinWidth] modifier's target layout is measured with constraints that do not
+ * allow the specified minimum width, the minimum width will be coerced inside the incoming
+ * constraints.
  */
-fun MinWidth(value: Dp): LayoutModifier {
+fun LayoutMinWidth(value: Dp): LayoutModifier {
     require(value.isFinite()) { "MinWidth value parameter should be finite." }
     return SizeModifier(DpConstraints(minWidth = value))
 }
@@ -92,20 +93,21 @@
 /**
  * A layout modifier that sets the maximum width of the component.
  *
- * If the [MaxWidth] modifier's target layout is measured with constraints that do not allow the
- * specified maximum width, the maximum width will be coerced inside the incoming constraints.
+ * If the [LayoutMaxWidth] modifier's target layout is measured with constraints that do not
+ * allow the specified maximum width, the maximum width will be coerced inside the incoming
+ * constraints.
  */
-fun MaxWidth(value: Dp): LayoutModifier = SizeModifier(DpConstraints(maxWidth = value))
+fun LayoutMaxWidth(value: Dp): LayoutModifier = SizeModifier(DpConstraints(maxWidth = value))
 
 /**
  * A layout modifier that sets the exact height of the component.
  *
  * @sample androidx.ui.layout.samples.SimpleHeightModifier
  *
- * If the [Height] modifier's target layout is measured with constraints that do not allow the
+ * If the [LayoutHeight] modifier's target layout is measured with constraints that do not allow the
  * specified height, the height will be coerced inside the incoming constraints.
  */
-fun Height(value: Dp): LayoutModifier {
+fun LayoutHeight(value: Dp): LayoutModifier {
     require(value.isFinite()) { "Height value parameter should be finite." }
     return SizeModifier(DpConstraints.tightConstraintsForHeight(value))
 }
@@ -113,10 +115,11 @@
 /**
  * A layout modifier that sets the minimum height of the component.
  *
- * If the [MinHeight] modifier's target layout is measured with constraints that do not allow the
- * specified minimum height, the minimum height will be coerced inside the incoming constraints.
+ * If the [LayoutMinHeight] modifier's target layout is measured with constraints that do not
+ * allow the specified minimum height, the minimum height will be coerced inside the incoming
+ * constraints.
  */
-fun MinHeight(value: Dp): LayoutModifier {
+fun LayoutMinHeight(value: Dp): LayoutModifier {
     require(value.isFinite()) { "MinHeight value parameter should be finite." }
     return SizeModifier(DpConstraints(minHeight = value))
 }
@@ -124,10 +127,11 @@
 /**
  * A layout modifier that sets the maximum height of the component.
  *
- * If the [MaxHeight] modifier's target layout is measured with constraints that do not allow the
- * specified maximum height, the maximum height will be coerced inside the incomingL constraints.
+ * If the [LayoutMaxHeight] modifier's target layout is measured with constraints that do not
+ * allow the specified maximum height, the maximum height will be coerced inside the incoming
+ * constraints.
  */
-fun MaxHeight(value: Dp): LayoutModifier = SizeModifier(DpConstraints(maxHeight = value))
+fun LayoutMaxHeight(value: Dp): LayoutModifier = SizeModifier(DpConstraints(maxHeight = value))
 
 private data class SizeModifier(private val modifierConstraints: DpConstraints) : LayoutModifier {
     override fun DensityScope.modifyConstraints(constraints: Constraints) =
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Spacer.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Spacer.kt
index 170b457..565687c 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Spacer.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Spacer.kt
@@ -20,8 +20,8 @@
 import androidx.ui.core.Modifier
 
 /**
- * Component that represents an empty space layout, whose size can be defined using the [Width],
- * [Height] and [Size] modifiers.
+ * Component that represents an empty space layout, whose size can be defined using the [LayoutWidth],
+ * [LayoutHeight] and [LayoutSize] modifiers.
  *
  * @sample androidx.ui.layout.samples.SpacerExample
  *
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Stack.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Stack.kt
index 0272b7c..2895bd3 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Stack.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Stack.kt
@@ -35,7 +35,7 @@
  * A composable that positions its children relative to its edges.
  * The component is useful for drawing children that overlap. The children will always be
  * drawn in the order they are specified in the body of the [Stack].
- * Use [Gravity] options to define how to position a target component inside the [Stack] box.
+ * Use [LayoutGravity] options to define how to position a target component inside the [Stack] box.
  *
  * Example usage:
  *
@@ -102,28 +102,28 @@
      * size of the [Stack] and are positioned within the stack after its size is calculated to
      * wrap the non-stretch components.
      */
-    val Gravity.Stretch: LayoutModifier get() = StretchGravityModifier
+    val LayoutGravity.Stretch: LayoutModifier get() = StretchGravityModifier
 
     /**
      * A layout modifier that defines that child should be positioned top-left inside the [Stack].
      * If the [Stack] wraps its content (by not being constrained to a min size by its own
      * parent), a child with this gravity option will contribute to the size of the [Stack].
     */
-    val Gravity.TopLeft: LayoutModifier get() = TopLeftGravityModifier
+    val LayoutGravity.TopLeft: LayoutModifier get() = TopLeftGravityModifier
 
     /**
      * A layout modifier that defines that child should be positioned top-center inside the [Stack].
      * If the [Stack] wraps its content (by not being constrained to a min size by its own
      * parent), a child with this gravity option will contribute to the size of the [Stack].
      */
-    val Gravity.TopCenter: LayoutModifier get() = TopCenterGravityModifier
+    val LayoutGravity.TopCenter: LayoutModifier get() = TopCenterGravityModifier
 
     /**
      * A layout modifier that defines that child should be positioned top-right inside the [Stack].
      * If the [Stack] wraps its content (by not being constrained to a min size by its own
      * parent), a child with this gravity option will contribute to the size of the [Stack].
      */
-    val Gravity.TopRight: LayoutModifier get() = TopRightGravityModifier
+    val LayoutGravity.TopRight: LayoutModifier get() = TopRightGravityModifier
 
     /**
      * A layout modifier that defines that child should be positioned center-left inside the
@@ -131,14 +131,14 @@
      * If the [Stack] wraps its content (by not being constrained to a min size by its own
      * parent), a child with this gravity option will contribute to the size of the [Stack].
      */
-    val Gravity.CenterLeft: LayoutModifier get() = CenterLeftGravityModifier
+    val LayoutGravity.CenterLeft: LayoutModifier get() = CenterLeftGravityModifier
 
     /**
      * A layout modifier that defines that child should be positioned in the center of the [Stack].
      * If the [Stack] wraps its content (by not being constrained to a min size by its own
      * parent), a child with this gravity option will contribute to the size of the [Stack].
      */
-    val Gravity.Center: LayoutModifier get() = CenterGravityModifier
+    val LayoutGravity.Center: LayoutModifier get() = CenterGravityModifier
 
     /**
      * A layout modifier that defines that child should be positioned center-right inside the
@@ -146,7 +146,7 @@
      * If the [Stack] wraps its content (by not being constrained to a min size by its own
      * parent), a child with this gravity option will contribute to the size of the [Stack].
      */
-    val Gravity.CenterRight: LayoutModifier get() = CenterRightGravityModifier
+    val LayoutGravity.CenterRight: LayoutModifier get() = CenterRightGravityModifier
 
     /**
      * A layout modifier that defines that child should be positioned bottom-left inside the
@@ -154,7 +154,7 @@
      * If the [Stack] wraps its content (by not being constrained to a min size by its own
      * parent), a child with this gravity option will contribute to the size of the [Stack].
      */
-    val Gravity.BottomLeft: LayoutModifier get() = BottomLeftGravityModifier
+    val LayoutGravity.BottomLeft: LayoutModifier get() = BottomLeftGravityModifier
 
     /**
      * A layout modifier that defines that child should be positioned bottom-center inside the
@@ -162,7 +162,7 @@
      * If the [Stack] wraps its content (by not being constrained to a min size by its own
      * parent), a child with this gravity option will contribute to the size of the [Stack].
      */
-    val Gravity.BottomCenter: LayoutModifier get() = BottomCenterGravityModifier
+    val LayoutGravity.BottomCenter: LayoutModifier get() = BottomCenterGravityModifier
 
     /**
      * A layout modifier that defines that child should be positioned bottom-right inside the
@@ -170,7 +170,7 @@
      * If the [Stack] wraps its content (by not being constrained to a min size by its own
      * parent), a child with this gravity option will contribute to the size of the [Stack].
      */
-    val Gravity.BottomRight: LayoutModifier get() = BottomRightGravityModifier
+    val LayoutGravity.BottomRight: LayoutModifier get() = BottomRightGravityModifier
 
     internal companion object {
         val TopLeftGravityModifier: LayoutModifier = StackGravityModifier(Alignment.TopLeft)
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Wrap.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Wrap.kt
index bcec4fe..aff79be 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Wrap.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Wrap.kt
@@ -66,7 +66,7 @@
  * the target layout is smaller than the incoming min constraints, the modified component will
  * size itself to min incoming constraints and place its content in the center.
  */
-val Wrapped: LayoutModifier = object : LayoutModifier {
+val LayoutWrapped: LayoutModifier = object : LayoutModifier {
     override fun DensityScope.modifyConstraints(constraints: Constraints) = constraints.looseMin()
 
     override fun DensityScope.modifySize(
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
index 69edd80..0ccf58b 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
@@ -26,7 +26,7 @@
 import androidx.ui.layout.Arrangement
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
 import androidx.ui.layout.FlexColumn
 import androidx.ui.material.MaterialTheme
 import androidx.ui.material.RadioGroup
@@ -89,7 +89,7 @@
                 }
             }
             flexible(1f) {
-                Column(ExpandedHeight, arrangement = Arrangement.SpaceBetween) {
+                Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceBetween) {
                     DemoText("TopAppBar options")
                     RadioGroup {
                         topAppBarOptions.forEach { topAppBar ->
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt
index ffe2ce7..0db0e03 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt
@@ -38,7 +38,7 @@
 import androidx.ui.layout.Arrangement
 import androidx.ui.layout.Center
 import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
 import androidx.ui.material.Button
 import androidx.ui.material.ContainedButtonStyle
 import androidx.ui.material.MaterialTheme
@@ -53,7 +53,7 @@
     override fun materialContent() {
         val onClick: () -> Unit = { Log.e("ButtonDemo", "onClick") }
         Center {
-            Column(ExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
+            Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
                 ContainedButtonSample(onClick)
 
                 OutlinedButtonSample(onClick)
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt
index 49cc2a5..c1998ad 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt
@@ -24,7 +24,7 @@
 import androidx.ui.foundation.shape.GenericShape
 import androidx.ui.foundation.shape.border.Border
 import androidx.ui.graphics.Color
-import androidx.ui.layout.Size
+import androidx.ui.layout.LayoutSize
 import androidx.ui.layout.Spacer
 import androidx.ui.layout.Wrap
 import androidx.ui.material.Button
@@ -48,7 +48,7 @@
                     border = Border(Color.DarkGray, 1.dp)
                 )
             ) {
-                Spacer(Size(100.dp, 100.dp))
+                Spacer(LayoutSize(100.dp, 100.dp))
             }
         }
     }
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt
index badd47c..675d246 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt
@@ -25,11 +25,11 @@
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
 import androidx.ui.layout.EdgeInsets
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutHeight
 import androidx.ui.layout.Spacer
 import androidx.ui.layout.Row
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
 import androidx.ui.material.Divider
 import androidx.ui.material.MaterialTheme
 
@@ -61,9 +61,9 @@
                     }
                 }
             }
-            Spacer(Height(30.dp))
+            Spacer(LayoutHeight(30.dp))
             Divider(height = 2.dp, color = blackColor)
-            Spacer(Height(10.dp))
+            Spacer(LayoutHeight(10.dp))
             Column {
                 items.forEach { text ->
                     Item(text = text)
@@ -84,11 +84,11 @@
                         width = avatarSize,
                         height = avatarSize,
                         color = color,
-                        modifier = Gravity.Center
+                        modifier = LayoutGravity.Center
                     )
-                    Spacer(Width(ItemPadding))
+                    Spacer(LayoutWidth(ItemPadding))
                 }
-                Text(text = text, style = textStyle, modifier = Gravity.Center)
+                Text(text = text, style = textStyle, modifier = LayoutGravity.Center)
             }
         }
     }
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt
index ec30f46..53ab4b0 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt
@@ -36,11 +36,11 @@
 import androidx.ui.graphics.toArgb
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutExpandedWidth
 import androidx.ui.layout.FlexColumn
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutHeight
 import androidx.ui.layout.Spacer
 import androidx.ui.layout.Padding
 import androidx.ui.layout.Stack
@@ -92,8 +92,8 @@
 @Composable
 private fun DynamicThemeApp(scrollFraction: ScrollFraction, palette: ColorPalette) {
     MaterialTheme(palette) {
-        Stack(Expanded) {
-            FlexColumn(Expanded) {
+        Stack(LayoutExpanded) {
+            FlexColumn(LayoutExpanded) {
                 inflexible {
                     TopBar()
                 }
@@ -104,7 +104,7 @@
                     }
                 }
             }
-            Container(Gravity.BottomCenter) {
+            Container(LayoutGravity.BottomCenter) {
                 BottomBar(scrollFraction)
             }
         }
@@ -147,7 +147,7 @@
             val shapeColor = lerp(Color(0xFF303030), Color.White, index / 19f)
             val textColor = lerp(Color.White, Color(0xFF303030), index / 19f)
             Padding(25.dp) {
-                Container(ExpandedWidth, height = 150.dp) {
+                Container(LayoutExpandedWidth, height = 150.dp) {
                     // TODO: ideally this would be a Card but currently Surface consumes every
                     // colour from the Material theme to work out text colour, so we end up doing a
                     // large amount of work here when the top level theme changes
@@ -156,7 +156,7 @@
                 }
             }
         }
-        Spacer(Height(100.dp))
+        Spacer(LayoutHeight(100.dp))
     }
 }
 
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
index 3e5b000..b042402 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
@@ -22,8 +22,8 @@
 import androidx.ui.layout.Arrangement
 import androidx.ui.layout.Center
 import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutGravity
 import androidx.ui.material.FloatingActionButton
 
 class FloatingActionButtonActivity : MaterialDemoActivity() {
@@ -33,17 +33,18 @@
         val icon = imageFromResource(resources, R.drawable.ic_favorite)
         Center {
             val onClick: () -> Unit = { Log.e("FABDemo", "onClick") }
-            Column(ExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
-                FloatingActionButton(icon = icon, onClick = onClick, modifier = Gravity.Center)
+            Column(LayoutExpandedHeight, arrangement = Arrangement.SpaceEvenly) {
+                FloatingActionButton(icon = icon, onClick = onClick,
+                    modifier = LayoutGravity.Center)
                 FloatingActionButton(
                     text = "EXTENDED",
                     onClick = onClick,
-                    modifier = Gravity.Center
+                    modifier = LayoutGravity.Center
                 )
                 FloatingActionButton(
                     icon = icon, text = "ADD TO FAVS",
                     onClick = onClick,
-                    modifier = Gravity.Center
+                    modifier = LayoutGravity.Center
                 )
             }
         }
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt
index 1c8461d..f7e5928 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt
@@ -24,7 +24,7 @@
 import androidx.compose.unaryPlus
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Arrangement
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedWidth
 import androidx.ui.layout.FlexColumn
 import androidx.ui.layout.MainAxisAlignment
 import androidx.ui.layout.Row
@@ -87,12 +87,12 @@
 
     FlexColumn(mainAxisAlignment = MainAxisAlignment.Center) {
         expanded(flex = 1f) {
-            Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+            Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
                 // Determinate indicators
                 LinearProgressIndicator(progress = state.progress)
                 CircularProgressIndicator(progress = state.progress)
             }
-            Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+            Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
                 // Fancy colours!
                 LinearProgressIndicator(progress = (state.progress), color = state.generateColor())
                 CircularProgressIndicator(
@@ -100,7 +100,7 @@
                     color = state.generateColor()
                 )
             }
-            Row(ExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
+            Row(LayoutExpandedWidth, arrangement = Arrangement.SpaceEvenly) {
                 // Indeterminate indicators
                 LinearProgressIndicator()
                 CircularProgressIndicator()
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarActivity.kt
index e800d8f..b550f41 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarActivity.kt
@@ -20,15 +20,15 @@
 import androidx.ui.core.Text
 import androidx.ui.core.dp
 import androidx.ui.layout.Column
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutPadding
 import androidx.ui.material.samples.SimpleSnackbar
 import androidx.ui.material.samples.SlotsSnackbar
 
 class SnackbarActivity : MaterialDemoActivity() {
     @Composable
     override fun materialContent() {
-        Column(Spacing(left = 12.dp, right = 12.dp)) {
-            val textSpacing = Spacing(top = 12.dp, bottom = 12.dp)
+        Column(LayoutPadding(left = 12.dp, right = 12.dp)) {
+            val textSpacing = LayoutPadding(top = 12.dp, bottom = 12.dp)
             Text("Default Snackbar", modifier = textSpacing)
             SimpleSnackbar()
             Text(
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt
index 9740c08..0baff99 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt
@@ -25,9 +25,9 @@
 import androidx.ui.core.setContent
 import androidx.ui.foundation.VerticalScroller
 import androidx.ui.layout.Column
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutHeight
+import androidx.ui.layout.LayoutPadding
 import androidx.ui.layout.Spacer
-import androidx.ui.layout.Spacing
 import androidx.ui.material.Tab
 import androidx.ui.material.TabRow
 import androidx.ui.material.studies.Scaffold
@@ -65,11 +65,11 @@
 @Composable
 fun RallyBody() {
     VerticalScroller {
-        Column(modifier = Spacing(16.dp)) {
+        Column(modifier = LayoutPadding(16.dp)) {
             RallyAlertCard()
-            Spacer(Height(10.dp))
+            Spacer(LayoutHeight(10.dp))
             RallyAccountsOverviewCard()
-            Spacer(Height(10.dp))
+            Spacer(LayoutHeight(10.dp))
             RallyBillsOverviewCard()
         }
     }
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
index cb1c976..249f41a 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
@@ -23,8 +23,8 @@
 import androidx.ui.foundation.shape.RectangleShape
 import androidx.ui.layout.Column
 import androidx.ui.layout.EdgeInsets
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutPadding
 import androidx.ui.material.AlertDialog
 import androidx.ui.material.Button
 import androidx.ui.material.Divider
@@ -45,14 +45,14 @@
                 val style = TextButtonStyle(RectangleShape).copy(paddings = EdgeInsets(16.dp))
                 Column {
                     Divider(
-                        Spacing(left = 12.dp, right = 12.dp),
+                        LayoutPadding(left = 12.dp, right = 12.dp),
                         color = (+MaterialTheme.colors()).onSurface.copy(alpha = 0.2f)
                     )
                     Button(
                         text = buttonText,
                         onClick = onDismiss,
                         style = style,
-                        modifier = ExpandedWidth
+                        modifier = LayoutExpandedWidth
                     )
                 }
             }
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
index bfa7156..f83a4f7 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
@@ -28,16 +28,16 @@
 import androidx.ui.layout.Arrangement
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Size
-import androidx.ui.layout.Spacer
 import androidx.ui.layout.FlexRow
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutHeight
+import androidx.ui.layout.LayoutPadding
+import androidx.ui.layout.LayoutSize
+import androidx.ui.layout.LayoutWidth
 import androidx.ui.layout.Row
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.Spacer
 import androidx.ui.layout.Stack
-import androidx.ui.layout.Width
 import androidx.ui.material.Button
 import androidx.ui.material.Divider
 import androidx.ui.material.MaterialTheme
@@ -69,7 +69,7 @@
                 Clickable(onClick = { openDialog.value = true }) {
                     Container {
                         Row(
-                            modifier = Spacing(12.dp) wraps ExpandedWidth,
+                            modifier = LayoutPadding(12.dp) + LayoutExpandedWidth,
                             arrangement = Arrangement.SpaceBetween
                         ) {
                             Text(text = "Alerts", style = (+MaterialTheme.typography()).subtitle2)
@@ -79,17 +79,17 @@
                 }
             }
             Divider(
-                Spacing(left = 12.dp, right = 12.dp),
+                LayoutPadding(left = 12.dp, right = 12.dp),
                 color = (+MaterialTheme.colors()).background,
                 height = 2.dp
             )
             Ripple(bounded = true) {
                 Clickable(onClick = { openDialog.value = true }) {
                     Container {
-                        Row(Spacing(12.dp)) {
+                        Row(LayoutPadding(12.dp)) {
                             Text(
                                 style = (+MaterialTheme.typography()).body1,
-                                modifier = Flexible(1f),
+                                modifier = LayoutFlexible(1f),
                                 text = alertMessage
                             )
                             // TODO: icons still don't work
@@ -111,12 +111,12 @@
 fun RallyAccountsOverviewCard() {
     Card {
         Column {
-            Column(modifier = Spacing(12.dp)) {
+            Column(modifier = LayoutPadding(12.dp)) {
                 Text(text = "Accounts", style = (+MaterialTheme.typography()).body1)
                 Text(text = "$12,132.49", style = (+MaterialTheme.typography()).h3)
             }
             Divider(color = rallyGreen, height = 1.dp)
-            Column(modifier = Spacing(12.dp)) {
+            Column(modifier = LayoutPadding(12.dp)) {
                 RallyAccountRow(
                     name = "Checking",
                     number = "1234",
@@ -151,29 +151,29 @@
 fun RallyAccountsCard() {
     VerticalScroller {
         Column {
-                Stack(Spacing(16.dp)) {
+                Stack(LayoutPadding(16.dp)) {
                         val accountsProportion = listOf(0.595f, 0.045f, 0.095f, 0.195f, 0.045f)
                         val colors = listOf(0xFF1EB980, 0xFF005D57, 0xFF04B97F, 0xFF37EFBA,
                             0xFFFAFFBF).map { Color(it) }
-                        Container(modifier = Gravity.Center, height = 300.dp, expanded = true) {
+                        Container(LayoutGravity.Center, height = 300.dp, expanded = true) {
                             DrawAnimatedCircle(accountsProportion, colors)
                         }
-                        Column(modifier = Gravity.Center) {
+                        Column(modifier = LayoutGravity.Center) {
                             Text(
                                 text = "Total",
                                 style = (+MaterialTheme.typography()).body1,
-                                modifier = Gravity.Center
+                                modifier = LayoutGravity.Center
                             )
                             Text(
                                 text = "$12,132.49",
                                 style = (+MaterialTheme.typography()).h3,
-                                modifier = Gravity.Center
+                                modifier = LayoutGravity.Center
                             )
                         }
                     }
-                Spacer(Height(10.dp))
+                Spacer(LayoutHeight(10.dp))
                 Card {
-                    Column(modifier = Spacing(12.dp)) {
+                    Column(modifier = LayoutPadding(12.dp)) {
                         RallyAccountRow(
                             name = "Checking",
                             number = "1234",
@@ -212,17 +212,17 @@
  */
 @Composable
 fun RallyAccountRow(name: String, number: String, amount: String, color: Color) {
-    FlexRow(Spacing(top = 12.dp, bottom = 12.dp)) {
+    FlexRow(LayoutPadding(top = 12.dp, bottom = 12.dp)) {
         inflexible {
             AccountIndicator(color = color)
-            Spacer(Width(8.dp))
+            Spacer(LayoutWidth(8.dp))
             Column {
                 Text(text = name, style = (+MaterialTheme.typography()).body1)
                 Text(text = "•••••$number", style = (+MaterialTheme.typography()).subtitle1)
             }
         }
         expanded(flex = 1.0f) {
-            Spacer(Size(width = 0.dp, height = 0.dp))
+            Spacer(LayoutSize(width = 0.dp, height = 0.dp))
         }
         inflexible {
             Text(text = "$ $amount", style = (+MaterialTheme.typography()).h6)
@@ -245,13 +245,13 @@
 fun RallyBillsOverviewCard() {
     Card {
         Column {
-            Column(modifier = Spacing(12.dp)) {
+            Column(modifier = LayoutPadding(12.dp)) {
                 Text(text = "Bills", style = (+MaterialTheme.typography()).subtitle2)
                 Text(text = "$1,810.00", style = (+MaterialTheme.typography()).h3)
             }
             Divider(color = rallyGreen, height = 1.dp)
             // TODO: change to proper bill items
-            Column(modifier = Spacing(12.dp)) {
+            Column(modifier = LayoutPadding(12.dp)) {
                 RallyAccountRow(
                     name = "RedPay Credit",
                     number = "Jan 29",
@@ -286,31 +286,31 @@
 fun RallyBillsCard() {
     VerticalScroller {
         Column {
-            Stack(Spacing(16.dp)) {
+            Stack(LayoutPadding(16.dp)) {
                 val accountsProportion = listOf(0.65f, 0.25f, 0.03f, 0.05f)
                 val colors = listOf(0xFF1EB980, 0xFF005D57, 0xFF04B97F, 0xFF37EFBA).map {
                     Color(it)
                 }
-                Container(modifier = Gravity.Center, height = 300.dp, expanded = true) {
+                Container(modifier = LayoutGravity.Center, height = 300.dp, expanded = true) {
                     DrawAnimatedCircle(accountsProportion, colors)
                 }
-                Column(modifier = Gravity.Center) {
+                Column(modifier = LayoutGravity.Center) {
                     Text(
                         text = "Due",
                         style = (+MaterialTheme.typography()).body1,
-                        modifier = Gravity.Center
+                        modifier = LayoutGravity.Center
                     )
                     Text(
                         text = "$1,810.00",
                         style = (+MaterialTheme.typography()).h3,
-                        modifier = Gravity.Center
+                        modifier = LayoutGravity.Center
                     )
                 }
             }
-            Spacer(Height(10.dp))
+            Spacer(LayoutHeight(10.dp))
             Card {
                 // TODO: change to proper bill items
-                Column(modifier = Spacing(12.dp)) {
+                Column(modifier = LayoutPadding(12.dp)) {
                     RallyAccountRow(
                         name = "RedPay Credit",
                         number = "Jan 29",
diff --git a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
index 1f8ecd6..bb3d9be 100644
--- a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
+++ b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
@@ -27,9 +27,9 @@
 import androidx.ui.layout.Center
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutHeight
 import androidx.ui.layout.Spacer
 import androidx.ui.layout.Row
 import androidx.ui.material.BottomDrawerLayout
@@ -41,7 +41,7 @@
 @Sampled
 @Composable
 fun StaticDrawerSample() {
-    Row(ExpandedWidth) {
+    Row(LayoutExpandedWidth) {
         StaticDrawer {
             Center {
                 Text("Drawer Content")
@@ -83,9 +83,9 @@
 @Composable
 private fun YourDrawerContent(onStateChange: (DrawerState) -> Unit) {
     Container(expanded = true) {
-        Column(ExpandedHeight) {
+        Column(LayoutExpandedHeight) {
             Text(text = "Drawer Content")
-            Spacer(Height(20.dp))
+            Spacer(LayoutHeight(20.dp))
             Button(
                 text = "Close Drawer",
                 onClick = { onStateChange(DrawerState.Closed) })
@@ -96,9 +96,9 @@
 @Composable
 private fun YourAppContent(text: String, onDrawerStateChange: (DrawerState) -> Unit) {
     Center {
-        Column(ExpandedHeight) {
+        Column(LayoutExpandedHeight) {
             Text(text = text)
-            Spacer(Height(20.dp))
+            Spacer(LayoutHeight(20.dp))
             Button(
                 text = "Click to open",
                 onClick = { onDrawerStateChange(DrawerState.Opened) }
diff --git a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
index ef10226..ef95fd8 100644
--- a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
+++ b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
@@ -46,8 +46,8 @@
 import androidx.ui.material.Tab
 import androidx.ui.material.TabRow
 import androidx.ui.graphics.Image
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutGravity
 import androidx.ui.material.MaterialTheme
 
 @Sampled
@@ -289,14 +289,15 @@
 fun FancyTab(title: String, onClick: () -> Unit, selected: Boolean) {
     MutuallyExclusiveSetItem(selected = selected, onClick = onClick) {
         Container(height = 50.dp, padding = EdgeInsets(10.dp)) {
-            Column(ExpandedHeight) {
+            Column(LayoutExpandedHeight) {
                 val color = if (selected) Color.Red else Color.Gray
-                ColoredRect(height = 10.dp, width = 10.dp, color = color, modifier = Gravity.Center)
+                ColoredRect(height = 10.dp, width = 10.dp, color = color,
+                    modifier = LayoutGravity.Center)
                 Padding(5.dp) {
                     Text(
                         text = title,
                         style = (+MaterialTheme.typography()).body1,
-                        modifier = Gravity.Center
+                        modifier = LayoutGravity.Center
                     )
                 }
             }
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt b/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
index 8cac77b..63eb9bc 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
@@ -27,11 +27,11 @@
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
 import androidx.ui.layout.EdgeInsets
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Height
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutHeight
 import androidx.ui.layout.Spacer
 import androidx.ui.layout.Row
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
 import androidx.ui.material.AlertDialogButtonLayout.SideBySide
 import androidx.ui.material.AlertDialogButtonLayout.Stacked
 import androidx.ui.material.surface.Surface
@@ -129,14 +129,14 @@
                         } else {
                             // TODO(b/138924683): Temporary until padding for the Text's
                             //  baseline
-                            Spacer(Height(NoTitleExtraHeight))
+                            Spacer(LayoutHeight(NoTitleExtraHeight))
                         }
 
                         Container(alignment = Alignment.CenterLeft, padding = TextPadding) {
                             val textStyle = (+MaterialTheme.typography()).body1
                             CurrentTextStyleProvider(textStyle, text)
                         }
-                        Spacer(Height(TextToButtonsHeight))
+                        Spacer(LayoutHeight(TextToButtonsHeight))
                         buttons()
                     }
                 }
@@ -163,12 +163,12 @@
     dismissButton: @Composable() (() -> Unit)?,
     buttonLayout: AlertDialogButtonLayout
 ) {
-    Container(ExpandedWidth, padding = ButtonsPadding, alignment = Alignment.CenterRight) {
+    Container(LayoutExpandedWidth, padding = ButtonsPadding, alignment = Alignment.CenterRight) {
         if (buttonLayout == AlertDialogButtonLayout.SideBySide) {
             Row(arrangement = Arrangement.End) {
                 if (dismissButton != null) {
                     dismissButton()
-                    Spacer(Width(ButtonsWidthSpace))
+                    Spacer(LayoutWidth(ButtonsWidthSpace))
                 }
 
                 confirmButton()
@@ -178,7 +178,7 @@
                 confirmButton()
 
                 if (dismissButton != null) {
-                    Spacer(Height(ButtonsHeightSpace))
+                    Spacer(LayoutHeight(ButtonsHeightSpace))
                     dismissButton()
                 }
             }
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt b/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
index 2cefabf..e661377 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
@@ -48,7 +48,7 @@
 import androidx.ui.layout.MainAxisAlignment
 import androidx.ui.layout.Row
 import androidx.ui.layout.Spacer
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
 import androidx.ui.material.surface.Surface
 import androidx.ui.graphics.Color
 import androidx.ui.layout.EdgeInsets
@@ -63,8 +63,8 @@
 import androidx.ui.layout.Align
 import androidx.ui.layout.AlignmentLineOffset
 import androidx.ui.layout.Arrangement
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutExpandedHeight
 import androidx.ui.layout.Padding
 import androidx.ui.text.TextStyle
 import kotlin.math.sqrt
@@ -158,7 +158,7 @@
             if (startContent != null) {
                 inflexible {
                     Container(
-                        modifier = ExpandedHeight,
+                        modifier = LayoutExpandedHeight,
                         width = AppBarTitleStartPadding,
                         alignment = Alignment.CenterLeft,
                         children = startContent
@@ -181,7 +181,7 @@
             if (endContent != null) {
                 inflexible {
                     Container(
-                        modifier = ExpandedHeight,
+                        modifier = LayoutExpandedHeight,
                         alignment = Alignment.Center,
                         children = endContent
                     )
@@ -629,7 +629,7 @@
 ) {
     BaseAppBar(color, BottomAppBarElevation, shape) {
         Padding(top = AppBarPadding, bottom = AppBarPadding) {
-            Row(Expanded, arrangement = Arrangement.SpaceBetween) {
+            Row(LayoutExpanded, arrangement = Arrangement.SpaceBetween) {
                 // Using wrap so that even if startContent is null or emits no layout nodes,
                 // we will still force end content to be placed at the end of the row.
                 Wrap(alignment = Alignment.Center, children = startContent ?: {})
@@ -726,11 +726,11 @@
         shownActions.forEach { (index, shownAction) ->
             action(shownAction)
             if (index != shownActions.lastIndex) {
-                Spacer(Width(24.dp))
+                Spacer(LayoutWidth(24.dp))
             }
         }
         if (overflowActions.isNotEmpty()) {
-            Spacer(Width(24.dp))
+            Spacer(LayoutWidth(24.dp))
             // TODO: use overflowActions to build menu here
             Container(width = 12.dp) {
                 Text(text = "${overflowActions.size}", style = TextStyle(fontSize = 15.sp))
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt b/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
index 6e45c65..415c7df 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
@@ -40,13 +40,13 @@
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
 import androidx.ui.layout.EdgeInsets
-import androidx.ui.layout.Expanded
-import androidx.ui.layout.Gravity
+import androidx.ui.layout.LayoutExpanded
+import androidx.ui.layout.LayoutGravity
 import androidx.ui.layout.Row
 import androidx.ui.layout.Table
 import androidx.ui.layout.TableColumnWidth
 import androidx.ui.layout.Spacer
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
 import androidx.ui.material.ripple.Ripple
 import androidx.ui.text.TextStyle
 import androidx.ui.text.font.FontWeight
@@ -212,7 +212,7 @@
             } else {
                 Row {
                     SimpleImage(image = image)
-                    Spacer(Width(2.dp))
+                    Spacer(LayoutWidth(2.dp))
                     Text(text = text(j))
                 }
             }
@@ -257,7 +257,7 @@
             } else {
                 Row {
                     SimpleImage(image = image)
-                    Spacer(Width(2.dp))
+                    Spacer(LayoutWidth(2.dp))
                     Text(text = text(j))
                 }
             }
@@ -395,7 +395,7 @@
                                     headerDecoration = {
                                         // TODO(calintat): Replace with animated arrow icons.
                                         Text(text = if (sorting.ascending) "↑" else "↓")
-                                        Spacer(Width(2.dp))
+                                        Spacer(LayoutWidth(2.dp))
                                     }
                                 } else {
                                     onSort = {
@@ -484,11 +484,11 @@
         Column {
             table()
             Container(height = dataRowHeight, padding = cellSpacing) {
-                Row(Expanded, arrangement = Arrangement.End) {
+                Row(LayoutExpanded, arrangement = Arrangement.End) {
                     val pages = (rows.size - 1) / pagination.rowsPerPage + 1
                     val startRow = pagination.rowsPerPage * pagination.page
                     val endRow = (startRow + pagination.rowsPerPage).coerceAtMost(rows.size)
-                    val modifier = Gravity.Center
+                    val modifier = LayoutGravity.Center
 
                     // TODO(calintat): Replace this with a dropdown menu whose items are taken
                     //  from availableRowsPerPage (filtered to those that are in the range
@@ -496,11 +496,11 @@
                     //  onRowsPerPageChange with the appropriate value.
                     Text(text = "Rows per page: ${pagination.rowsPerPage}", modifier = modifier)
 
-                    Spacer(Width(32.dp))
+                    Spacer(LayoutWidth(32.dp))
 
                     Text(text = "${startRow + 1}-$endRow of ${rows.size}", modifier = modifier)
 
-                    Spacer(Width(32.dp))
+                    Spacer(LayoutWidth(32.dp))
 
                     // TODO(calintat): Replace this with an image button with chevron_left icon.
                     Container(modifier = modifier) {
@@ -515,7 +515,7 @@
                         }
                     }
 
-                    Spacer(Width(24.dp))
+                    Spacer(LayoutWidth(24.dp))
 
                     // TODO(calintat): Replace this with an image button with chevron_right icon.
                     Container(modifier = modifier) {
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Divider.kt b/ui/ui-material/src/main/java/androidx/ui/material/Divider.kt
index 1534067..1331de27 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Divider.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Divider.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.dp
 import androidx.ui.foundation.ColoredRect
 import androidx.ui.graphics.Color
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutPadding
 
 /**
  * A divider is a thin line that groups content in lists and layouts
@@ -39,6 +39,6 @@
     height: Dp = 1.dp,
     indent: Dp = 0.dp
 ) {
-    val indentMod = if (indent.value != 0f) Spacing(left = indent) else Modifier.None
-    ColoredRect(color, modifier wraps indentMod, height = height)
+    val indentMod = if (indent.value != 0f) LayoutPadding(left = indent) else Modifier.None
+    ColoredRect(color, modifier + indentMod, height = height)
 }
\ No newline at end of file
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt b/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
index 4ea4cc3..514bfee 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
@@ -33,7 +33,7 @@
 import androidx.ui.layout.Padding
 import androidx.ui.layout.Row
 import androidx.ui.layout.Spacer
-import androidx.ui.layout.Width
+import androidx.ui.layout.LayoutWidth
 import androidx.ui.graphics.Image
 import androidx.ui.material.ripple.Ripple
 import androidx.ui.material.surface.Surface
@@ -157,7 +157,7 @@
             Padding(left = ExtendedFabIconPadding, right = ExtendedFabTextPadding) {
                 Row {
                     SimpleImage(image = icon)
-                    Spacer(Width(ExtendedFabIconPadding))
+                    Spacer(LayoutWidth(ExtendedFabIconPadding))
                     Text(text = text, style = textStyle)
                 }
             }
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt b/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
index 6bb6337..c496844 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
@@ -45,7 +45,7 @@
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Paint
 import androidx.ui.graphics.PaintingStyle
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedWidth
 import androidx.ui.text.TextStyle
 
 /**
@@ -160,7 +160,7 @@
     ) {
         RadioGroupItem(selected = selected, onSelect = onSelect) {
             Padding(padding = DefaultRadioItemPadding) {
-                Row(ExpandedWidth) {
+                Row(LayoutExpandedWidth) {
                     RadioButton(selected = selected, onSelect = onSelect, color = radioColor)
                     Padding(left = DefaultRadioLabelOffset) {
                         Text(
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt b/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt
index 928585a..6103841 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt
@@ -50,7 +50,7 @@
 import androidx.ui.layout.Container
 import androidx.ui.layout.DpConstraints
 import androidx.ui.layout.Padding
-import androidx.ui.layout.Size
+import androidx.ui.layout.LayoutSize
 import androidx.ui.layout.Spacer
 import androidx.ui.lerp
 import androidx.ui.material.ripple.Ripple
@@ -223,7 +223,7 @@
                         color = color,
                         elevation = if (pressed) 6.dp else 1.dp
                     ) {
-                        Spacer(Size(thumbSize, thumbSize))
+                        Spacer(LayoutSize(thumbSize, thumbSize))
                     }
                 }
             }
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Snackbar.kt b/ui/ui-material/src/main/java/androidx/ui/material/Snackbar.kt
index 09277b1..bab3b32 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Snackbar.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Snackbar.kt
@@ -35,9 +35,9 @@
 import androidx.ui.layout.AlignmentLineOffset
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
-import androidx.ui.layout.ExpandedWidth
-import androidx.ui.layout.Gravity
-import androidx.ui.layout.Spacing
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
+import androidx.ui.layout.LayoutPadding
 import androidx.ui.material.surface.Surface
 
 /**
@@ -145,7 +145,7 @@
 @Composable
 private fun TextOnlySnackbar(text: @Composable() () -> Unit) {
     Layout(
-        text, modifier = Spacing(left = HorizontalSpacing, right = HorizontalSpacing)
+        text, modifier = LayoutPadding(left = HorizontalSpacing, right = HorizontalSpacing)
     ) { measurables, constraints ->
         require(measurables.size == 1) {
             "text for Snackbar expected to have exactly only one child"
@@ -168,7 +168,7 @@
     button: @Composable() () -> Unit
 ) {
     Column(
-        modifier = ExpandedWidth wraps Spacing(
+        modifier = LayoutExpandedWidth + LayoutPadding(
             left = HorizontalSpacing,
             right = HorizontalSpacingButtonSide,
             bottom = SeparateButtonExtraY
@@ -176,10 +176,10 @@
     ) {
         AlignmentLineOffset(alignmentLine = LastBaseline, after = LongButtonVerticalOffset) {
             AlignmentLineOffset(alignmentLine = FirstBaseline, before = HeightToFirstLine) {
-                Container(modifier = Spacing(right = HorizontalSpacingButtonSide), children = text)
+                Container(LayoutPadding(right = HorizontalSpacingButtonSide), children = text)
             }
         }
-        Container(modifier = Gravity.End, children = button)
+        Container(modifier = LayoutGravity.End, children = button)
     }
 }
 
@@ -190,7 +190,7 @@
 ) {
     Layout(
         text, button,
-        modifier = Spacing(left = HorizontalSpacing, right = HorizontalSpacingButtonSide)
+        modifier = LayoutPadding(left = HorizontalSpacing, right = HorizontalSpacingButtonSide)
     ) { measurables, constraints ->
         require(measurables[text].size == 1) {
             "text for Snackbar expected to have exactly only one child"
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt b/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
index 302be91..5d8d32b 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
@@ -35,6 +35,7 @@
 import androidx.ui.core.Placeable
 import androidx.ui.core.Px
 import androidx.ui.core.Text
+import androidx.ui.core.WithConstraints
 import androidx.ui.core.ambientDensity
 import androidx.ui.core.coerceIn
 import androidx.ui.core.dp
@@ -49,15 +50,17 @@
 import androidx.ui.foundation.SimpleImage
 import androidx.ui.foundation.selection.MutuallyExclusiveSetItem
 import androidx.ui.graphics.Color
+import androidx.ui.graphics.Image
 import androidx.ui.layout.Container
 import androidx.ui.layout.FlexRow
+import androidx.ui.layout.LayoutExpandedWidth
+import androidx.ui.layout.LayoutGravity
 import androidx.ui.layout.Padding
 import androidx.ui.layout.Stack
+import androidx.ui.material.TabRow.IndicatorTransition
 import androidx.ui.material.TabRow.TabPosition
 import androidx.ui.material.ripple.Ripple
 import androidx.ui.material.surface.Surface
-import androidx.ui.graphics.Image
-import androidx.ui.layout.Gravity
 import androidx.ui.text.style.TextAlign
 
 /**
@@ -137,7 +140,8 @@
             }
         }
 
-        WithExpandedWidth { width ->
+        WithConstraints { constraints ->
+            val width = constraints.maxWidth
             // TODO: force scrollable for tabs that will be too small if they take up equal space?
             if (scrollable) {
                 ScrollableTabRow(width, selectedIndex, tabs, indicatorContainer)
@@ -168,12 +172,12 @@
         TabRow.Divider(modifier)
     }
 
-    Stack {
-        FlexRow(Gravity.Center) {
+    Stack(LayoutExpandedWidth) {
+        FlexRow(LayoutGravity.Center) {
             expanded(1f, tabs)
         }
-        divider(Gravity.BottomCenter)
-        Container(Gravity.Stretch) {
+        divider(LayoutGravity.BottomCenter)
+        Container(LayoutGravity.Stretch) {
             indicatorContainer(tabPositions)
         }
     }
@@ -196,8 +200,8 @@
         ScrollableTabData(selectedIndex, tabPositions, width, edgeOffset)
     }
 
-    scrollableTabData.selectedTab = selectedIndex
     scrollableTabData.tabPositions = tabPositions
+    scrollableTabData.selectedTab = selectedIndex
     scrollableTabData.visibleWidth = width
 
     val indicator = @Composable {
@@ -211,7 +215,10 @@
         TabRow.Divider()
     }
 
-    HorizontalScroller(scrollerPosition = scrollableTabData.position) {
+    HorizontalScroller(
+        scrollerPosition = scrollableTabData.position,
+        modifier = LayoutExpandedWidth
+    ) {
         Layout(tabs, indicator, divider) { measurables, constraints ->
             val tabPlaceables = mutableListOf<Pair<Placeable, IntPx>>()
             val minTabWidth = ScrollableTabRowMinimumTabWidth.toIntPx()
@@ -304,27 +311,6 @@
     }
 }
 
-// TODO: cleanup when expanded width layouts are supported natively b/140408477
-/**
- * A layout that is sized according to its [child]'s height, and all the available width.
- */
-@Composable
-private fun WithExpandedWidth(child: @Composable() (width: IntPx) -> Unit) {
-    // TODO: unfortunate 1f lag as we need to first measure total width and then recompose so the
-    // tab row knows the correct width
-    var widthState by +state { IntPx.Zero }
-    Layout({ child(widthState) }) { measurables, constraints ->
-        val width = constraints.maxWidth
-        if (widthState != width) widthState = width
-        val placeable = measurables.first().measure(constraints)
-        val height = placeable.height
-
-        layout(width, height) {
-            placeable.place(IntPx.Zero, IntPx.Zero)
-        }
-    }
-}
-
 object TabRow {
     private val IndicatorOffset = PxPropKey()
 
diff --git a/ui/ui-platform/OWNERS b/ui/ui-platform/OWNERS
index af392f8..8fee348 100644
--- a/ui/ui-platform/OWNERS
+++ b/ui/ui-platform/OWNERS
@@ -2,6 +2,7 @@
 [email protected]
 [email protected]
 [email protected]
[email protected]
 
 # For text input
 [email protected]
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/android/fake/FakeViewStructure.kt b/ui/ui-test/src/main/java/androidx/ui/test/android/fake/FakeViewStructure.kt
index ad7e85f..0a785c2 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/android/fake/FakeViewStructure.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/android/fake/FakeViewStructure.kt
@@ -75,6 +75,7 @@
             useParcel { parcel ->
                 parcel.writeInt(++previousId) // View Id.
                 parcel.writeInt(NO_SESSION) // Flag.
+                parcel.setDataPosition(0)
                 autofillId = AutofillId.CREATOR.createFromParcel(parcel)
             }
             return autofillId ?: error("Could not generate autofill id")
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
index 7d0f2b1..b182e9d 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
@@ -24,7 +24,7 @@
 import androidx.ui.input.KeyboardType
 import androidx.ui.layout.Column
 import androidx.ui.foundation.VerticalScroller
-import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.LayoutExpandedHeight
 import androidx.ui.text.TextStyle
 
 val KEYBOARD_TYPES = listOf(
@@ -51,7 +51,7 @@
 @Composable
 fun InputFieldDemo() {
     VerticalScroller {
-        Column(ExpandedHeight) {
+        Column(LayoutExpandedHeight) {
             TagLine(tag = "simple editing")
             EditLine()
             TagLine(tag = "simple editing2")
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
index 23186ec..12e03eeb 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
@@ -35,8 +35,8 @@
 import androidx.ui.text.style.TextOverflow
 import androidx.ui.core.em
 import androidx.ui.core.sp
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
 import androidx.ui.text.LocaleList
 import androidx.ui.text.SpanStyle
 import androidx.ui.text.samples.BaselineShiftSample
@@ -278,7 +278,7 @@
 @Composable
 fun TextDemoHeight() {
     // This group of text composables show different height.
-    Row(ExpandedWidth) {
+    Row(LayoutExpandedWidth) {
         Text {
             Span(
                 text = "$displayText\n$displayText   ",
@@ -365,7 +365,7 @@
     for (i in 1..10) {
         text = "$text$displayText "
     }
-    Column(ExpandedHeight) {
+    Column(LayoutExpandedHeight) {
         SecondTagLine(tag = "textAlign = TextAlign.Left")
         Text(style = TextStyle(textAlign = TextAlign.Left)) {
             Span(text = displayText, style = SpanStyle(fontSize = fontSize8))
@@ -425,7 +425,7 @@
     }
     val spanStyle = SpanStyle(fontSize = fontSize8, color = Color(0xFFFF0000))
 
-    Column(ExpandedHeight) {
+    Column(LayoutExpandedHeight) {
         Text {
             Span(text = text, style = spanStyle)
         }
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeTextSelection.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeTextSelection.kt
index 344e439..6a5aa5e 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeTextSelection.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeTextSelection.kt
@@ -26,8 +26,8 @@
 import androidx.ui.foundation.VerticalScroller
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Column
-import androidx.ui.layout.ExpandedHeight
-import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.LayoutExpandedHeight
+import androidx.ui.layout.LayoutExpandedWidth
 import androidx.ui.layout.Row
 import androidx.ui.text.LocaleList
 import androidx.ui.text.SpanStyle
@@ -133,9 +133,9 @@
     SelectionContainer(
         selection = selection.value,
         onSelectionChange = { selection.value = it }) {
-        Column(ExpandedHeight) {
+        Column(LayoutExpandedHeight) {
             for (i in 0..2) {
-                Row(ExpandedWidth) {
+                Row(LayoutExpandedWidth) {
                     for (j in 0..2) {
                         Text {
                             Span(
diff --git a/ui/ui-text/src/androidTest/font_ttx/sample_font.ttx b/ui/ui-text/src/androidTest/font_ttx/sample_font.ttx
index 11225c9..1d0736c 100644
--- a/ui/ui-text/src/androidTest/font_ttx/sample_font.ttx
+++ b/ui/ui-text/src/androidTest/font_ttx/sample_font.ttx
@@ -20,6 +20,7 @@
     <GlyphID id="1" name="1em"/>
     <GlyphID id="2" name="1em_rtl"/>
     <GlyphID id="3" name="space"/>
+    <GlyphID id="4" name="linefeed"/>
   </GlyphOrder>
 
   <head>
@@ -130,12 +131,14 @@
     <mtx name="1em" width="1000" lsb="0"/>
     <mtx name="1em_rtl" width="1000" lsb="0"/>
     <mtx name="space" width="1000" lsb="0"/>
+    <mtx name="linefeed" width="500" lsb="0"/>
   </hmtx>
 
   <cmap>
     <tableVersion version="0"/>
     <cmap_format_4 platformID="3" platEncID="10" language="0">
         <map code="0x0009" name="1em" /> <!-- TAB -->
+        <map code="0x000A" name="linefeed" /> <!-- LINEFEED -->
         <map code="0x0020" name="space" /> <!-- SPACE -->
         <map code="0x002C" name="1em" /> <!-- , -->
         <map code="0x002D" name="1em" /> <!-- - -->
@@ -247,14 +250,16 @@
         <instructions />
     </TTGlyph>
     <TTGlyph name="space" xMin="0" yMin="-200" xMax="1000" yMax="800">
-            <contour>
-                <pt x="0" y="0" on="1"/>
-                <pt x="1000" y="0" on="1"/>
-                <pt x="1000" y="10" on="1"/>
-                <pt x="0" y="10" on="1"/>
-            </contour>
-            <instructions />
-        </TTGlyph>
+        <contour>
+            <pt x="0" y="0" on="1"/>
+            <pt x="1000" y="0" on="1"/>
+            <pt x="1000" y="10" on="1"/>
+            <pt x="0" y="10" on="1"/>
+        </contour>
+        <instructions />
+    </TTGlyph>
+    <TTGlyph name="linefeed" xMin="0" yMin="-200" xMax="0" yMax="800"/>
+
   </glyf>
 
   <name>
@@ -299,4 +304,4 @@
     <maxMemType1 value="0"/>
   </post>
 
-</ttFont>
\ No newline at end of file
+</ttFont>
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
index 8693047..aed7b76 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
@@ -2141,19 +2141,45 @@
     }
 
     @Test
-    fun lineHeight_returnsSameAsGiven() {
+    fun lineHeight_inSp() {
         withDensity(defaultDensity) {
             val text = "abcdefgh"
-            val fontSize = 20.sp
-            val fontSizeInPx = fontSize.toPx().value
+            val fontSize = 20f
             // Make the layout 4 lines
-            val layoutWidth = text.length * fontSizeInPx / 4
-            val lineHeight = 30.sp
+            val layoutWidth = text.length * fontSize / 4
+            val lineHeight = 30f
 
             val paragraph = simpleParagraph(
                 text = text,
-                fontSize = fontSize,
-                lineHeight = lineHeight,
+                fontSize = fontSize.sp,
+                lineHeight = lineHeight.sp,
+                constraints = ParagraphConstraints(width = layoutWidth)
+            )
+
+            assertThat(paragraph.lineCount).isEqualTo(4)
+            // First/last line is influenced by top/bottom padding
+            for (i in 1 until paragraph.lineCount - 1) {
+                val actualHeight = paragraph.getLineHeight(i)
+                // In the sample_font.ttf, the height of the line should be
+                // fontSize + 0.2f * fontSize(line gap)
+                assertWithMessage("line number $i").that(actualHeight).isEqualTo(lineHeight)
+            }
+        }
+    }
+
+    @Test
+    fun lineHeight_InEm() {
+        withDensity(defaultDensity) {
+            val text = "abcdefgh"
+            val fontSize = 20f
+            // Make the layout 4 lines
+            val layoutWidth = text.length * fontSize / 4
+            val lineHeight = 1.5f
+
+            val paragraph = simpleParagraph(
+                text = text,
+                fontSize = fontSize.sp,
+                lineHeight = lineHeight.em,
                 constraints = ParagraphConstraints(width = layoutWidth)
             )
 
@@ -2164,7 +2190,7 @@
                 // In the sample_font.ttf, the height of the line should be
                 // fontSize + 0.2f * fontSize(line gap)
                 assertWithMessage("line number $i")
-                    .that(actualHeight).isEqualTo(lineHeight.toPx().value)
+                    .that(actualHeight).isEqualTo(lineHeight * fontSize)
             }
         }
     }
@@ -2461,7 +2487,7 @@
     }
 
     @Test
-    fun textIndent_onSingleLine() {
+    fun textIndent_inSp_onSingleLine() {
         withDensity(defaultDensity) {
             val text = "abc"
             val fontSize = 20.sp
@@ -2485,65 +2511,110 @@
     }
 
     @Test
-    fun textIndent_onFirstLine() {
+    fun textIndent_inSp_onFirstLine() {
         withDensity(defaultDensity) {
             val text = "abcdef"
-            val fontSize = 20.sp
-            val fontSizeInPx = fontSize.toPx().value
-            val indent = 20.sp
-            val indentInPx = indent.toPx().value
-            val paragraphWidth = "abcd".length * fontSizeInPx
+            val fontSize = 20f
+            val indent = 15f
+            val paragraphWidth = "abcd".length * fontSize
 
             val paragraph = simpleParagraph(
                 text = text,
-                textIndent = TextIndent(firstLine = indent),
-                fontSize = fontSize,
+                textIndent = TextIndent(firstLine = indent.sp),
+                fontSize = fontSize.sp,
                 fontFamily = fontFamilyMeasureFont,
                 constraints = ParagraphConstraints(width = paragraphWidth)
             )
 
             assertThat(paragraph.lineCount).isEqualTo(2)
-
-            // This position should point to the first character of the first line if indent is
-            // applied. Otherwise this position will point to the second character of the second line.
-            val position = PxPosition((indentInPx + 1).px, (fontSizeInPx / 2).px)
-
-            // The offset corresponding to the position should be the first char 'a'.
-            assertThat(paragraph.getOffsetForPosition(position)).isZero()
+            assertThat(paragraph.getHorizontalPosition(0, true)).isEqualTo(indent)
         }
     }
 
     @Test
-    fun textIndent_onRestLine() {
+    fun textIndent_inSp_onRestLine() {
         withDensity(defaultDensity) {
             val text = "abcde"
-            val fontSize = 20.sp
-            val fontSizeInPx = fontSize.toPx().value
-            val indent = 20.sp
-            val indentInPx = indent.toPx().value
-            val paragraphWidth = "abc".length * fontSizeInPx
+            val fontSize = 20f
+            val indent = 20f
+            val paragraphWidth = "abc".length * fontSize
 
             val paragraph = simpleParagraph(
                 text = text,
-                textIndent = TextIndent(
-                    firstLine = 0.sp,
-                    restLine = indent
-                ),
-                fontSize = fontSize,
+                textIndent = TextIndent(restLine = indent.sp),
+                fontSize = fontSize.sp,
                 fontFamily = fontFamilyMeasureFont,
                 constraints = ParagraphConstraints(width = paragraphWidth)
             )
 
-            // This position should point to the first character of the second line if indent is
-            // applied. Otherwise this position will point to the second character of the second line.
-            val position = PxPosition((indentInPx + 1).px, (fontSizeInPx / 2 + fontSizeInPx).px)
-
-            // The offset corresponding to the position should be the 'd' in the second line.
-            assertThat(paragraph.getOffsetForPosition(position)).isEqualTo("abcd".length - 1)
+            // check the position of the first character in second line: "d" should be indented
+            assertThat(paragraph.getHorizontalPosition(3, true)).isEqualTo(indent)
         }
     }
 
     @Test
+    fun textIndent_inEm_onSingleLine() {
+        withDensity(defaultDensity) {
+            val text = "abc"
+            val fontSize = 20f
+            val indent = 1.5f
+
+            val paragraph = simpleParagraph(
+                text = text,
+                textIndent = TextIndent(firstLine = indent.em),
+                fontSize = fontSize.sp,
+                fontFamily = fontFamilyMeasureFont
+            )
+
+            assertThat(paragraph.getHorizontalPosition(0, true)).isEqualTo(indent * fontSize)
+        }
+    }
+
+    @Test
+    fun textIndent_inEm_onFirstLine() {
+        withDensity(defaultDensity) {
+            val text = "abcdef"
+            val fontSize = 20f
+            val indent = 1.5f
+
+            val paragraphWidth = "abcd".length * fontSize
+
+            val paragraph = simpleParagraph(
+                text = text,
+                textIndent = TextIndent(firstLine = indent.em),
+                fontSize = fontSize.sp,
+                fontFamily = fontFamilyMeasureFont,
+                constraints = ParagraphConstraints(width = paragraphWidth)
+            )
+
+            assertThat(paragraph.lineCount).isEqualTo(2)
+            assertThat(paragraph.getHorizontalPosition(0, true)).isEqualTo(indent * fontSize)
+        }
+    }
+
+    @Test
+    fun textIndent_inEm_onRestLine() {
+        withDensity(defaultDensity) {
+            val text = "abcdef"
+            val fontSize = 20f
+            val indent = 1.5f
+
+            val paragraphWidth = "abcd".length * fontSize
+
+            val paragraph = simpleParagraph(
+                text = text,
+                textIndent = TextIndent(restLine = indent.em),
+                fontSize = fontSize.sp,
+                fontFamily = fontFamilyMeasureFont,
+                constraints = ParagraphConstraints(width = paragraphWidth)
+            )
+
+            assertThat(paragraph.lineCount).isEqualTo(2)
+            // check the position of the first character in second line: "e" should be indented
+            assertThat(paragraph.getHorizontalPosition(4, true)).isEqualTo(indent * fontSize)
+        }
+    }
+    @Test
     fun testAnnotatedString_fontFamily_changesMeasurement() {
         withDensity(defaultDensity) {
             val text = "ad"
diff --git a/ui/ui-text/src/androidTest/res/font/sample_font.ttf b/ui/ui-text/src/androidTest/res/font/sample_font.ttf
index 382a737..dc10688 100644
--- a/ui/ui-text/src/androidTest/res/font/sample_font.ttf
+++ b/ui/ui-text/src/androidTest/res/font/sample_font.ttf
Binary files differ
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
index a8ef86a..13c926d 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
@@ -43,7 +43,6 @@
 import androidx.ui.core.Density
 import androidx.ui.core.TextUnit
 import androidx.ui.core.TextUnitType
-import androidx.ui.core.px
 import androidx.ui.core.sp
 import androidx.ui.core.withDensity
 import androidx.ui.graphics.toArgb
@@ -146,6 +145,7 @@
 
 internal fun createStyledText(
     text: String,
+    contextFontSize: Float,
     lineHeight: TextUnit,
     textIndent: TextIndent?,
     spanStyles: List<AnnotatedString.Item<SpanStyle>>,
@@ -165,7 +165,12 @@
             )
         }
         TextUnitType.Em -> {
-            // Support line height with EM unit: b/144957855
+            spannableString.setSpan(
+                LineHeightSpan(ceil(lineHeight.value * contextFontSize).toInt()),
+                0,
+                text.length,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
         }
         TextUnitType.Inherit -> {} // Do nothing
     }
@@ -175,25 +180,19 @@
         if (indent.firstLine.isInherit || indent.restLine.isInherit) return@let
         withDensity(density) {
             val firstLine = when (indent.firstLine.type) {
-                TextUnitType.Sp -> indent.firstLine.toPx()
-                TextUnitType.Em -> {
-                    // Support indents with Em unit type: b/144958549
-                    0.px
-                }
-                TextUnitType.Inherit -> { 0.px } // do nothing
+                TextUnitType.Sp -> indent.firstLine.toPx().value
+                TextUnitType.Em -> indent.firstLine.value * contextFontSize
+                TextUnitType.Inherit -> { 0f } // do nothing
             }
             val restLine = when (indent.restLine.type) {
-                TextUnitType.Sp -> indent.restLine.toPx()
-                TextUnitType.Em -> {
-                    // Support indents with Em unit type: b/144958549
-                    0.px
-                }
-                TextUnitType.Inherit -> { 0.px } // do nothing
+                TextUnitType.Sp -> indent.restLine.toPx().value
+                TextUnitType.Em -> indent.restLine.value * contextFontSize
+                TextUnitType.Inherit -> { 0f } // do nothing
             }
             spannableString.setSpan(
                 LeadingMarginSpan.Standard(
-                    firstLine.value.toInt(),
-                    restLine.value.toInt()
+                    ceil(firstLine).toInt(),
+                    ceil(restLine).toInt()
                 ),
                 0,
                 text.length,
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt
index 83b0a9b..2fc807e 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt
@@ -57,6 +57,7 @@
 
         charSequence = createStyledText(
             text = text,
+            contextFontSize = textPaint.textSize,
             lineHeight = paragraphStyle.lineHeight,
             textIndent = paragraphStyle.textIndent,
             spanStyles = listOf(
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt
index 030e07a..1bc08db 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt
@@ -39,20 +39,21 @@
     private var progress: Data = Data.EMPTY
 
     override suspend fun doWork(): Result {
+        val notificationId = inputData.getInt(InputNotificationId, NotificationId)
+        val delayTime = inputData.getLong(InputDelayTime, Delay)
         // Run in the context of a Foreground service
-        setForeground(getNotification())
-
+        setForeground(getForegroundInfo(notificationId))
         val range = 20
         for (i in 1..range) {
-            delay(1000)
+            delay(delayTime)
             progress = workDataOf(Progress to i * (100 / range))
             setProgress(progress)
-            setForeground(getNotification())
+            setForeground(getForegroundInfo(notificationId))
         }
         return Result.success()
     }
 
-    private fun getNotification(): ForegroundInfo {
+    private fun getForegroundInfo(notificationId: Int): ForegroundInfo {
         val percent = progress.getInt(Progress, 0)
         val id = applicationContext.getString(R.string.channel_id)
         val title = applicationContext.getString(R.string.notification_title)
@@ -69,7 +70,7 @@
             .setOngoing(true)
             .build()
 
-        return ForegroundInfo(NotificationId, notification)
+        return ForegroundInfo(notificationId, notification)
     }
 
     @RequiresApi(Build.VERSION_CODES.O)
@@ -85,6 +86,9 @@
 
     companion object {
         private const val NotificationId = 10
+        private const val Delay = 1000L
         private const val Progress = "Progress"
+        const val InputNotificationId = "NotificationId"
+        const val InputDelayTime = "DelayTime"
     }
 }
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
index 1d789de..63e6858 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
@@ -67,6 +67,7 @@
 
     // Synthetic access
     WorkRequest mLastForegroundWorkRequest;
+    int mLastNotificationId = 10;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -364,8 +365,15 @@
         findViewById(R.id.run_foreground_worker).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
+                mLastNotificationId += 1;
+
+                Data inputData = new Data.Builder()
+                        .putInt(ForegroundWorker.InputNotificationId, mLastNotificationId)
+                        .build();
+
                 OneTimeWorkRequest request =
                         new OneTimeWorkRequest.Builder(ForegroundWorker.class)
+                                .setInputData(inputData)
                                 .setConstraints(new Constraints.Builder()
                                         .setRequiredNetworkType(NetworkType.CONNECTED).build()
                                 ).build();
@@ -378,8 +386,14 @@
         findViewById(R.id.cancel_foreground_worker).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                WorkManager.getInstance(MainActivity.this)
-                        .cancelAllWorkByTag(ForegroundWorker.class.getName());
+                if (mLastForegroundWorkRequest != null) {
+                    WorkManager.getInstance(MainActivity.this)
+                            .cancelWorkById(mLastForegroundWorkRequest.getId());
+                    mLastForegroundWorkRequest = null;
+                } else {
+                    WorkManager.getInstance(MainActivity.this)
+                            .cancelAllWorkByTag(ForegroundWorker.class.getName());
+                }
             }
         });
 
@@ -396,6 +410,7 @@
 
                             try {
                                 pendingIntent.send(0);
+                                mLastForegroundWorkRequest = null;
                             } catch (PendingIntent.CanceledException exception) {
                                 Log.e(TAG, "Pending intent was cancelled.", exception);
                             }
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt b/work/workmanager/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
index fdcc604..56359de 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
@@ -18,10 +18,13 @@
 
 import android.app.Notification
 import android.content.Context
+import android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
+import android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION
 import android.util.Log
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
 import androidx.work.Configuration
 import androidx.work.Constraints
 import androidx.work.ForegroundInfo
@@ -131,7 +134,7 @@
     }
 
     @Test
-    fun testHandleNotify() {
+    fun testStartForeground() {
         val workSpecId = "workSpecId"
         val notificationId = 1
         val notification = mock(Notification::class.java)
@@ -139,7 +142,139 @@
         val intent = createNotifyIntent(context, workSpecId, metadata)
         dispatcher.onStartCommand(intent)
         verify(dispatcherCallback, times(1))
-            .notify(eq(notificationId), eq(0), eq(workSpecId), any<Notification>())
+            .startForeground(eq(notificationId), eq(0), any<Notification>())
+    }
+
+    @Test
+    fun testNotify() {
+        val workSpecId = "workSpecId"
+        val notificationId = 1
+        val notification = mock(Notification::class.java)
+        val metadata = ForegroundInfo(notificationId, notification)
+        val intent = createNotifyIntent(context, workSpecId, metadata)
+        dispatcher.mCurrentForegroundWorkSpecId = "anotherWorkSpecId"
+        dispatcher.onStartCommand(intent)
+        verify(dispatcherCallback, times(1))
+            .notify(eq(notificationId), any<Notification>())
+    }
+
+    @Test
+    fun testPromoteWorkSpecForStartForeground() {
+        val firstWorkSpecId = "first"
+        val firstId = 1
+        val notification = mock(Notification::class.java)
+        val firstInfo = ForegroundInfo(firstId, notification)
+        val firstIntent = createNotifyIntent(context, firstWorkSpecId, firstInfo)
+
+        val secondWorkSpecId = "second"
+        val secondId = 2
+        val secondInfo = ForegroundInfo(secondId, notification)
+        val secondIntent = createNotifyIntent(context, secondWorkSpecId, secondInfo)
+
+        dispatcher.onStartCommand(firstIntent)
+        assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+        verify(dispatcherCallback, times(1))
+            .startForeground(eq(firstId), eq(0), any<Notification>())
+
+        dispatcher.onStartCommand(secondIntent)
+        assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+        verify(dispatcherCallback, times(1))
+            .notify(eq(secondId), any<Notification>())
+        assertThat(dispatcher.mForegroundInfoById.count(), `is`(2))
+
+        dispatcher.onExecuted(firstWorkSpecId, false)
+        verify(dispatcherCallback, times(1))
+            .startForeground(eq(secondId), eq(0), any<Notification>())
+        verify(dispatcherCallback, times(1))
+            .cancelNotification(secondId)
+        assertThat(dispatcher.mForegroundInfoById.count(), `is`(1))
+
+        dispatcher.onExecuted(secondWorkSpecId, false)
+        verify(dispatcherCallback, times(1))
+            .cancelNotification(secondId)
+        assertThat(dispatcher.mForegroundInfoById.count(), `is`(0))
+    }
+
+    @Test
+    fun promoteWorkSpecForStartForeground2() {
+        val firstWorkSpecId = "first"
+        val firstId = 1
+        val notification = mock(Notification::class.java)
+        val firstInfo = ForegroundInfo(firstId, notification)
+        val firstIntent = createNotifyIntent(context, firstWorkSpecId, firstInfo)
+
+        val secondWorkSpecId = "second"
+        val secondId = 2
+        val secondInfo = ForegroundInfo(secondId, notification)
+        val secondIntent = createNotifyIntent(context, secondWorkSpecId, secondInfo)
+
+        val thirdWorkSpecId = "third"
+        val thirdId = 3
+        val thirdInfo = ForegroundInfo(thirdId, notification)
+        val thirdIntent = createNotifyIntent(context, thirdWorkSpecId, thirdInfo)
+
+        dispatcher.onStartCommand(firstIntent)
+        assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+        verify(dispatcherCallback, times(1))
+            .startForeground(eq(firstId), eq(0), any<Notification>())
+
+        dispatcher.onStartCommand(secondIntent)
+        assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+        verify(dispatcherCallback, times(1))
+            .notify(eq(secondId), any<Notification>())
+        assertThat(dispatcher.mForegroundInfoById.count(), `is`(2))
+
+        dispatcher.onStartCommand(thirdIntent)
+        assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+        verify(dispatcherCallback, times(1))
+            .notify(eq(secondId), any<Notification>())
+        assertThat(dispatcher.mForegroundInfoById.count(), `is`(3))
+
+        dispatcher.onExecuted(firstWorkSpecId, false)
+        verify(dispatcherCallback, times(1))
+            .startForeground(eq(thirdId), eq(0), any<Notification>())
+        verify(dispatcherCallback, times(1))
+            .cancelNotification(thirdId)
+        assertThat(dispatcher.mForegroundInfoById.count(), `is`(2))
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = 29)
+    fun testUpdateNotificationWithDifferentForegroundServiceType() {
+        val firstWorkSpecId = "first"
+        val firstId = 1
+        val notification = mock(Notification::class.java)
+        val firstInfo =
+            ForegroundInfo(firstId, notification, FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE)
+        val firstIntent = createNotifyIntent(context, firstWorkSpecId, firstInfo)
+
+        val secondWorkSpecId = "second"
+        val secondId = 2
+        val secondInfo = ForegroundInfo(secondId, notification, FOREGROUND_SERVICE_TYPE_LOCATION)
+        val secondIntent = createNotifyIntent(context, secondWorkSpecId, secondInfo)
+
+        dispatcher.onStartCommand(firstIntent)
+        verify(dispatcherCallback, times(1))
+            .startForeground(
+                eq(firstId),
+                eq(FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE),
+                any<Notification>()
+            )
+
+        dispatcher.onStartCommand(secondIntent)
+        assertThat(dispatcher.mCurrentForegroundWorkSpecId, `is`(firstWorkSpecId))
+        verify(dispatcherCallback, times(1))
+            .notify(eq(secondId), any<Notification>())
+
+        val expectedNotificationType =
+            FOREGROUND_SERVICE_TYPE_LOCATION or FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
+
+        verify(dispatcherCallback, times(1))
+            .startForeground(
+                eq(firstId),
+                eq(expectedNotificationType),
+                any<Notification>()
+            )
     }
 
     @Test
diff --git a/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java b/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
index 91df909..12bf6fe 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
@@ -16,10 +16,13 @@
 
 package androidx.work.impl.foreground;
 
+import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_NONE;
+
 import android.app.Notification;
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
+import android.os.Build;
 import android.text.TextUtils;
 
 import androidx.annotation.MainThread;
@@ -39,6 +42,8 @@
 
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -60,7 +65,6 @@
     private static final String KEY_NOTIFICATION = "KEY_NOTIFICATION";
     private static final String KEY_NOTIFICATION_ID = "KEY_NOTIFICATION_ID";
     private static final String KEY_FOREGROUND_SERVICE_TYPE = "KEY_FOREGROUND_SERVICE_TYPE";
-    private static final String KEY_NOTIFICATION_TAG = "KEY_NOTIFICATION_TAG";
     private static final String KEY_WORKSPEC_ID = "KEY_WORKSPEC_ID";
 
     // actions
@@ -78,6 +82,12 @@
     final Object mLock;
 
     @SuppressWarnings("WeakerAccess") // Synthetic access
+    String mCurrentForegroundWorkSpecId;
+
+    @SuppressWarnings("WeakerAccess") // Synthetic access
+    final Map<String, ForegroundInfo> mForegroundInfoById;
+
+    @SuppressWarnings("WeakerAccess") // Synthetic access
     final Map<String, WorkSpec> mWorkSpecById;
 
     @SuppressWarnings("WeakerAccess") // Synthetic access
@@ -94,6 +104,8 @@
         mLock = new Object();
         mWorkManagerImpl = WorkManagerImpl.getInstance(mContext);
         mTaskExecutor = mWorkManagerImpl.getWorkTaskExecutor();
+        mCurrentForegroundWorkSpecId = null;
+        mForegroundInfoById = new LinkedHashMap<>();
         mTrackedWorkSpecs = new HashSet<>();
         mWorkSpecById = new HashMap<>();
         mConstraintsTracker = new WorkConstraintsTracker(mContext, mTaskExecutor, this);
@@ -110,6 +122,8 @@
         mLock = new Object();
         mWorkManagerImpl = workManagerImpl;
         mTaskExecutor = mWorkManagerImpl.getWorkTaskExecutor();
+        mCurrentForegroundWorkSpecId = null;
+        mForegroundInfoById = new LinkedHashMap<>();
         mTrackedWorkSpecs = new HashSet<>();
         mWorkSpecById = new HashMap<>();
         mConstraintsTracker = tracker;
@@ -127,9 +141,48 @@
             }
         }
         if (removed) {
-            // Stop tracking
+            // Stop tracking constraints.
             mConstraintsTracker.replace(mTrackedWorkSpecs);
         }
+
+        // Promote new notifications to the foreground if necessary.
+        ForegroundInfo removedInfo = mForegroundInfoById.remove(workSpecId);
+        if (workSpecId.equals(mCurrentForegroundWorkSpecId)) {
+            if (mForegroundInfoById.size() > 0) {
+                // Find the next eligible ForegroundInfo
+                // LinkedHashMap uses insertion order, so find the last one because that was
+                // the most recent ForegroundInfo used. That way when different WorkSpecs share
+                // notification ids, we still end up in a reasonably good place.
+                Iterator<Map.Entry<String, ForegroundInfo>> iterator =
+                        mForegroundInfoById.entrySet().iterator();
+
+                Map.Entry<String, ForegroundInfo> entry = iterator.next();
+                while (iterator.hasNext()) {
+                    entry = iterator.next();
+                }
+
+                mCurrentForegroundWorkSpecId = entry.getKey();
+                if (mCallback != null) {
+                    ForegroundInfo info = entry.getValue();
+                    mCallback.startForeground(
+                            info.getNotificationId(),
+                            info.getForegroundServiceType(),
+                            info.getNotification());
+
+                    // We used NotificationManager before to update notifications, so ensure
+                    // that we reference count the Notification instance down by
+                    // cancelling the notification.
+                    mCallback.cancelNotification(info.getNotificationId());
+                }
+            }
+        } else if (mCallback != null && removedInfo != null) {
+            // We don't need to worry about the current foreground WorkSpecId because if there
+            // is nothing running, the Processor will call stopForeground() which will eventually
+            // turn into a stopSelf().
+
+            // Explicitly remove this notification instance to decrease the reference count.
+            mCallback.cancelNotification(removedInfo.getNotificationId());
+        }
     }
 
     @MainThread
@@ -191,10 +244,45 @@
     private void handleNotify(@NonNull Intent intent) {
         int notificationId = intent.getIntExtra(KEY_NOTIFICATION_ID, 0);
         int notificationType = intent.getIntExtra(KEY_FOREGROUND_SERVICE_TYPE, 0);
-        String notificationTag = intent.getStringExtra(KEY_NOTIFICATION_TAG);
+        String workSpecId = intent.getStringExtra(KEY_WORKSPEC_ID);
         Notification notification = intent.getParcelableExtra(KEY_NOTIFICATION);
+        Logger.get().debug(TAG,
+                String.format("Notifying with (id: %s, workSpecId: %s, notificationType: %s)",
+                        notificationId, workSpecId, notificationType));
+
         if (notification != null && mCallback != null) {
-            mCallback.notify(notificationId, notificationType, notificationTag, notification);
+            // Keep track of this ForegroundInfo
+            ForegroundInfo info = new ForegroundInfo(
+                    notificationId, notification, notificationType);
+
+            mForegroundInfoById.put(workSpecId, info);
+            if (TextUtils.isEmpty(mCurrentForegroundWorkSpecId)) {
+                // This is the current workSpecId which owns the Foreground lifecycle.
+                mCurrentForegroundWorkSpecId = workSpecId;
+                mCallback.startForeground(notificationId, notificationType, notification);
+            } else {
+                // Update notification
+                mCallback.notify(notificationId, notification);
+                // Update the notification in the foreground such that it's the union of
+                // all current foreground service types if necessary.
+                if (notificationType != FOREGROUND_SERVICE_TYPE_NONE
+                        && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+                    int foregroundServiceType = FOREGROUND_SERVICE_TYPE_NONE;
+                    for (Map.Entry<String, ForegroundInfo> entry : mForegroundInfoById.entrySet()) {
+                        ForegroundInfo foregroundInfo = entry.getValue();
+                        foregroundServiceType |= foregroundInfo.getForegroundServiceType();
+                    }
+                    ForegroundInfo currentInfo =
+                            mForegroundInfoById.get(mCurrentForegroundWorkSpecId);
+                    if (currentInfo != null) {
+                        mCallback.startForeground(
+                                currentInfo.getNotificationId(),
+                                foregroundServiceType,
+                                currentInfo.getNotification()
+                        );
+                    }
+                }
+            }
         }
     }
 
@@ -288,7 +376,7 @@
         intent.putExtra(KEY_NOTIFICATION_ID, info.getNotificationId());
         intent.putExtra(KEY_FOREGROUND_SERVICE_TYPE, info.getForegroundServiceType());
         intent.putExtra(KEY_NOTIFICATION, info.getNotification());
-        intent.putExtra(KEY_NOTIFICATION_TAG, workSpecId);
+        intent.putExtra(KEY_WORKSPEC_ID, workSpecId);
         return intent;
     }
 
@@ -310,15 +398,25 @@
      */
     interface Callback {
         /**
-         * Used to update the {@link Notification}.
+         * An implementation of this callback should call
+         * {@link android.app.Service#startForeground(int, Notification, int)}.
          */
-        void notify(
+        void startForeground(
                 int notificationId,
                 int notificationType,
-                @Nullable String notificationTag,
                 @NonNull Notification notification);
 
         /**
+         * Used to update the {@link Notification}.
+         */
+        void notify(int notificationId, @NonNull Notification notification);
+
+        /**
+         * Used to cancel a {@link Notification}.
+         */
+        void cancelNotification(int notificationId);
+
+        /**
          * Used to stop the {@link SystemForegroundService}.
          */
         void stop();
diff --git a/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java b/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java
index 3298f43..3b91796 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java
@@ -17,7 +17,9 @@
 package androidx.work.impl.foreground;
 
 import android.app.Notification;
+import android.app.NotificationManager;
 import android.app.Service;
+import android.content.Context;
 import android.content.Intent;
 import android.os.Build;
 import android.os.Handler;
@@ -43,6 +45,9 @@
     private Handler mHandler;
     private boolean mIsShutdown;
 
+    // Synthetic access
+    NotificationManager mNotificationManager;
+
     @Override
     public void onCreate() {
         super.onCreate();
@@ -81,6 +86,8 @@
     @MainThread
     private void initializeDispatcher() {
         mHandler = new Handler(Looper.getMainLooper());
+        mNotificationManager = (NotificationManager)
+                getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
         mDispatcher = new SystemForegroundDispatcher(getApplicationContext());
         mDispatcher.setCallback(this);
     }
@@ -99,10 +106,9 @@
     }
 
     @Override
-    public void notify(
+    public void startForeground(
             final int notificationId,
             final int notificationType,
-            @Nullable final String notificationTag,
             @NonNull final Notification notification) {
 
         mHandler.post(new Runnable() {
@@ -116,4 +122,24 @@
             }
         });
     }
+
+    @Override
+    public void notify(final int notificationId, @NonNull final Notification notification) {
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mNotificationManager.notify(notificationId, notification);
+            }
+        });
+    }
+
+    @Override
+    public void cancelNotification(final int notificationId) {
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mNotificationManager.cancel(notificationId);
+            }
+        });
+    }
 }
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/WorkProgressUpdater.java b/work/workmanager/src/main/java/androidx/work/impl/utils/WorkProgressUpdater.java
index e69446a..7aa48eb 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/WorkProgressUpdater.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/WorkProgressUpdater.java
@@ -73,7 +73,7 @@
             @Override
             public void run() {
                 String workSpecId = id.toString();
-                Logger.get().info(TAG, String.format("Updating progress for %s (%s)", id, data));
+                Logger.get().debug(TAG, String.format("Updating progress for %s (%s)", id, data));
                 mWorkDatabase.beginTransaction();
                 try {
                     WorkSpecDao workSpecDao = mWorkDatabase.workSpecDao();