diff --git a/lldb/source/Commands/CommandObjectExpression.h b/lldb/source/Commands/CommandObjectExpression.h
new file mode 100644
index 0000000..c67ba74
--- /dev/null
+++ b/lldb/source/Commands/CommandObjectExpression.h
@@ -0,0 +1,105 @@
+//===-- CommandObjectExpression.h -------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_CommandObjectExpression_h_
+#define liblldb_CommandObjectExpression_h_
+
+// C Includes
+// C++ Includes
+// Other libraries and framework includes
+// Project includes
+#include "lldb/Interpreter/CommandObject.h"
+#include "lldb/Core/Options.h"
+#include "lldb/Core/Language.h"
+#include "lldb/Target/ExecutionContext.h"
+
+namespace lldb_private {
+
+class CommandObjectExpression : public CommandObject
+{
+public:
+
+    class CommandOptions : public Options
+    {
+    public:
+
+        CommandOptions ();
+
+        virtual
+        ~CommandOptions ();
+
+        virtual Error
+        SetOptionValue (int option_idx, const char *option_arg);
+
+        void
+        ResetOptionValues ();
+
+        const lldb::OptionDefinition*
+        GetDefinitions ();
+
+        // Options table: Required for subclasses of Options.
+
+        static lldb::OptionDefinition g_option_table[];
+        Language  language;
+        lldb::Encoding  encoding;
+        lldb::Format    format;
+        bool        debug;
+        bool        show_types;
+        bool        show_summary;
+    };
+
+    CommandObjectExpression ();
+
+    virtual
+    ~CommandObjectExpression ();
+
+    virtual
+    Options *
+    GetOptions ();
+
+
+    virtual bool
+    Execute (Args& command,
+             CommandContext *context,
+             CommandInterpreter *interpreter,
+             CommandReturnObject &result);
+
+    virtual bool
+    WantsRawCommandString() { return true; }
+
+    virtual bool
+    ExecuteRawCommandString (const char *command,
+                             CommandContext *context,
+                             CommandInterpreter *interpreter,
+                             CommandReturnObject &result);
+
+protected:
+
+    static size_t
+    MultiLineExpressionCallback (void *baton, 
+                                 InputReader *reader, 
+                                 lldb::InputReaderAction notification,
+                                 const char *bytes, 
+                                 size_t bytes_len);
+
+    bool
+    EvaluateExpression (const char *expr, 
+                        bool bare,
+                        Stream &output_stream, 
+                        Stream &error_stream);
+
+    CommandOptions m_options;
+    ExecutionContext m_exe_ctx;
+    uint32_t m_expr_line_count;
+    std::string m_expr_lines; // Multi-line expression support
+};
+
+} // namespace lldb_private
+
+#endif  // liblldb_CommandObjectExpression_h_
