diff --git a/Code/Mantid/Framework/Algorithms/src/ExtractSingleSpectrum.cpp b/Code/Mantid/Framework/Algorithms/src/ExtractSingleSpectrum.cpp
index 46eb8da4709a8123e919bbf08a931666035e606d..d1371627f13ea4ed39351deea6b1ed6cc9878fad 100644
--- a/Code/Mantid/Framework/Algorithms/src/ExtractSingleSpectrum.cpp
+++ b/Code/Mantid/Framework/Algorithms/src/ExtractSingleSpectrum.cpp
@@ -56,8 +56,17 @@ void ExtractSingleSpectrum::exec()
   const Axis * axisOne = inputWorkspace->getAxis(1);
   if( axisOne->isSpectra() )
   {
-    outputWorkspace->getAxis(1)->spectraNo(0) = inputWorkspace->getAxis(1)->spectraNo(desiredSpectrum);
+    const specid_t outSpecNo = inputWorkspace->getAxis(1)->spectraNo(desiredSpectrum);
+    outputWorkspace->getAxis(1)->spectraNo(0) = outSpecNo;
+    ISpectrum* outSpec = outputWorkspace->getSpectrum(0);
+    // Also set the spectrum number to the group number
+    outSpec->setSpectrumNo(outSpecNo);
+    outSpec->clearDetectorIDs();
+    const ISpectrum* inSpec = inputWorkspace->getSpectrum(desiredSpectrum);
+    // Add the detectors for this spectrum to the output workspace's spectra-detector map
+    outSpec->addDetectorIDs( inSpec->getDetectorIDs() );
   }
+
   setProperty("OutputWorkspace",outputWorkspace);
   progress(1.0);
 }
diff --git a/Code/Mantid/Framework/Algorithms/test/ExtractSingleSpectrumTest.h b/Code/Mantid/Framework/Algorithms/test/ExtractSingleSpectrumTest.h
index d2e92a33c00fb06c05294801cec36d4b107d6390..cf4ad86064d8e01c29d40a9482652420e4444de6 100644
--- a/Code/Mantid/Framework/Algorithms/test/ExtractSingleSpectrumTest.h
+++ b/Code/Mantid/Framework/Algorithms/test/ExtractSingleSpectrumTest.h
@@ -6,6 +6,8 @@
 #include "MantidAlgorithms/ExtractSingleSpectrum.h"
 #include "MantidTestHelpers/WorkspaceCreationHelper.h"
 
+using Mantid::detid_t;
+
 class ExtractSingleSpectrumTest : public CxxTest::TestSuite
 {
 public:
@@ -36,20 +38,25 @@ public:
   {
     using namespace Mantid::API;
     
-    MatrixWorkspace_sptr inputWS = WorkspaceCreationHelper::Create2DWorkspace154(5,5);
-    const int spectrum = 2;
-    for (int i=0; i<5; ++i)
+    const int nbins(5);
+    MatrixWorkspace_sptr inputWS = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(5,nbins);
+
+    const int wsIndex = 2;
+    for (int i=0; i<nbins+1; ++i)
     {
-      inputWS->dataX(spectrum)[i] = i;
-      inputWS->dataY(spectrum)[i] = 20-i;
-      inputWS->dataE(spectrum)[i] = 7;
+      inputWS->dataX(wsIndex)[i] = i;
+      if( i < nbins )
+      {
+        inputWS->dataY(wsIndex)[i] = 20-i;
+        inputWS->dataE(wsIndex)[i] = 7;
+      }
     }
-    inputWS->getAxis(1)->spectraNo(spectrum) = spectrum;
+    inputWS->getAxis(1)->spectraNo(wsIndex) = wsIndex;
     AnalysisDataService::Instance().add("input",inputWS);
     
     TS_ASSERT_THROWS_NOTHING( extractor.setPropertyValue("InputWorkspace","input") )
     TS_ASSERT_THROWS_NOTHING( extractor.setPropertyValue("OutputWorkspace","output") )
-    TS_ASSERT_THROWS_NOTHING( extractor.setProperty("WorkspaceIndex",spectrum) )
+    TS_ASSERT_THROWS_NOTHING( extractor.setProperty("WorkspaceIndex",wsIndex) )
     
     TS_ASSERT_THROWS_NOTHING( extractor.execute() )
     TS_ASSERT( extractor.isExecuted() )
@@ -59,13 +66,30 @@ public:
     MatrixWorkspace_const_sptr outputWS;
     TS_ASSERT( outputWS = boost::dynamic_pointer_cast<const MatrixWorkspace>(output) )
     TS_ASSERT_EQUALS( outputWS->blocksize(), 5 )
-    TS_ASSERT_EQUALS( outputWS->readX(0).size(), 5 )
-    TS_ASSERT_EQUALS( outputWS->getAxis(1)->spectraNo(0), spectrum )
-    for (int j=0; j<5; ++j)
+    TS_ASSERT_EQUALS( outputWS->readX(0).size(), nbins+1)
+    TS_ASSERT_EQUALS( outputWS->getAxis(1)->spectraNo(0), wsIndex )
+    for (int j=0; j<nbins+1; ++j)
+    {
+      TS_ASSERT_EQUALS( outputWS->readX(0)[j], j );
+      if( j < nbins )
+      {
+        TS_ASSERT_EQUALS( outputWS->readY(0)[j], 20-j );
+        TS_ASSERT_EQUALS( outputWS->readE(0)[j], 7 );
+      }
+    }
+
+    const Mantid::API::ISpectrum *spectrum(NULL);
+    TS_ASSERT_THROWS_NOTHING(spectrum = outputWS->getSpectrum(0));
+    if( spectrum )
+    {
+      std::set<detid_t> detids = spectrum->getDetectorIDs();
+      TS_ASSERT_EQUALS(detids.size(), 1);
+      const detid_t id = *(detids.begin());
+      TS_ASSERT_EQUALS(id, 3);
+    }
+    else
     {
-      TS_ASSERT_EQUALS( outputWS->readX(0)[j], j )
-      TS_ASSERT_EQUALS( outputWS->readY(0)[j], 20-j )
-      TS_ASSERT_EQUALS( outputWS->readE(0)[j], 7 )
+      TS_FAIL("No spectra/detectors associated with extracted histogram.");
     }
     
     AnalysisDataService::Instance().remove("input");