Modern online learning management systems (LMSs) support a variety of online learning activities, such as animations, exercises, and other interactive learning materials. However, there are many technical challenges in using the same activities in multiple LMSs because content is typically tightly coupled with one protocol to communicate with the LMS and different LMSs use different protocols for launching activities and receiving grades. This leads to low reusability of learning activities and similar content being developed in multiple places. To overcome these issues, we present Acos, a smart learning content server, which emphasizes the reusability of online learning activities by decoupling the content and existing interoperability protocols. It allows integrating the same learning activities into multiple LMSs using different protocols by providing a uniform interface for learning activities. Adapting this architecture allows instructors to choose activities based on pedagogical goals instead of letting technical restrictions of LMSs dictate the content selection process.T. Sirkiä, and L. Haaranen Figure 2. Different types of online learning activities with varying degrees of interaction from the domain of CS. In a), the learner can write any code and interactively see the results. In b), the learner input is more limited, and the learner can only arrange the given code blocks. In c), the input is most limited, and the learner can only control the visualization. [Colour figure can be viewed at wileyonlinelibrary.com] T. Sirkiä, and L. Haaranen 3.6.2. Submitting Results. After the learner has solved the exercise, the grade can be submitted back to the LMS. A similar process can be used to send any kind of data back to the LMS. We describe here how this process works. See Figure 5 to follow the description.Step 1 The activity in the browser sends an event by calling a JavaScript function. This event can be a logging or grading event, for example. When the activity was loaded, the protocol added a client-side JavaScript-library that has a protocol-independent interface for a function that the activity can call. The only requirement for the activity is the ability to call this function if two-way communication is needed.After the visualization has finished, Jsvee visualization calls the client-side sendEvent function to submit a grading event to Acos. Jsvee does not know that LTI protocol is used to launch the exercise, it only knows that the sendEvent function is available.Step 2 The client-side JavaScript protocol library in the browser receives the event. Before the event is sent to Acos, the client-side protocol library can add any needed session or protocolspecific data to it. When the client-side processing is ready, the event is sent as a normal HTTP POST request to Acos using AJAX.The client-side support for the LTI protocol handles the function call and receives the event. A browser searches for the learner id and submission URL which are required by the LTI protocol. These are found in hidden HTML fie...