diff --git a/src/Spectre.Console.Tests/Expectations/ProgressTests.Foo.verified.txt b/src/Spectre.Console.Tests/Expectations/ProgressTests.Foo.verified.txt
new file mode 100644
index 0000000..c81f6e0
--- /dev/null
+++ b/src/Spectre.Console.Tests/Expectations/ProgressTests.Foo.verified.txt
@@ -0,0 +1,5 @@
+                    
+foo ━━━ 0% -:--:-- ⣷
+bar ━━━ 0% -:--:-- ⣷
+baz ━━━ 0% -:--:-- ⣷
+                    
diff --git a/src/Spectre.Console.Tests/Tools/DummyCursor.cs b/src/Spectre.Console.Tests/Tools/DummyCursor.cs
new file mode 100644
index 0000000..fe1f75a
--- /dev/null
+++ b/src/Spectre.Console.Tests/Tools/DummyCursor.cs
@@ -0,0 +1,17 @@
+namespace Spectre.Console.Tests
+{
+    public sealed class DummyCursor : IAnsiConsoleCursor
+    {
+        public void Move(CursorDirection direction, int steps)
+        {
+        }
+
+        public void SetPosition(int column, int line)
+        {
+        }
+
+        public void Show(bool show)
+        {
+        }
+    }
+}
diff --git a/src/Spectre.Console.Tests/Tools/PlainConsole.cs b/src/Spectre.Console.Tests/Tools/PlainConsole.cs
index 12b7c84..105d056 100644
--- a/src/Spectre.Console.Tests/Tools/PlainConsole.cs
+++ b/src/Spectre.Console.Tests/Tools/PlainConsole.cs
@@ -11,7 +11,7 @@ namespace Spectre.Console.Tests
     {
         public Capabilities Capabilities { get; }
         public Encoding Encoding { get; }
-        public IAnsiConsoleCursor Cursor => throw new NotSupportedException();
+        public IAnsiConsoleCursor Cursor => new DummyCursor();
         public TestableConsoleInput Input { get; }
 
         public int Width { get; }
diff --git a/src/Spectre.Console.Tests/Tools/TestLinkIdentityGenerator.cs b/src/Spectre.Console.Tests/Tools/TestLinkIdentityGenerator.cs
index 4302eb6..0a34220 100644
--- a/src/Spectre.Console.Tests/Tools/TestLinkIdentityGenerator.cs
+++ b/src/Spectre.Console.Tests/Tools/TestLinkIdentityGenerator.cs
@@ -1,4 +1,4 @@
-namespace Spectre.Console.Tests.Tools
+namespace Spectre.Console.Tests
 {
     public sealed class TestLinkIdentityGenerator : ILinkIdentityGenerator
     {
diff --git a/src/Spectre.Console.Tests/Tools/TestableAnsiConsole.cs b/src/Spectre.Console.Tests/Tools/TestableAnsiConsole.cs
index 0cd8122..48af9d4 100644
--- a/src/Spectre.Console.Tests/Tools/TestableAnsiConsole.cs
+++ b/src/Spectre.Console.Tests/Tools/TestableAnsiConsole.cs
@@ -3,7 +3,6 @@ using System.Collections.Generic;
 using System.IO;
 using System.Text;
 using Spectre.Console.Rendering;
-using Spectre.Console.Tests.Tools;
 
 namespace Spectre.Console.Tests
 {
diff --git a/src/Spectre.Console.Tests/Unit/ProgressTests.cs b/src/Spectre.Console.Tests/Unit/ProgressTests.cs
index ac330c2..5bb724c 100644
--- a/src/Spectre.Console.Tests/Unit/ProgressTests.cs
+++ b/src/Spectre.Console.Tests/Unit/ProgressTests.cs
@@ -1,8 +1,11 @@
+using System.Threading.Tasks;
 using Shouldly;
+using VerifyXunit;
 using Xunit;
 
 namespace Spectre.Console.Tests.Unit
 {
+    [UsesVerify]
     public sealed class ProgressTests
     {
         [Fact]
@@ -54,5 +57,35 @@ namespace Spectre.Console.Tests.Unit
                     "          \n" + // Bottom padding
                     "[?25h"); // show cursor
         }
+
+        [Fact]
+        public Task Foo()
+        {
+            // Given
+            var console = new PlainConsole(width: 20);
+
+            var progress = new Progress(console)
+                .Columns(new ProgressColumn[]
+                {
+                    new TaskDescriptionColumn(),
+                    new ProgressBarColumn(),
+                    new PercentageColumn(),
+                    new RemainingTimeColumn(),
+                    new SpinnerColumn(),
+                })
+                .AutoRefresh(false)
+                .AutoClear(false);
+
+            // When
+            progress.Start(ctx =>
+            {
+                ctx.AddTask("foo");
+                ctx.AddTask("bar");
+                ctx.AddTask("baz");
+            });
+
+            // Then
+            return Verifier.Verify(console.Output);
+        }
     }
 }
diff --git a/src/Spectre.Console/Progress/Columns/RemainingTimeColumn.cs b/src/Spectre.Console/Progress/Columns/RemainingTimeColumn.cs
index 7c0a970..3b008d3 100644
--- a/src/Spectre.Console/Progress/Columns/RemainingTimeColumn.cs
+++ b/src/Spectre.Console/Progress/Columns/RemainingTimeColumn.cs
@@ -8,6 +8,12 @@ namespace Spectre.Console
     /// </summary>
     public sealed class RemainingTimeColumn : ProgressColumn
     {
+        /// <inheritdoc/>
+        protected internal override int? ColumnWidth => 7;
+
+        /// <inheritdoc/>
+        protected internal override bool NoWrap => true;
+
         /// <summary>
         /// Gets or sets the style of the remaining time text.
         /// </summary>
diff --git a/src/Spectre.Console/Progress/Columns/SpinnerColumn.cs b/src/Spectre.Console/Progress/Columns/SpinnerColumn.cs
index b32d711..f7f51d1 100644
--- a/src/Spectre.Console/Progress/Columns/SpinnerColumn.cs
+++ b/src/Spectre.Console/Progress/Columns/SpinnerColumn.cs
@@ -14,6 +14,12 @@ namespace Spectre.Console
         private readonly string _ansiSequence = "⣷⣯⣟⡿⢿⣻⣽⣾";
         private readonly string _asciiSequence = "-\\|/-\\|/";
 
+        /// <inheritdoc/>
+        protected internal override int? ColumnWidth => 1;
+
+        /// <inheritdoc/>
+        protected internal override bool NoWrap => true;
+
         /// <summary>
         /// Gets or sets the style of the spinner.
         /// </summary>
diff --git a/src/Spectre.Console/Progress/Columns/TaskDescriptionColumn.cs b/src/Spectre.Console/Progress/Columns/TaskDescriptionColumn.cs
index eac611f..0292b14 100644
--- a/src/Spectre.Console/Progress/Columns/TaskDescriptionColumn.cs
+++ b/src/Spectre.Console/Progress/Columns/TaskDescriptionColumn.cs
@@ -8,11 +8,14 @@ namespace Spectre.Console
     /// </summary>
     public sealed class TaskDescriptionColumn : ProgressColumn
     {
+        /// <inheritdoc/>
+        protected internal override bool NoWrap => true;
+
         /// <inheritdoc/>
         public override IRenderable Render(RenderContext context, ProgressTask task, TimeSpan deltaTime)
         {
             var text = task.Description?.RemoveNewLines()?.Trim();
-            return new Markup(text ?? string.Empty).RightAligned();
+            return new Markup(text ?? string.Empty).Overflow(Overflow.Ellipsis).RightAligned();
         }
     }
 }
diff --git a/src/Spectre.Console/Progress/ProgressColumn.cs b/src/Spectre.Console/Progress/ProgressColumn.cs
index e72585a..afd3b9a 100644
--- a/src/Spectre.Console/Progress/ProgressColumn.cs
+++ b/src/Spectre.Console/Progress/ProgressColumn.cs
@@ -8,6 +8,11 @@ namespace Spectre.Console
     /// </summary>
     public abstract class ProgressColumn
     {
+        /// <summary>
+        /// Gets a value indicating whether or not content should not wrap.
+        /// </summary>
+        protected internal virtual bool NoWrap { get; }
+
         /// <summary>
         /// Gets the requested column width for the column.
         /// </summary>
diff --git a/src/Spectre.Console/Progress/Renderers/InteractiveProgressRenderer.cs b/src/Spectre.Console/Progress/Renderers/InteractiveProgressRenderer.cs
index 7860239..ffafd63 100644
--- a/src/Spectre.Console/Progress/Renderers/InteractiveProgressRenderer.cs
+++ b/src/Spectre.Console/Progress/Renderers/InteractiveProgressRenderer.cs
@@ -65,11 +65,17 @@ namespace Spectre.Console.Internal
                 for (var columnIndex = 0; columnIndex < _columns.Count; columnIndex++)
                 {
                     var column = new GridColumn().PadRight(1);
+
                     if (_columns[columnIndex].ColumnWidth != null)
                     {
                         column.Width = _columns[columnIndex].ColumnWidth;
                     }
 
+                    if (_columns[columnIndex].NoWrap)
+                    {
+                        column.NoWrap();
+                    }
+
                     // Last column?
                     if (columnIndex == _columns.Count - 1)
                     {
diff --git a/src/Spectre.Console/Widgets/Padder.cs b/src/Spectre.Console/Widgets/Padder.cs
index e34e992..bb48bcc 100644
--- a/src/Spectre.Console/Widgets/Padder.cs
+++ b/src/Spectre.Console/Widgets/Padder.cs
@@ -58,6 +58,11 @@ namespace Spectre.Console
             var width = childWidth + paddingWidth;
             var result = new List<Segment>();
 
+            if (width > maxWidth)
+            {
+                width = maxWidth;
+            }
+
             // Top padding
             for (var i = 0; i < Padding.GetTopSafe(); i++)
             {