diff --git a/Android.mk b/Android.mk
index 2f2422e..ce73697 100644
--- a/Android.mk
+++ b/Android.mk
@@ -11,7 +11,7 @@
 
 LOCAL_SRC_FILES:=                                      \
                   main.cpp                             \
-		  CommandListener.cpp                  \
+                  CommandListener.cpp                  \
                   NetdCommand.cpp                      \
                   NetlinkManager.cpp                   \
                   NetlinkHandler.cpp                   \
@@ -19,7 +19,8 @@
                   TetherController.cpp                 \
                   NatController.cpp                    \
                   PppController.cpp                    \
-                  PanController.cpp
+                  PanController.cpp                    \
+                  SoftapController.cpp
 
 LOCAL_MODULE:= netd
 
diff --git a/CommandListener.cpp b/CommandListener.cpp
index eba88de..0bbab15 100644
--- a/CommandListener.cpp
+++ b/CommandListener.cpp
@@ -44,6 +44,7 @@
 NatController *CommandListener::sNatCtrl = NULL;
 PppController *CommandListener::sPppCtrl = NULL;
 PanController *CommandListener::sPanCtrl = NULL;
+SoftapController *CommandListener::sSoftapCtrl = NULL;
 
 CommandListener::CommandListener() :
                  FrameworkListener("netd") {
@@ -54,6 +55,7 @@
     registerCmd(new ListTtysCmd());
     registerCmd(new PppdCmd());
     registerCmd(new PanCmd());
+    registerCmd(new SoftapCmd());
 
     if (!sTetherCtrl)
         sTetherCtrl = new TetherController();
@@ -63,6 +65,8 @@
         sPppCtrl = new PppController();
     if (!sPanCtrl)
         sPanCtrl = new PanController();
+    if (!sSoftapCtrl)
+        sSoftapCtrl = new SoftapController();
 }
 
 CommandListener::InterfaceCmd::InterfaceCmd() :
@@ -471,3 +475,44 @@
 
     return 0;
 }
+
+CommandListener::SoftapCmd::SoftapCmd() :
+                 NetdCommand("softap") {
+}
+
+int CommandListener::SoftapCmd::runCommand(SocketClient *cli,
+                                        int argc, char **argv) {
+    int rc = 0;
+
+    if (argc < 2) {
+        cli->sendMsg(ResponseCode::CommandSyntaxError, "Softap Missing argument", false);
+        return 0;
+    }
+
+    if (!strcmp(argv[1], "start")) {
+        rc = sSoftapCtrl->startSoftap();
+    } else if (!strcmp(argv[1], "stop")) {
+        rc = sSoftapCtrl->stopSoftap();
+    } else if (!strcmp(argv[1], "status")) {
+        char *tmp = NULL;
+
+        asprintf(&tmp, "Softap service %s",
+                 (sSoftapCtrl->isSoftapStarted() ? "started" : "stopped"));
+        cli->sendMsg(ResponseCode::SoftapStatusResult, tmp, false);
+        free(tmp);
+        return 0;
+    } else if (!strcmp(argv[1], "set")) {
+        rc = sSoftapCtrl->setSoftap(argc, argv);
+    } else {
+        cli->sendMsg(ResponseCode::CommandSyntaxError, "Softap Unknown cmd", false);
+        return 0;
+    }
+
+    if (!rc) {
+        cli->sendMsg(ResponseCode::CommandOkay, "Softap operation succeeded", false);
+    } else {
+        cli->sendMsg(ResponseCode::OperationFailed, "Softap operation failed", true);
+    }
+
+    return 0;
+}
diff --git a/CommandListener.h b/CommandListener.h
index 84476dd..82bebdd 100644
--- a/CommandListener.h
+++ b/CommandListener.h
@@ -24,12 +24,14 @@
 #include "NatController.h"
 #include "PppController.h"
 #include "PanController.h"
+#include "SoftapController.h"
 
 class CommandListener : public FrameworkListener {
     static TetherController *sTetherCtrl;
     static NatController *sNatCtrl;
     static PppController *sPppCtrl;
     static PanController *sPanCtrl;
+    static SoftapController *sSoftapCtrl;
 
 public:
     CommandListener();
@@ -37,6 +39,13 @@
 
 private:
 
+    class SoftapCmd : public NetdCommand {
+    public:
+        SoftapCmd();
+        virtual ~SoftapCmd() {}
+        int runCommand(SocketClient *c, int argc, char ** argv);
+    };
+
     class InterfaceCmd : public NetdCommand {
     public:
         InterfaceCmd();
diff --git a/ResponseCode.h b/ResponseCode.h
index de54e8b..f622254 100644
--- a/ResponseCode.h
+++ b/ResponseCode.h
@@ -34,6 +34,7 @@
     static const int IpFwdStatusResult        = 211;
     static const int PanStatusResult          = 212;
     static const int InterfaceGetCfgResult    = 213;
+    static const int SoftapStatusResult       = 214;
 
     // 400 series - The command was accepted but the requested action
     // did not take place.
diff --git a/SoftapController.cpp b/SoftapController.cpp
new file mode 100644
index 0000000..88bae5c
--- /dev/null
+++ b/SoftapController.cpp
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2008 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.
+ */
+
+#include <stdlib.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#define LOG_TAG "SoftapController"
+#include <cutils/log.h>
+
+#include "SoftapController.h"
+
+SoftapController::SoftapController() {
+    mPid = 0;
+}
+
+SoftapController::~SoftapController() {
+}
+
+int SoftapController::startSoftap() {
+    pid_t pid = 1;
+
+    LOGD("Softap start");
+    if (mPid) {
+        LOGE("Softap already started");
+        errno = EBUSY;
+        return -1;
+    }
+#if 0
+   if ((pid = fork()) < 0) {
+        LOGE("fork failed (%s)", strerror(errno));
+        return -1;
+    }
+#endif
+    if (!pid) {
+        LOGE("Softap Started");
+        return 0;
+    } else {
+        mPid = pid;
+    }
+    return 0;
+
+}
+
+int SoftapController::stopSoftap() {
+    LOGD("Softap stop");
+    if (mPid == 0) {
+        LOGE("Softap already stopped");
+        return 0;
+    }
+#if 0
+    LOGD("Stopping Softap service");
+    kill(mPid, SIGTERM);
+    waitpid(mPid, NULL, 0);
+#endif
+    mPid = 0;
+    LOGD("Softap service stopped");
+    return 0;
+}
+
+bool SoftapController::isSoftapStarted() {
+    return (mPid != 0 ? true : false);
+}
+
+int SoftapController::setSoftap(int argc, char *argv[]) {
+    LOGD("Softap set");
+    return 0;
+}
diff --git a/SoftapController.h b/SoftapController.h
new file mode 100644
index 0000000..1af113d
--- /dev/null
+++ b/SoftapController.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2008 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.
+ */
+
+#ifndef _SOFTAP_CONTROLLER_H
+#define _SOFTAP_CONTROLLER_H
+
+#include <linux/in.h>
+
+#include <utils/List.h>
+
+class SoftapController {
+    pid_t mPid;
+
+public:
+    SoftapController();
+    virtual ~SoftapController();
+
+    int startSoftap();
+    int stopSoftap();
+    bool isSoftapStarted();
+    int setSoftap(int argc, char *argv[]);
+};
+
+#endif
