diff --git a/aioupnp/serialization/ssdp.py b/aioupnp/serialization/ssdp.py
index a65d689..6ffd39f 100644
--- a/aioupnp/serialization/ssdp.py
+++ b/aioupnp/serialization/ssdp.py
@@ -7,17 +7,21 @@ from aioupnp.constants import line_separator
 
 log = logging.getLogger(__name__)
 
+
+_template = "^(?i)(%s):[ ]*(.*)$"
+
+
 ssdp_datagram_patterns = {
     'host': (re.compile("^(?i)(host):(.*)$"), str),
-    'st': (re.compile("^(?i)(st):(.*)$"), str),
-    'man': (re.compile("^(?i)(man):|(\"(.*)\")$"), str),
-    'mx': (re.compile("^(?i)(mx):(.*)$"), int),
-    'nt': (re.compile("^(?i)(nt):(.*)$"), str),
-    'nts': (re.compile("^(?i)(nts):(.*)$"), str),
-    'usn': (re.compile("^(?i)(usn):(.*)$"), str),
-    'location': (re.compile("^(?i)(location):(.*)$"), str),
-    'cache_control': (re.compile("^(?i)(cache[-|_]control):(.*)$"), str),
-    'server': (re.compile("^(?i)(server):(.*)$"), str),
+    'st': (re.compile(_template % 'st'), str),
+    'man': (re.compile(_template % 'man'), str),
+    'mx': (re.compile(_template % 'mx'), int),
+    'nt': (re.compile(_template % 'nt'), str),
+    'nts': (re.compile(_template % 'nts'), str),
+    'usn': (re.compile(_template % 'usn'), str),
+    'location': (re.compile(_template % 'location'), str),
+    'cache_control': (re.compile(_template % 'cache[-|_]control'), str),
+    'server': (re.compile(_template % 'server'), str),
 }
 
 vendor_pattern = re.compile("^([\w|\d]*)\.([\w|\d]*\.com):([ \"|\w|\d\:]*)$")
diff --git a/aioupnp/serialization/test_ssdp.py b/aioupnp/serialization/test_ssdp.py
index 324feed..ed35ba8 100644
--- a/aioupnp/serialization/test_ssdp.py
+++ b/aioupnp/serialization/test_ssdp.py
@@ -4,7 +4,7 @@ from aioupnp.fault import UPnPError
 from aioupnp.constants import UPNP_ORG_IGD
 
 
-class TestParseMSearchRequest(unittest.TestCase):
+class TestParseMSearchRequestWithQuotes(unittest.TestCase):
     datagram = b'M-SEARCH * HTTP/1.1\r\n' \
                b'HOST: 239.255.255.250:1900\r\n' \
                b'ST: urn:schemas-upnp-org:device:InternetGatewayDevice:1\r\n' \
@@ -12,6 +12,23 @@ class TestParseMSearchRequest(unittest.TestCase):
                b'MX: 1\r\n' \
                b'\r\n'
 
+    def test_parse_m_search(self):
+        packet = SSDPDatagram.decode(self.datagram)
+        self.assertTrue(packet._packet_type, packet._M_SEARCH)
+        self.assertEqual(packet.host, '239.255.255.250:1900')
+        self.assertEqual(packet.st, 'urn:schemas-upnp-org:device:InternetGatewayDevice:1')
+        self.assertEqual(packet.man, '"ssdp:discover"')
+        self.assertEqual(packet.mx, 1)
+
+
+class TestParseMSearchRequestWithoutQuotes(unittest.TestCase):
+    datagram = b'M-SEARCH * HTTP/1.1\r\n' \
+               b'HOST: 239.255.255.250:1900\r\n' \
+               b'ST: urn:schemas-upnp-org:device:InternetGatewayDevice:1\r\n' \
+               b'MAN: ssdp:discover\r\n' \
+               b'MX: 1\r\n' \
+               b'\r\n'
+
     def test_parse_m_search(self):
         packet = SSDPDatagram.decode(self.datagram)
         self.assertTrue(packet._packet_type, packet._M_SEARCH)