These functions could not be implemented at the individual switch level but needed to be done from a centralized location since the subscriber, network, and service data were needed to decide how to process the call. Initially, the NCP was a relatively static service-specific program. It had an application to handle collect calls, an application for toll-free 800 services, an application for blocking calls from delin- quent accounts, etc. It soon became clear that many of the service application shared a common set of functions. The "service logic" was slightly different but there were a set of primitive functions that the network supported, and a small set of logical steps that tied those functions together. The data varied and the specific parameters used for a service might vary but there was a reusable set. The programmable network and, in particular, the programmable network controller was born. The Direct Services Dialing Capability (DSDC) network was a new way to do networking. Switches, known as action points, had an API that could be called over a remote transport network (CCIS6/SS7) and controllers, known as control points, could invoke the programs in a service exe- cution environment. The service execution environment was a logical view of the network. Switches queried controllers, controllers executed the program and called APIs into the switches to bill and route calls. The controller had a function to set billing parameters and to route calls for basic func- tions. Advanced functions used APIs to play announcements and collect digits, to look up digits for validation and conversion, and to temporarily route to a destination and then reroute the call. These functions allowed different services to be created. The Toll Free Service (i.e., 800-service) that translated one dialed number into another destination number and set billing parameters to charge the called party for the call was another example of using SDN-like techniques in a pre-SDN world. The decisions on which destination number was contro