diff --git a/lib/cask/cli/linkapps.rb b/lib/cask/cli/linkapps.rb
index b7dda4430..0fcc402ee 100644
--- a/lib/cask/cli/linkapps.rb
+++ b/lib/cask/cli/linkapps.rb
@@ -1,8 +1,9 @@
 class Cask::CLI::Linkapps
   def self.run(*arguments)
-    Cask.installed.map { |app|
+    casks_to_link = arguments.empty? ? Cask.installed : arguments
+    casks_to_link.each do |app|
       Cask.load(app).linkapps
-    }
+    end
   end
 
   def self.help
diff --git a/test/cli/linkapps_test.rb b/test/cli/linkapps_test.rb
new file mode 100644
index 000000000..3e2cf1569
--- /dev/null
+++ b/test/cli/linkapps_test.rb
@@ -0,0 +1,24 @@
+require 'test_helper'
+
+describe Cask::CLI::Linkapps do
+  it "only links casks provided in arguments" do
+    mock_cask = mock()
+    mock_cask.expects(:linkapps).twice
+    Cask.expects(:load).with('adium').returns(mock_cask)
+
+    Cask.expects(:load).with('google-chrome').returns(mock_cask)
+    Cask::CLI::Linkapps.run('adium', 'google-chrome')
+  end
+
+  it "links all installed casks when no arguments supplied" do
+    mock_cask = mock()
+    mock_cask.expects(:linkapps).times(3)
+
+    Cask.expects(:installed).returns(['foo', 'bar', 'baz'])
+    Cask.expects(:load).with('foo').returns(mock_cask)
+    Cask.expects(:load).with('bar').returns(mock_cask)
+    Cask.expects(:load).with('baz').returns(mock_cask)
+
+    Cask::CLI::Linkapps.run
+  end
+end