A prominent approach to implementing ontology-mediated queries (OMQs) is to rewrite into a first-order query, which is then executed using a conventional SQL database system. We consider the case where the ontology is formulated in the description logic EL and the actual query is a conjunctive query and show that rewritings of such OMQs can be efficiently computed in practice, in a sound and complete way. Our approach combines a reduction with a decomposed backwards chaining algorithm for OMQs that are based on the simpler atomic queries, also illuminating the relationship between first-order rewritings of OMQs based on conjunctive and on atomic queries. Experiments with real-world ontologies show promising results. ⋆ This is a pre-print of an article published in ISWC2018. The final authenticated version is available online at: https://doi.org/10.1007/978-3-319-68288-4 21 natural in the context of backwards chaining and satisfied by the decomposed algorithm.We then move to rooted CQs (rCQs) in which every quantified variable must be reachable from some answer variable (in an undirected sense, in the query graph). We consider this a mild restriction and expect that almost all queries in practical applications will be rCQs. In the rCQ case, we do not achieve a 'black box' reduction. Instead, we assume that FO-rewritings of the constructed OMQs from (EL, AQ) are obtained from a certain straightforward backwards chaining algorithm or a refinement thereof as implemented in the Grind system. We then show how to combine the construction of (several) OMQs from (EL, AQ), similar to those constructed in the tqCQ case, with a modification of the assumed algorithm to decide FO-rewritability in (EL, rCQ) and to construct actual rewritings. The approach involves exponential blowups, but only in parameters that we expect to be very small in practical cases and that, in particular, only depend on the actual query contained in the OMQ but not on the ontology.We have implemented our approach in the Grind system and carried out experiments on five real-world ontologies with 10 hand-crafted CQs for each. The average runtimes are between 0.5 and 19 seconds (depending on the ontology), which we consider very reasonable given that we are dealing with a complex static analysis problem.Proofs are deferred to the appendix, which is made available at http://www.cs.uni-bremen.de/tdki/research/ Related Work. We directly build on our prior work in [12] as discussed above, and to a lesser degree also on [5,6]. The latter line of work has recently been picked up in the context of existential rules [3]. The distinguishing features of our work are that (1) our algorithms are sound, complete, and terminating, that is, they find an FO-rewriting if there is one and report failure otherwise, and (2) we rely on the decomposed calculus from [12] that implements structure sharing for constructing small rewritings and achieving practical feasibility. We are not aware of other work that combines features (1) and (2) and is applicable to OMQs based on EL....